NFS(Network File System)
NFS在企業中的應用場景
企業集群架構中,NFS網絡文件系統一般用來存儲共享的視頻、圖片、附件等靜態資源,一般把網站用戶上傳的文件都放到NFS共享里,例如圖片、附j件、頭像,然后前端所有的節點訪問這些靜態資源時都會讀取NFS存儲上的資源。NFS是當前互聯網系統架構中最常用的數據存儲服務之一,特別是中小型網站公司應用頻率更高。大公司除了使用NFS外,還可能使用更為復雜的分布式文件系統Moosefs,glusterfs,FastDFS等。
非常low的企業架構:
1模仿在餐廳吃飯

2

RPC工作原理:


從NFS客戶端訪問NFS服務端的整體過程:

NFS配置
一、NFS服務端部署環境准備
- NFS服務器端:10.69.112.78
- NFS客戶端:10.69.112.133
- NFS客戶端:10.69.112.134
二、NFS server端設置(先安裝rpcbind再安裝nfs-utils,啟動過程也是)
- rpm -qa nfs-utils rpcbind
- yum install nfs-utils rpcbind -y
- /etc/init.d/rpcbind start
- netstat -tunlp | grep rpcbind
- chkconfig --list rpcbind
- rpcinfo -p localhost
- /etc/init.d/nfs start
- chkconfig --list nfs
- chkconfig nfs on
rpcbind和nfs-utils都是開機自啟動,如何保證rpcbind先啟動?
對比/less/etc/init.d/rpcbind和/less/etc/init.d/nfs中# chkconfig: 2345 13 87這項,也可以不用chkconfig,啟動命令寫入/etc/rc.local中。
三、NFS服務端配置
- vim /etc/exports
/data 10.69.112.*(rw,sync,all_squash)
- /etc/init.d/nfs restart
- showmount -e 127.0.0.1
- mount -t nfs 10.69.112.78:/data /mnt#掛載測試
- cat /var/lib/nfs/etab #服務器端nfs所有參數信息
四、NFS客戶端配置
- /etc/init.d/rpc start
- mount -t nfs 10.69.112.78:/data /mnt
- 此時能在10.69.112.133上直接訪問10.69.112.78上的/data下的內容,但是不能創建
- 需要在78上chown -R nfsnobody /data
- 此時,在133上的/mnt目錄下就能直接touch文件了
- 掛載命令放到rc.local中,開機掛載,不要放在fstab中,文件系統比網卡先掛載。
NFS配置文件權限參數
- rw:讀寫
- ro:只讀
- sync:寫入硬盤,不會丟數據
- async:寫入內存,異步,可能會丟數據
- all_squash:將遠程訪問的所有普通用戶及所屬組都映射為匿名用戶或用戶組(nfsnobody);
- no_all_squash:與all_squash取反(默認設置);
- root_squash:將root用戶及所屬組都映射為匿名用戶或用戶組(默認設置);
- no_root_squash:與rootsquash取反;
- anonuid=xxx:將遠程訪問的所有用戶都映射為匿名用戶,並指定該用戶為本地用戶(UID=xxx);
- anongid=xxx:將遠程訪問的所有用戶組都映射為匿名用戶組賬戶,並指定該匿名用戶組賬戶為本地用戶組賬戶(GID=xxx);
使得NFS Client端可寫的服務端配置條件
當多個NFS客戶端以NFS方式寫入修改服務器端的文件系統時,需要具有以下權限:
a)NFS服務器/etc/exports設置需要開放可寫入的權限,即服務端的共享權限
b)NFS服務器實際要分享的NFS目錄權限具有可寫入w的權限,即服務端本地目錄的安全權限
c)每台機器都對應存在和nfs默認配置UID的相同UID65534的nfsnobody用戶
NFS服務重要文件說明
/etc/exports NFS服務主配置文件
/usr/sbin/exportfs NFS服務管理命令 exportfs -rv 加載配置生效,等價重啟/etc/init.d/nfs restart
showmount 在服務端和客戶端查看掛載情況
/var/lib/nfs/etab NFS配置文件的完整參數設定的文件
企業生產環境nfs性能優化掛載
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 10.69.112.78:/data /mnt
NFS服務內核優化
1)/proc/sys/net/core/rmem_default
改文件指定接收套接字緩沖區大小的缺省值,缺省設置:124928
2)/proc/sys/net/core/rmem_max
該文件指定了接收套接字緩沖區大小的最大值,缺省設置124928
3)/proc/sys/net/core/wmem_default
改文件指定了發送套接字緩沖區大小的缺省值,缺省設置:124928
4)/proc/sys/net/core/wmem_max
改文件指定了發送套接字緩沖區大小的最大值,缺省設置:124928
cat >>/etc/sysctl.conf <<EOF
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF
sysctl -p
生產場景NFS共享存儲優化小結
1、硬盤:ssa/ssd硬盤,raid0/raid10,網卡吞吐量大,千兆
2、NFS服務器端配置:/data
10.69.112.78/24(rw,sync,all_squash)
3、NFS客戶端掛載
4、內核參數
5、關閉服務器時一定要記得關閉nfs,否則卸載時提示:umount:/mnt:device is busy
需要退出掛載目錄再進行卸載,或者是NFS Server宕機了,需要強制卸載: umount -lf /mnt
練習:三台服務器(server:10.69.112.78 agent:10.69.112.133 10.69.112.134)
(1)在NFS服務器A上共享/data/w_shared及/data/r_shared兩個文件目錄,允許從NFS客戶端B,C上分別掛載共享目錄后可實現從B,C上只讀/data/r_shared,可寫/data/w_shared。
(2)NFS客戶端B上得掛載點為/data/b_w(寫),/data/b_r(讀)
(3)從NFS客戶端B上的NFS可寫掛載點目錄創建任意文件,從C上可以刪除這個創建的文件
服務端
- yum install nfs-utils rpcbind -y
- /etc/init.d/rpcbind start
- /etc/init.d/ntp start
- mkdir -p /data/w_shared /data/r_shared
- chown -R nfsnobody:nfsnobody /data/(若不修改,客戶端不能創建刪除文件)
- vim /etc/exports

客戶端
- yum install nfs-utils rpcbind
- /etc/init.d/rpcbind start
- /etc/init.d/ntp start
- mount -t nfs 10.69.112.78:/data/r_shared /data/b_r
- mount -t nfs 10.69.112.78:/data/w_shared /data/b_w
使用linux rescue(救援模式)修復/etc/fstab(改錯配置,然后重啟系統)
root密碼忘記,重新獲取root密碼
/export 172.28.149.99(rw,sync,all_squash,anonuid=600,anongid=600)
