nfs之腳氣

nfs工做模式參考

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/的目錄最好是應用的軟件有寫的權限
相關文章
相關標籤/搜索