NFS介紹
NFS應用場景
NFS原理簡介
NFS配置和掛載
本文需要用到的命令和配置文件: mount , umount(-l -f) showmount,exportfs(-rv -o),rpcinfo,ping(-c -t) telent /etc/fstab , /etc/exports , /var/lib/nfs/etab/
NFS 介紹
首先呢,NFS是一種文件系統,只不過屬於網絡文件系統. 文件系統就是對存儲設備上的數據和元數據進行管理組織的一種機制. 網絡文件系統有NFS,MFS,GFS(分佈式常見於雲計算大數據) NFS的主要功能就是通過網絡共享文件和目錄.
2. NFS應用場景
一般應用在企業集羣架構中,用來存儲公共的視頻,圖片附件等靜態資源,一般把網站用戶上傳的文件都放到NFS共享中.
NFS掛載方式:
傳統掛載: mount 源 目標
NFS : mount 192.168.0.12:/video /local
3. NFS 原理
....
4. NFS配置
1. 查看系統版本 cat /etc/redhat-release uname -r uname -m 內核版本是 3.10.0 , centos7.3 ,64位 2.安裝nfs 兩種安裝方法: yum groupinstall "NFS file server" -y rpm -aq nfs-utils portmap rpcbind 3. 啓動服務 服務端需要啓動rpcbind和 NFS服務. 客戶端只需要啓動rpc服務. redhat7.x : systemctl start rpcbind systemctl start nfs-utils.service 開機啓動: systemctl enable rpcbind systemctl enable nfs-utils.service redhat6.x: /etc/init.d/nfs start /etc/init.d/rpcbind start rpcinfo -p localhost chkconfig rpcbind on chkconfig nfs on 4. 配置文件 服務端配置: vim /etc/exports /data 192.168.0.0/24(rw,sync) 創建共享目錄/data mkdir /data ll /data chown -R nfsnobody.nfsnobody /data 5. 重啓服務加載配置文件 exportfs -rv 或 /etc/init.d/nfs reload 這兩條命令等價的,都是平滑重啓 參數 -r 重新導出exports文件 -v 顯示exports問加你內容 6. 本地檢查 [root@promote ~]# showmount -e localhost Export list for localhost: /data 192.168.255.135/32 參數: -e or --exports #Show the NFS server's export list. 顯示NFS服務器導出列表。 客戶端配置: 1.安裝nfs和rpcbind 2.啓動rpcbind服務 3.設置開機啓動 4.檢查服務端nfs是否正常 [root@promote ~]# showmount -e 192.168.255.134 Export list for 192.168.255.134: /data 192.168.255.135/32 5.掛載並測試 mount -t nfs 192.168.255.134:/data /mnt #掛載到本地的/mnt下 cd /mnt touch a.log ll /mnt #注意服務端權限和本地權限 建議把掛載命令寫入/etc/rc.local中實現開機自動掛載. 因爲fstab可能會有問題. 對於網絡文件系統,一般儘量不要放到fstab. 因爲fstab優先網絡,網絡沒有啓動,會掛載不上. 即使是本地文件系統,也要主機,最後兩列要設置爲 0 0 ,否則導致系統起不來.
注意:
爲什麼要把所有開機啓動服務放到rc.local? 規範,便於管理,相當於把/etc/rc.loca當做服務器的檔案,所有服務器啓動配置都放到檔案中,做好註釋.
或者寫好啓動腳本,都用chkconfig管理.
詳解:
1. exports 參數
man exports 可以查看案例和參數
共享目錄(用絕對路徑) , 注意共享目錄的本地權限,如果需要讀寫共享,一定要讓本地目錄被NFS客戶端用戶(nfsnobody)可以寫.
NFS客戶端地址,: 可以只單獨IP或主機名 域名,或者網段,還可以用*來匹配.
權限參數集:對授權的客戶端的權限設置.
async(異步) 發送端把數據發送到緩衝區,就走了,等客戶端自己來取. | 請求或寫入數據時,先返回請求,再將數據寫入內存緩存和硬盤中,即異步寫入數據. 一般不建議啓用,如果允許數據丟失的話,可以打開能夠提升NFS性能. 例子: 電商秒殺案例 |
sync(同步) 發送端等客戶端接受結束才斷開連接. 實時,保證能收到. | 請求或寫入數據時,數據同步寫入NFS server的硬盤後纔會返回 |
rw | 讀寫權限 |
ro | 只讀權限 |
all_squash | 所有用戶身份都被壓縮成匿名用戶,即UID爲65534,默認nfsnobody 配NFS生產技巧: 1. 確保所有服務器對NFS共享目錄都具備相同權限, a) all_squash 把所有客戶端都壓縮成匿名用戶 b) 所有的客戶端和服務端都需要有一個相同的UID和GID的用戶,即nfsnobody(UID必須相同) |
root_squash | 屏蔽遠端root用戶權限,壓縮root用戶爲nfsnobody |
no_root_squash | 不屏蔽遠程root用戶權限 |
同步和異步的優缺點:
異步(async) 寫入到內存中,就表示寫入結束.返回寫成功.
優點: 快,
缺點: 不可靠,容易丟數據
同步(sync) : 寫入到磁盤中,才表示寫成功.
優點:慢
缺點: 可靠, 保證數據寫入.
默認參數 在 /var/lib/nfs/etab 中.
2. nfs客戶端掛載的選項參數優化:
NFS共享存儲優化:
1)硬件: sas/ssd硬盤 ,買多塊 做raid0,raid 10
2)服務器端: /data 192.168.255.0/24(rw,async,all_squash)
參數詳解:
rw 讀寫權限
async 同步
all_squash 所有用戶轉爲匿名用戶
3)客戶端掛載: rsize,wsize,noatiome,nodirtime,nosuid,noexec,soft(hard,intr)
例如:
mount -t nfs -o,noatime,nodiratime,rsize=1371072,wsize=137072 192.168.255.134:/data /mnt
注意1:
性能測試 測試文件系統
dd
time 計算時間
time dd if=/dev/vero of=/mnt/testfile bs=9k count=20000
注意2:
強制卸載
df -h 查看不了
cat /etc/rc.local
umount /mnt
無法使用umount
加上參數 lf參數
umount -lf /mnt #強制卸載
exportfs命令的高級用法:
直接使用exportfs共享文件目錄
man exportfs #做集羣的時候 不適用exports文件而是用命令共享
exportfs -o rw,rsync,all_squash,anonuid=555,anongid=555 10.0.0.0/24:/data
總結
NFS相關知識小結:
mount , umount(-l -f) showmount,exportfs(-rv -o),rpcinfo,ping(-c -t) telent
/etc/fstab , /etc/exports , /var/lib/nfs/etab/ ,
NFS的侷限性: 存在單點故障,如果nfs server宕機了,所有客戶端都不能訪問共享目錄. 可以使用lb 和 ha解決
高併發的場合,NFS效率優先
客戶端認證基於IP和主機名,安全性一般(一般用於內網)
NFS數據是明文的,對數據完整性不作驗證
多臺機器掛載NFS服務器時,連接管理維護麻煩,尤其是有NFS 服務端出問題後,所有客戶端都掛掉狀態( 測試環境可以用autofs自動掛載)
耦合度太高===> 架構師重要職責就是 解耦,網站擴展性才更好.
nfs自動掛載autofs:
當用戶訪問時再掛載,如果沒有用戶訪問,指定時間之內,就自動卸載. 解決NFS服務器和客戶端緊密耦合的問題
缺點是: 用戶請求才掛載,所以開始請求的瞬間效率較差.
autofs用於測試環境中,或者併發很低的生產環境(LDAP家目錄漫遊)中