網絡文件系統,實現數據共享統一一致 node
1. 什麼是rpc服務web
rpc服務相似於中介,nfs服務將啓動的進程和端口信息,向rpc服務進行註冊vim
nfs客戶端向rpc服務發出請求,進行共享目錄掛載,從而實現經過網絡存儲數據信息centos
2. 服務端作了三件事:緩存
①. 首先啓動rpc服務安全
②. 其次啓動nfs服務服務器
③. nfs服務向rpc服務進行註冊,只註冊一次(若是nfs服務進行了重啓,會再次註冊)網絡
3. 客戶端作了三件事:架構
①. 啓動rpc服務(能夠不用啓動)併發
②. 利用tcp協議,與nfs服務端rpc服務(111端口)創建網絡鏈接
③. 利用mount命令進行網絡存儲設備掛載
1. 服務端部署流程:
01. 檢查服務軟件是否正確安裝,進行軟件安裝
02. 編寫nfs配置文件
03. 建立共享存儲目錄,並進行受權
04. 啓動nfs相關服務(先啓動rpcbind服務 再啓動nfs服務)
05. 檢查服務啓動狀況
rpcinfo -p 172.16.1.31 ---檢查nfs服務是否向rpc服務進行註冊
showmount -e 172.16.1.31 ---檢查nfs服務端是否有可使用的共享目錄
2. 客戶端部署流程:
01. 檢查服務軟件是否正確安裝,進行軟件安裝
02. 檢查服務啓動狀況
rpcinfo -p 172.16.1.31 ---檢查nfs服務是否向rpc服務進行註冊
showmount -e 172.16.1.31 ---檢查nfs服務端是否有可使用的共享目錄
03. 進行網絡掛載
mount -t nfs 172.16.1.31:/data /mnt
1. 配置共享目錄信息
2. 設置容許網絡共享目錄的主機或網絡信息
3. 設置共享目錄權限和相關參數
rw ---共享目錄權限爲讀寫
ro ---共享目錄權限爲只讀
sync ---將數據同步存儲到硬盤中(通過內存以後存儲到硬盤)
async ---將數據異步存儲到內存中
root_squash ---root進行壓縮映射
no_root_squash ---root用戶不進行壓縮映射
all_squash ---所有用戶進行壓縮映射
no_all_squash ---所有用戶不進行壓縮映射
anonuid ---修改默認映射用戶信息,將默認nfsnobody映射用戶變爲指定用戶
說明:實現用戶靈活壓縮映射的進程rpc.idmapped
爲何默認映射用戶是nfsnobody?
[root@nfs01 ~]# cat /etc/exports /data 172.16.1.0/24(rw,sync,all_squash) [root@nfs01 ~]# id nfsnobody uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody) [root@nfs01 ~]# cat /var/lib/nfs/etab ---etab文件爲nfs默認配置記錄文件 /data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,all_squash) |
說明:在默認配置記錄文件中,已經默認指明,默認映射用戶爲nfsnobody
知識點總結:
man exports查閱更多exports參數說明
配置好NFS服務後,經過cat /var/lib/nfs/etab命令能夠看到NFS配置的參數以及默認自帶的參數
服務端上面要求:
nfs服務器172.16.1.31,共享下面兩個目錄:
/data/w 要求的權限可讀寫,同步數據,全部用戶都壓縮爲匿名用戶
/data/r 要求的權限爲只讀,同步數據,全部用戶都壓縮爲匿名用戶
客戶端上面要求:
backup服務器 把NFS服務器的/data/r 掛載到/data/r
web01服務器 把NFS服務器的/data/w 掛載到/data/w
第一個里程:編寫nfs配置文件
vim /etc/exports
/data/w 172.16.1.0/24(rw,sync,all_squash)
/data/r 172.16.1.0/24(ro,sync,all_squash)
第二個里程:建立配置文件中指定的共享目錄,並進行受權
mkdir /data/{w,r} -p
chown -R nfsnobody.nfsnobody /data/{w,r}
第三個里程:重啓nfs服務(平滑重啓)
/etc/init.d/nfs reload
第四個里程:檢查是否生成新的共享目錄信息
showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/r 172.16.1.0/24
/data/w 172.16.1.0/24
第一個里程:確認是否安裝好了nfs服務相關軟件
yum install -y nfs-utlis rpcbind
rpm -qa|grep -E "nfs-utils|rpcbind"
第二個里程:進行網絡掛載
web01:
mkdir /data/w -p
mount -t nfs 172.16.1.31:/data/w /data/w
backup:
mkdir /data/r -p
mount -t nfs 172.16.1.31:/data/r /data/r
第三個里程:檢查測試
web01:對共享目錄有讀寫權限
backup:對共享目錄只有只讀權限
[root@backup r]# touch test.txt touch: cannot touch `test.txt': Read-only file system |
說明強調:在nfs服務端配置共享目錄時,會遵循目錄的繼承條件
當上一級共享目錄爲讀寫時,下一級共享目錄就算爲只讀模式,也會繼承上一級目錄的權限
ls: cannot open directory .: Stale file handle
提示文件句柄錯誤:
客戶端原有掛載的共享目錄,在服務端已經取消共享了,但客戶端並無進行卸載
在nfs客戶端,將不存在共享目錄進行卸載
若是經過df -h命令沒法查詢到不存在的共享目錄的掛載點信息,能夠經過一個特殊文件獲取
nfs客戶端查看文件:cat /proc/mounts ---nfs客戶端掛載默認配置記錄文件
nfs服務端查看文件:cat /var/lib/nfs/etab ---nfs服務端默認配置記錄文件
客戶端掛載報錯「No such file or directory」
[root@backup ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24 [root@backup ~]# mount -t nfs 172.16.1.31:/data/ /mnt/ mount.nfs: mounting 172.16.1.31:/data/ failed, reason given by server: No such file or directory |
NFS服務端沒有共享目錄/data。
在NFS服務端,建立便可。
[root@nfs-client1 ~]# showmount -e 10.0.0.7
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
nfs服務端防火牆開啓了,阻止了鏈接rpc 111端口的請求
將nfs服務端防火牆服務關閉,或者配置容許用戶主機訪問111端口策略
[root@nfs-client1 ~]# showmount -e 10.0.0.7
clnt_create: RPC: Program not registered
01. nfs服務先啓動了,rpcbind服務後啓動了
02. nfs服務中止了
說明:rpc服務中沒有nfs服務註冊的信息了
從新先啓動rpcbind服務,在啓動nfs服務
卸載掛載設備時顯示device is busy
[root@nfs-client mnt]# umount /mnt umount.nfs: /mnt: device is busy umount.nfs: /mnt: device is busy |
01. 可能nfs客戶端掛載和nfs服務端共享目錄有網絡數據傳輸
02. 你所處的目錄路徑,就是在掛載點之中
umount -lf /data/r
-l Lazy unmount --- 懶惰卸載
-f Force unmount --- 表示強制卸載
共享目錄掛載很卡
當nfs服務端服務進行重啓的時候(不是平滑重啓),nfs服務會進入一個90s無敵時間
nfs服務重啓就比如發出一個大招, 要有90秒冷卻時間
在系統配置中/etc/sysconfig/nfs中指定了無敵時間的配置參數
NFSD_V4_GRACE=90
NFSD_V4_LEASE=90
NLM_GRACE_PERI0D=90
rpcinfo -p 172.16.1.31
showmount -e 172.16.1.31
本地掛載測試:mount -t nfs 172.16.1.31:/data /mnt (掛載成功,進入mnt目錄建立文件 刪除文件測試一下)
rpcinfo -p 172.16.1.31
showmount -e 172.16.1.31
網絡掛載測試:mount -t nfs 172.16.1.31:/data /mnt (掛載成功,進入mnt目錄建立文件 刪除文件測試一下)
當多個NFS客戶端訪問服務器端的讀寫文件時,須要具備如下幾個權限:
① NFS服務器/etc/exports設置須要開放可寫入的權限,即服務器端的共享權限。
② NFS服務器實際要共享的NFS目錄權限具備可寫入w的權限,即服務器端本地目錄的安全權限。
③ 每臺機器對應存在和NFS默認配置UID的相同UID 65534的nfsnobody用戶(確保全部客戶端的訪問權限統一,不然每一個機器須要同時創建相同UID的用戶,並覆蓋NFS的默認用戶配置)
1)與服務端配置文件中權限參數設置有關
2)本地共享目錄自己權限有關
3)與客戶端掛載參數有關
/usr/sbin/exportfs ---能夠管理nfs服務運行狀態 能夠配置共享目錄
/usr/sbin/exportfs -r ---nfs服務平滑重啓命令
/usr/sbin/exportfs -v #顯示共享詳細信息
注:通常組合用/usr/sbin/expostfs -rv
[root@nfs01 ~]# /usr/sbin/exportfs -rv exporting 172.16.1.0/24:/data/r exporting 172.16.1.0/24:/data/w |
man exportfs
NAME
exportfs - maintain table of exported NFS file systems
用於管理當前的NFS共享的文件系統列表,exportfs -rv=/etc/init.d/nfs reload 加載配置生效;啓動了NFS服務以後,若是修改了/etc/exports,就須要從新啓動nfs,使修改的配置文件生效,就能夠用exportfs命令完成。
[root@nfs01 ~]# exportfs -o rw,sync 172.16.1.0/24:/data < - 利用exportfs命令指定要共享的目 錄,並指定共享給那些客戶端地址 [root@nfs01 ~]# showmount -e 172.16.1.31 exportfs命令建立共享目錄,是臨時生效 Export list for 172.16.1.31: /data 172.16.1.0/24 /data/r 172.16.1.0/24 /data/w 172.16.1.0/24 |
echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
vim /etc/fstab 掛載什麼 掛載到哪 類型 掛載參數 是否備份 是否檢查磁盤 172.16.1.31:/data /mnt nfs defaults 0(dump) 0(fsck) |
須要netfs服務的配合:chkconfig netfs on
說明:netfs服務做用:在網絡服務啓動以後,讓系統從新讀取加載/etc/fstab文件(由於默認狀況 /etc/fstab會先啓動,network服務會後啓動,致使網絡自動掛載不上,因此須要讓netfs服務在network服務後啓動一下)
查看命令的啓動順序:
[root@backup ~]# head /etc/init.d/netfs # chkconfig: 345 25 75 # description: Mounts and unmounts all Network File System (NFS), \ [root@backup ~]# head /etc/init.d/network # network Bring up/down networking # chkconfig: 2345 10 90 [root@backup ~]# ll /etc/rc.d/rc3.d/|grep local ---網絡服務啓動後加載rc.local文件 lrwxrwxrwx. 1 root root 11 Dec 8 12:38 S99local -> ../rc.local 注:S99表示最後加載這個配置文件 |
01. 共享目錄權限和配置文件中權限參數設置有關
02. 共享目錄權限和目錄自己權限有關
03. 共享目錄權限和客戶端掛載參數有關
cat /proc/mounts
mount -t nfs -o fg 172.16.1.31:/data /mnt --- 前臺掛載(默認)
mount -t nfs -o bg 172.16.1.31:/data /mnt --- 後臺掛載
soft 軟掛載 :一直嘗試掛載,超時後退出(timeout後有可能丟失數據,不推薦使用)
hard 硬掛載:一直嘗試掛載,不中止(通常配合intr參數使用),默認爲head
hard+intr =soft軟掛載
rsize ---設定數據讀取到內存中,內存中預留空間大小
wsize ---設定數據存儲到內存中,內存中預留空間大小
設置大一點,提高NFS傳輸的能力(設置的值爲2的倍數,centos6默認爲130721)
相似於緩存區,會影響客戶端和服務端緩存數據的存儲量,最大傳輸速率越快,根據網絡傳輸帶寬決定大小,不要超過帶寬
讓普通用戶執行命令時至關於root用戶,通常用於腳本(默認值)
如目錄和目錄下的文件都是suid,root和普通用戶均可以訪問,其餘的狀況普通用戶都不能訪問。
至關於x權限,若是是noexec,用戶則沒有執行權限
是否容許普通用戶掛載或卸載文件系統(默認不容許,root才行)
執行mount -a 時,是否自動掛載(默認爲auto)
每次訪問數據時,會同步更新訪問文件的Inode時間戳。
高併發環境使用noatime,nodiratime,提高系統I/O性能
從新掛載,針對於已經掛載的設備或目錄
例:mount -t nfs -o remount,ro 172.16.1.31:/data /mnt
Centos6優化參數:
mount -t nfs -o noatime,nodiratime,nosuid,noexec,nodevp,rsize=131072,wsize=131072 172.16.1.31:/data /mnt
通過實際測試,默認參數性能也不錯:mount -t nfs 172.16.1.31:/data /mnt
1. 簡單,易操做
2. NFS內的數據是在文件系統之上的,能夠看得見的。
3. 部署方便,可控制,配置文件一條命令便可搞定,
4. 可靠性高
5. 服務很是穩定
1. 存在單點故障(NFS服務器宕機了,其餘用戶都不能訪問了)
2. 不適用於高併發(2千萬以上訪問量)
3. 沒有認證(基於IP和主機名),安全性低
4. NFS數據是明文的(通常內網通訊)
5. 其餘與架構有關,好比客戶端與服務端的耦合性(實時同步可解耦)
應用建議:
對於大中小網站(參考點2000萬/日 PV如下)線上應用,都有用武之地,門戶網站也會有應用,生產場景應用多將數據的訪問往前推,即儘可能將靜態存儲裏的資源經過CDN或緩存服務器提供服務,若是沒有緩存服務或架構很差,存儲服務器數量再多也是扛不住壓力的,並且用戶體驗會不好。