nfs爲何須要RPC?
由於NFS支持的功能不少,不一樣功能會使用不一樣程序來啓動,所以,NFS對應的功能所對應的端口沒法固定。
端口不固定形成客戶端與服務端之間的通訊障礙,因此須要RPC來從中幫忙。
NFS啓動時會隨機取用若干端口,而後主動向RPC服務註冊取用相關端口和功能信息,RPC使用固定端口111來監聽來自NFS客戶端的請求,
並將正確的NFS服務端口信息返回給客戶端,這樣客戶端與服務端就能夠進行數據傳輸了前端
一、由程序在NFS客戶端發起存取文件的請求,客戶端本地的RPC(rpcbind)服務會經過網絡向NFS服務端的RPC的111端口發出文件存取功能的請求。web
二、NFS服務端的RPC找到對應已註冊的NFS端口,通知客戶端RPC服務。bash
三、客戶端獲取正確的端口,並與NFS daemon聯機存取數據。服務器
四、存取數據成功後,返回前端訪問程序,完成一次存取操做。網絡
因此不管客戶端,服務端,須要使用NFS,必須安裝RPC服務。
NFS的RPC服務,在Centos5下名爲portmap,Centos6下名稱爲rpcbind。app
1、NFS服務安裝配置async
# yum install nfs-utils rpcbind
2、啓動rpcbind服務tcp
# systemctl status rpcbind.service //查看服務狀態 # which rpcbind //若是不知道rpcbind命令在哪 # systemctl restart rpcbind.service //啓動rpc服務 # lsof -i :111 //查看rpc COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 2375 rpc 6u IPv4 19429 0t0 UDP *:sunrpc rpcbind 2375 rpc 8u IPv4 19431 0t0 TCP *:sunrpc (LISTEN) rpcbind 2375 rpc 9u IPv6 19432 0t0 UDP *:sunrpc rpcbind 2375 rpc 11u IPv6 19434 0t0 TCP *:sunrpc (LISTEN) # netstat -lntup|grep rpcbind tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2375/rpcbind tcp6 0 0 :::111 :::* LISTEN 2375/rpcbind udp 0 0 0.0.0.0:854 0.0.0.0:* 2375/rpcbind udp 0 0 0.0.0.0:111 0.0.0.0:* 2375/rpcbind udp6 0 0 :::854 :::* 2375/rpcbind udp6 0 0 :::111 :::* 2375/rpcbind //若是出現-bash未找到命令可執行下面命令 #yum install net-tools lsof //查看nfs服務向rpc註冊的端口信息 #rpcinfo -p localhost //檢查rpcbind是否開機啓動 #chkconfig --list rpcbind //啓動NFS服務 #systemctl start nfs.service //查看狀態 #systemctl status nfs.service //再次查看rpc註冊的端口信息 #rpcinfo -p localhost //NFS常見進程詳解 #ps -ef|egrep "rpc|nfs" rpc 2375 1 0 13:57 ? 00:00:00 /usr/sbin/rpcbind start rpcuser 2475 1 0 14:00 ? 00:00:00 /usr/sbin/rpc.statd root 2476 2 0 14:00 ? 00:00:00 [rpciod] root 2854 1 0 14:30 ? 00:00:00 /usr/sbin/rpc.idmapd root 2855 1 0 14:30 ? 00:00:00 /usr/sbin/rpc.mountd root 2865 2 0 14:30 ? 00:00:00 [nfsd4_callbacks] root 2871 2 0 14:30 ? 00:00:00 [nfsd] root 2872 2 0 14:30 ? 00:00:00 [nfsd] root 2873 2 0 14:30 ? 00:00:00 [nfsd] root 2874 2 0 14:30 ? 00:00:00 [nfsd] root 2875 2 0 14:30 ? 00:00:00 [nfsd] root 2876 2 0 14:30 ? 00:00:00 [nfsd] root 2877 2 0 14:30 ? 00:00:00 [nfsd] root 2878 2 0 14:30 ? 00:00:00 [nfsd] root 2892 1426 0 14:54 pts/0 00:00:00 grep -E --color=auto rpc|nfs //nfsd(rpc.nfsd)主進程,主要是管理客戶端可否登入服務端,登入者ID判別。 //mountd(rpc.mountd)管理NFS文件系統,登入者的權限管理 //rpc.lockd(非必要)用來鎖定文件,用於客戶端同時寫入 //rpc.statd(非必要)檢查文件一致性 //rpc.idmapd 名字映射後臺進程
3、配置NFS開機自啓動ide
# systemctl enable rpcbind //這個要先啓動 # systemctl enable nfs
4、NFS服務器配置
ui
#vi /etc/exports exports文件配置格式: NFS共享的目錄 NFS客戶端地址1(參數1,參數2,...) 客戶端地址2(參數1,參數2,...) //說明: NFS共享目錄: 要用絕對路徑,可被nfsnobody讀寫 //NFS客戶端地址: 指定IP: 192.168.0.1 指定子網全部主機: 192.168.0.0/24 指定域名的主機: test.com 指定域名全部主機: *.test.com 全部主機: * 參數: ro:目錄只讀 rw:目錄讀寫 sync:將數據同步寫入內存緩衝區與磁盤中,效率低,但能夠保證數據的一致性 async:將數據先保存在內存緩衝區中,必要時才寫入磁盤 all_squash:將遠程訪問的全部普通用戶及所屬組都映射爲匿名用戶或用戶組(nfsnobody) no_all_squash:與all_squash取反(默認設置) root_squash:將root用戶及所屬組都映射爲匿名用戶或用戶組(默認設置) no_root_squash:與rootsquash取反 anonuid=xxx:將遠程訪問的全部用戶都映射爲匿名用戶,並指定該用戶爲本地用戶(UID=xxx) anongid=xxx:將遠程訪問的全部用戶組都映射爲匿名用戶組帳戶
|
例如:
# cat /etc/exports /data/iso 172.18.0.0/24(rw,sync,fsid=0) 172.17.1.0/24(rw,sync,fsid=0)
5、建立須要共享的目錄
# mkdir -p /data/iso # chown nfsnobody.nfsnobody /data/iso
6、從新加載nfs配置
# exportfs -rv
7、查看nfs服務器掛載狀況
# showmount -e localhost
客戶端的安裝配置
1、安裝nfs 和 rpcbind
# yum install nfs-utils rpcbind
2、關閉防火牆
#systemctl stop firewalld.service
3、啓動服務並設置自動啓動 rpcbind 和 nfs :
#systemctl start rpcbind.service #systemctl start nfs.service #systemctl enable rpcbind.service #systemctl enable nfs.service
4、查看rpc ,nfs狀態
# systemctl status rpcbind.service # systemctl status nfs.service
5、在全部客戶端掛載服務器172.18.0.109的/data/iso目錄
#showmount -e 172.18.0.109
6、進行掛載:
#mkdir /data1 # mount -t nfs 172.18.0.109:/data/iso /data1
7、設置客戶端開機時自動掛載172.18.0.109:/data/iso到本地的/data1
# vi /etc/fstab 172.18.0.109:/data/iso /data1 nfs nolock 0 0