1、NFs是什麼php
NFS是Network File System的縮寫,即網絡文件系統。客戶端經過掛載的方式將NFS服務器端共享的數據目錄掛載到本地目錄下。
nfs爲何須要RPC?
由於NFS支持的功能不少,不一樣功能會使用不一樣程序來啓動,所以,NFS對應的功能所對應的端口沒法固定。
端口不固定形成客戶端與服務端之間的通訊障礙,因此須要RPC來從中幫忙。
NFS啓動時會隨機取用若干端口,而後主動向RPC服務註冊取用相關端口和功能信息,RPC使用固定端口111來監聽來自NFS客戶端的請求,
並將正確的NFS服務端口信息返回給客戶端,這樣客戶端與服務端就能夠進行數據傳輸了。前端
2、NFS的工做流程bash
1
2
3
4
|
一、由程序在NFS客戶端發起存取文件的請求,客戶端本地的RPC(rpcbind)服務會經過網絡向NFS服務端的RPC的111端口發出文件存取功能的請求。
二、NFS服務端的RPC找到對應已註冊的NFS端口,通知客戶端RPC服務。
三、客戶端獲取正確的端口,並與NFS daemon聯機存取數據。
四、存取數據成功後,返回前端訪問程序,完成一次存取操做。
|
因此不管客戶端,服務端,須要使用NFS,必須安裝RPC服務。服務器
3、NFS服務安裝配置
nfs-utils、rpcbind
查看是否安裝NFS網絡
1
2
|
> rpm -qa nfs-utils rpcbind
> yum install nfs-utils rpcbind
|
4、啓動rpcbind服務async
啓動rpc服務測試
1
|
> systemctl start/stop/status rpcbind.service
|
查看rpc端口,111是主端口,是客戶端通訊的端口ui
1
2
|
> lsof -i :111
> netstat -lntup|grep rpcbind
|
若是出現-bash未找到命令可執行下面命令spa
1
|
> yum install net-tools lsof
|
查看nfs服務向rpc註冊的端口信息code
1
|
> rpcinfo -p localhost
|
5、啓動NFS服務
1
|
> systemctl start/stop/status nfs.service
|
再次查看rpc註冊的端口信息
1
|
> rpcinfo -p localhost
|
6、NFS常見進程詳解
1
|
> ps -ef|egrep
"rpc|nfs"
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
rpc 101101 1 0 17:11 ? 00:00:00 /sbin/rpcbind -w
rpcuser 101188 1 0 17:22 ? 00:00:00 /usr/sbin/rpc.statd --no-notify
root 101190 2 0 17:22 ? 00:00:00 [rpciod]
root 101200 1 0 17:22 ? 00:00:00 /usr/sbin/rpc.idmapd
root 101201 1 0 17:22 ? 00:00:00 /usr/sbin/rpc.mountd
root 101206 2 0 17:22 ? 00:00:00 [nfsd4]
root 101207 2 0 17:22 ? 00:00:00 [nfsd4_callbacks]
root 101213 2 0 17:22 ? 00:00:00 [nfsd]
root 101214 2 0 17:22 ? 00:00:00 [nfsd]
root 101215 2 0 17:22 ? 00:00:00 [nfsd]
root 101216 2 0 17:22 ? 00:00:00 [nfsd]
root 101217 2 0 17:22 ? 00:00:00 [nfsd]
root 101218 2 0 17:22 ? 00:00:00 [nfsd]
root 101219 2 0 17:22 ? 00:00:00 [nfsd]
root 101220 2 0 17:22 ? 00:00:00 [nfsd]
root 101243 100830 0 17:28 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 名字映射後臺進程
7、配置NFS/RPCBIND開機自啓動
1
2
|
> systemctl enable rpcbind.service
> systemctl enable nfs.service
|
8、NFS服務端配置文件
exports文件配置格式:
1
|
NFS共享的目錄 NFS客戶端地址1(參數1,參數2,...) 客戶端地址2(參數1,參數2,...)
|
說明:
NFS共享目錄:
1
|
要用絕對路徑,可被nfsnobody讀寫。
|
NFS客戶端地址:
1
2
3
4
5
|
指定IP: 192.168.0.1
指定子網全部主機: 192.168.0.0/24
指定域名的主機: test.com
指定域名全部主機: *.test.com
全部主機: *
|
參數:
1
2
3
4
5
6
7
8
9
10
|
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:將遠程訪問的全部用戶組都映射爲匿名用戶組帳戶
|
例如:
1
|
/data/tmp 192.168.1.0/24(rw,sync,all_squash)
|
建立須要共享的目錄
1
2
|
>
mkdir
-p /data/tmp
>
chown -R
nfsnobody.nfsnobody /data/tmp
|
從新加載nfs配置
1
|
> exportfs -rv/systemctl reload nfs.service
|
查看nfs服務器掛載狀況
1
|
> showmount -e localhost
|
9、客戶端掛載測試/本地也能夠
安裝rpc
yum -y install nfs-utils rpcbind
systemctl start rpcbind.start
建立目錄
1
2
|
>
mkdir
-p /data/tmp2
> mount -t nfs 192.168.1.233:/data/tmp /data/tmp2
|
查看掛載
1
|
> df -h
|
在tmp下建立文件
1
|
> touch /data/tmp/1.txt
|
查看tmp2下是否有文件
1
|
> ls /data/tmp2
|
卸載掛載
1
|
> umount /data/tmp2
|
注意:
咱們服務器和客戶端都要安裝nfs-utils、rpcbind
mount: wrong fs type, bad option, bad superblock on 125.64.41.244:/data/img, missing codepage or helper program, or other error (for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program) In some cases useful info is found in syslog - try dmesg | tail or so 根據錯誤提示,查看/sbin/mount.<type>文件,果真發現沒有/sbin/mount.nfs的文件,安裝nfs-utils便可
還能夠經過/etc/fstab自動加載,可是會存在問題,由於系統加載是先走/etc/fstab,後走網絡,咱們的nfs是基於網絡的,方法是有的,這裏不一一說了,建議將掛載寫入到/etc/rc.local便可
10. 應用實踐
服務器端
[root@Poppy ~]# yum install rpcbind nfs-utils [root@joker ~]# cat /etc/exports # share /nfsbackup by joker for poppy at today /nfsbackup nfs客戶端ip(rw,sync,all_squash,anonuid=1006,anongid=1006) # 開啓本地帳號映射,就是遠程過來的用戶至關於本地帳號www [root@joker ~]# id www uid=1006(www) gid=1006(www) groups=1006(www) [root@joker ~]# ls -ld /nfsbackup/ drwxr-xr-x 3 www www 4096 Jun 12 18:01 /nfsbackup/ [root@joker ~]# systemctl start nfs.service [root@joker ~]# showmount -e 127.0.0.1 Export list for 127.0.0.1: /nfsbackup nfs客戶端ip
客戶端
[root@Poppy ~]# yum install rpcbind nfs-utils [root@Poppy ~]# systemctl start rpcbind.service [root@Poppy ~]# mount -t nfs nfs服務器ip/nfsbackup /joker/ /joker/的目錄最好是應用的軟件有寫的權限