NFS简介:
NFS(Network File System)即网络文件系统。它的主要功能是通过网络让不同主机系统之间可以共享文件或目录。
NFS与Samba服务类似,但一般Samba服务常用于办公局域网共享,而NFS常用于互联网中小型网站集群架构后端的数据共享。
NFS客户端将NFS服务端设置好的共享目录挂载到本地某个挂载点,对于客户端来说,共享的资源就相当于在本地的目录下。
NFS在传输数据时使用的端口是随机选择的,依赖RPC服务来与外部通信,要想正常使用NFS,就必须保证RPC正常。
RPC简介:
RPC(Remote Procedure Call Protocol)远程过程调用协议。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
在NFS服务端和NFS客户端之间,RPC服务扮演一个中介角色,NFS客户端通过RPC服务得知NFS服务端使用的端口,从而双方可以进行数据通信。
流程:
当NFS服务端启动服务时会随机取用若干端口,并主动向RPC服务注册取用相关端口及功能信息,这样,RPC服务就知道NFS每个端口对应的的NFS功能了,然后RPC服务使用固定的111端口来监听NFS客户端提交的请求,并将正确的NFS端口信息回复给请求的NFS客户端。这样,NFS客户就可以与NFS服务端进行数据传输了。
搭建NFS服务器端:
环境:centos6.6 ,ip:192.168.239.131
安装 nfs 与 rpc 相关软件包:
yum install nfs-utils rpcbind -y
NFS默认的配置文件是 /etc/exports ,配置格式为:
NFS共享目录绝对路径 NFS客户端地址(参数)
常用参数:
rw read-write 读写
ro read-only 只读
sync 请求或写入数据时,数据同步写入到NFS server的硬盘后才返回。数据安全,但性能降低了
async 优先将数据保存到内存,硬盘有空档时再写入硬盘,效率更高,但可能造成数据丢失。
root_squash 当NFS 客户端使用root 用户访问时,映射为NFS 服务端的匿名用户
no_root_squash 当NFS 客户端使用root 用户访问时,映射为NFS 服务端的root 用户
all_squash 不论NFS 客户端使用任何帐户,均映射为NFS 服务端的匿名用户
配置 /etc/exports:
/sharedir 192.168.239.0/24(rw,sync,root_squash)
创建共享目录以及测试文件:
mkdir -p /sharedir
touch /sharedir/Welcom.file
echo "Welcome to onlylink.top" >/sharedir/Welcom.file
给共享目录添加权限:
chown -R nfsnobody.nfsnobody /sharedir/
把NFS共享目录赋予 NFS默认用户nfsnobody用户和用户组权限,如不设置,会导致NFS客户端无法在挂载好的共享目录中写入数据
启动 rpc服务并设置成开机自启动:
/etc/init.d/rpcbind start
chkconfig rpcbind on
启动 nfs服务并设置成开机自启动:
/etc/init.d/nfs start
chkconfig nfs on
客户端:
安装nfs 与 rpc 相关软件包:
yum install nfs-utils rpcbind -y
启动 rpc服务并设置成开机自启动(不需要启动 NFS服务):
/etc/init.d/rpcbind start
chkconfig rpcbind on
查询远程NFS 服务端中可用的共享资源:
showmount -e 192.168.239.131
如果报如下的错误多数是防火墙导致:
lnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
到服务端清空 iptables默认规则 或关闭 iptables:
iptables -F 或 service iptables stop
再次查询:
[root@test ~]# showmount -e 192.168.239.131
Export list for 192.168.239.131:
/sharedir 192.168.239.0/24
创建挂载目录,并挂载 NFS共享目录 /sharedir
mkdir -p /sharedir
mount -t nfs 192.168.239.131:/sharedir/ /sharedir/
如果想要开机自动将共享目录挂载到本地,往/etc/fstab 中追加:
192.168.239.131:/sharedir/ /sharedir/ nfs defaults 0 0
验证是否有 rw 权限:
[root@test ~]# cat /sharedir/Welcom.file
Welcome to onlylink.top
[root@test ~]# mkdir -p /sharedir/hello
[root@test ~]# echo "Hello" >> /sharedir/Welcom.file
[root@test ~]# cat /share/Welcom.file
Welcome to onlylink.top
Hello
OK,到此大功告成 !
NFS服务可以让不同的客户端挂载使用同一个共享目录,将其作为共享存储使用,这样可以保证不同节点端数据一致性,在集群中经常会用到,如是Windows与Linux的混合集群,就用Samba实现。如果在大型网站可能会用到Moosefs,GlusterFS,FastDFS来代替NFS。