1、NFS介绍
NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。将NFS主机分享的目录,挂载到本地客户端当中,本地NFS的客户端应用可以读写位于远端NFS服务器上的文件。在客户端看起来,就像访问本地文件一样。
2、NFS原理
2.1、NFS服务原理
NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定,客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息。PRC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,记客户端可以连接到正常端口上去。
在启动NFS SERVER之前,首先要启动RPC服务(即portmap或rpcbind服务)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs reload或exportfs –rv即可使修改的/etc/exports生效。
2.2、NFS服务的优缺点
优点 :
a.节省本地存储空间,将常用的数据存放在一台服务器可以通过网络访问该数据
缺点 :
a.局限性容易发生单点故障,服务器机宕机的话所有客户端都不能访问
b.在高并发情况下NFS效率/性能有限
c.客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)
d.NFS的数据是明文的,对数据完整性不做验证
e.多台机器挂载NFS服务器时,连接管理维护麻烦
3、NFS安装
# 1、检查rcpbind 和 nfs是否安装
rpm -qa nfs-utils rpcbind
# 2、安装nfs 和 rpcbind
yum install nfs-utils rpcbind -y
# 3、通过systemctl设置自启动
systemctl enable nfs-server
systemctl enable rpcbind
# 4、验证是否自启动
systemctl is-active nfs-server
systemctl is-active rpcbind
4、NFS共享及客户端挂载
4.1、NFS共享
# 1、通过/etc/exports文件定义共享目录,vi编辑exports文件
vi /etc/exports
# 2、加入共享目录和共享规则
#以读写的方式共享目录 /public 能被IP为 10.84.196.* 网段的服务器访问
/opt/resources 10.84.196.*(rw,sync,no_root_squash)
#共享格式为:
共享目录绝对路径 授权访问的IP或网段(权限1,权限2)
权限说明
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squash root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID
# 3、保存退出后,通过exportfs命令重新加载共享文件列表/etc/exports,生效设置
exportfs -r
# 4、查看共享目录
exports -v
# exportfs - 管理NFS共享文件系统列表
exportfs命令:
-a 打开或取消所有目录共享。
-o options,... 指定一列共享选项,与 exports(5) 中讲到的类似。
-i 忽略 /etc/exports 文件,从而只使用默认的和命令行指定的选项。
-r 重新共享所有目录。它使 /var/lib/nfs/xtab 和 /etc/exports 同步。它将 /etc/exports 中已删除的条目从 /var/lib/nfs/xtab 中删除,将内核共享表中任何不再有效的条目移除。
-u 取消一个或多个目录的共享。
-f 在“新”模式下,刷新内核共享表之外的任何东西。任何活动的客户程序将在它们的下次请求中得到mountd 添加的新的共享条目。
-v 输出详细信息。当共享或者取消共享时,显示在做什么。显示当前共享列表的时候,同时显示共享的选项。
# 卸载所有共享
exportfs -au
# 重挂所有
exportfs -ar
4.2、客户端挂载
# 1、使用showmount命令查看远程NFS服务器共享目录
showmount ip -e
# 2、新建挂载点
mkdir -p /opt/resources
# 3、挂载
mount -t nfs ip:/opt/resources/ /opt/resources/
# 4、设置开机挂载
vi /etc/rc.local
# 将挂载命令加入文件即可
mount -t nfs ip:/opt/resources/ /opt/resources/
# 5、验证挂载
mount |grep "/opt/resources/"