一、NFS介绍
NFS是Network File System的缩写。
NFS最早由sun公司开发,分2,3,4三个版本,2和3由sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本。
NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。
NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别挂载A共享的数据目录,从而B和C访问到的数据和A上的一致。
NFS原理:
RPC服务是由rpcbind所实现的,centos5及之前叫protmap,centos6及之后叫rpcbind,是一个东西,原理就是启动了这个rpcbind服务,实现了RPC协议的通信;默认NFS服务不监听任何端口,启动了服务但是不会监听端口;客户端和服务端监听端口实现TCP/IP协议通信的是由rpcbind这个服务产生的RPC协议实现的;rpcbind会监听111端口;TCP/IP协议先通信,然后NFS服务会在RPC协议里注册一个端口,NFS告诉服务端RPC通信的端口是谁,然后服务端RPC再告诉客户端的RPC,然后NFS客户端这台机器再和NFS服务端的这个端口去通信,最终实现数据传输。
总结:NFS服务需要通过RPC协议进行通信。
二、NFS服务端安装配置
准备两台机器,一台服务端,一台客户端。
服务端上安装两个包:nfs-utils和rpcbind;
客户端上安装一个包:nfs-utils。
# yum install -y nfs-utils rpcbind
//这里不管写不写rpcbind,这个nfs-utils都会给你安装上这个包。
当epel这个安装很慢的时候,把这个文件改一个名字即可:
# cd /etc/yum.repos.d/
# mv epel.repo epel.repo.1
# vim /etc/exports //加入如下内容
/home/nfstestdir 192.168.93.2/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
这里指定共享的目录,共享的机器的IP或IP段。
保存配置文件后,执行如下准备操作
# mkdir /home/nfstestdir
# chmod 777 /home/nfstestdir 给777权限是为了方便做实验
# netstat -lntp //可以看到111端口已经被监听了,这个就是rpcbind服务,安装完rpcbind以后这个就会自动的启动。
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
# systemctl start rpcbind
# systemctl start nfs
# ps aux |grep nfs
root 5745 0.0 0.0 0 0 ? S< 21:33 0:00 [nfsd4_callbacks]
root 5751 0.0 0.0 0 0 ? S 21:33 0:00 [nfsd]
root 5752 0.0 0.0 0 0 ? S 21:33 0:00 [nfsd]
root 5753 0.0 0.0 0 0 ? S 21:33 0:00 [nfsd]
root 5754 0.0 0.0 0 0 ? S 21:33 0:00 [nfsd]
root 5755 0.0 0.0 0 0 ? S 21:33 0:00 [nfsd]
root 5756 0.0 0.0 0 0 ? S 21:33 0:00 [nfsd]
root 5757 0.0 0.0 0 0 ? S 21:33 0:00 [nfsd]
root 5758 0.0 0.0 0 0 ? S 21:33 0:00 [nfsd]
root 5763 0.0 0.0 112676 984 pts/1 S+ 21:33 0:00 grep --color=auto nfs
# ps aux |grep rpcbind 当nfs启动以后,rpcbind会自动启动一些相关的服务
rpc 5694 0.1 0.0 64956 1404 ? Ss 21:31 0:00 rpcbind
rpcuser 5717 0.0 0.0 42376 1744 ? Ss 21:33 0:00 /usr/sbin/rpc.statd
root 5718 0.0 0.0 0 0 ? S< 21:33 0:00 [rpciod]
root 5734 0.0 0.0 42564 944 ? Ss 21:33 0:00 /usr/sbin/rpc.mountd
root 5735 0.0 0.0 43816 540 ? Ss 21:33 0:00 /usr/sbin/rpc.idmapd
root 5765 0.0 0.0 112680 980 pts/1 S+ 21:35 0:00 grep --color=auto rpc
# systemctl enable rpcbind
# systemctl enable nfs 开机启动,在服务端执行。
三、NFS配置选项
/home/nfstestdir 192.168.93.2/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
rw 读写
ro 只读
sync 同步模式,内存数据实时写入磁盘,可以很快写入磁盘,相应的会降低磁盘效率。
async 非同步模式,不实时写入磁盘,每隔一段时间会把内存的东西写到磁盘里去,这样的好处是能保证磁盘的效率,缺点是万一断电了,数据就会丢一部分。
no_root_squash 客户端挂载NFS共享目录后,root用户不受约束,权限很大
root_squash 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户
all_squash 客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户
anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid
客户端挂载
# yum install -y nfs-utils
# showmount -e 192.168.93.130 //该ip为NFS服务端ip
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
//报错,不能和93.130的111端口通信,原因有2个:一,是93.130的111端口是否打开;二,防火墙导致。
# systemctl stop firewalld 建议:关掉防火墙,服务端和客户端都关。
# getenforce 检查Selinux,也要关,服务端和客户端都要关。
Disabled
# showmount -e 192.168.93.130 通信OK
Export list for 192.168.93.130:
/home/nfstestdir 192.168.93.2/24 看到了93.130这台机器共享目录和共享的机器给了这个IP段。
# mount -t nfs 192.168.93.130:/home/nfstestdir /mnt 把它挂载起来到/mnt
# df -h
# touch /mnt/aminglinux.txt 客户端/mnt下touch个文件,再到服务端看,就有
# ls -l /mnt/aminglinux.txt //可以看到文件的属主和属组都为1000
anonuid=1000,anongid=1000
//因为这里uid和gid都定义了1000,所以不管你用哪个用户操作的,最终都会以1000uid和1000gid的用户反应给服务端和客户端。
原文地址:http://blog.51cto.com/13576245/2114639