由于實驗室的項目需要實作在CephFS之上建立NFS之上,是以記錄一下NFS伺服器的安裝與配置流程。
1.NFS服務的簡介:
NFS 是 Network File System 的縮寫,是Sun公司于1984開發的一種分布式檔案系統協定。它的核心功能就是可以通過網絡,讓不同的用戶端,可以彼此通路共同的檔案系統 ,來實作檔案的共享。像許多其他的協定,建立在開放的網絡計算的遠端過程調用(RPC)之上。NFS是在RFC中定義的開放标準,允許任何人實作該協定。
NFS 伺服器可以讓用戶端将網絡遠端的 NFS 伺服器分享的目錄,直接挂載到本地端的機器當中。本地端的機器通過直接讀寫挂載的目錄,就可以同步到NFS伺服器之上。
版本更疊
-
NFS V2
2是NFS最早實作的版本之一,基于UDP協定實作了一個無狀态的伺服器版本。僅僅支援32位的系統,且不大于2GB的檔案。
-
NFS V3
3的版本在2的基礎之上做了大量的改進。支援了大于2GB的檔案讀寫,使用了TCP協定來進行資料互動,支援了用戶端的異步讀寫來提高檔案系統的性能(同時也會産生我們頭疼的一緻性問題)
-
NFS V4
4的版本提高了安全性,通過TCP協定實作了一個有狀态的伺服器版本,通過鎖租約的機制來實作多用戶端的讀寫同步。在4.1版本引入了pNFS,通過類似于一個HDFS架構來提供并行的一個分布式檔案系統。
2.系統環境:
系統平台:Ubuntu 14.04
NFS Server IP:192.168.1.2
iptables關閉: Firewall is disable.(NFS端口使用在預設情況下是不固定,是以若配置NFS伺服器需要搭配防火牆使用的話,請配置固定端口)
SELINUX=disabled
3.NFS伺服器的安裝:
NFS的安裝隻需要安裝rpcbind與nfs-server就可以對外提供服務了。
-
rpcbind
NFS 服務都是通過 RPC 來具體實作的,是以要正常使用NFS服務,需要啟動 rpcbind來實作端口的映射工作 。執行如下指令,安裝并啟動rpcbind
sudo apt-get install rpcbind
-
nfs-kernel-server
提供nfs伺服器的軟體,提供檔案系統的完整功能。這裡要提醒一下,NFS伺服器會直接使用到核心的子產品,是以核心必須要支援 NFS 才行。如果作業系統的版本是自行編譯的核心的話,需要注意編譯NFS的核心支援。
sudo apt-get install nfs-kernel-server
4.NFS伺服器的配置:
NFS伺服器的主要配置檔案就是:/etc/exports。不過這個配置檔案不一定會存在,可能需要使用 vim 主動建立這個檔案。
/etc/exports檔案由以下選項構成:
[共享的目錄] [主機名或IP(參數,參數)]
每一行最前面是要分享出來的目錄,目錄可以依照不同的權限分享給不同的主機。若權限參數不止一個時,則以逗号 (,) 分開。且主機名與小括号是連在一起的喔!其中參數是可選的,當不指定參數時,nfs将使用預設選項。預設的共享選項是 sync,ro,root_squash,no_delay 當主機名或IP位址為空時,則代表共享給任意客戶機提供服務。
下面是一些NFS共享的常用參數:
- 通路權限選項
設定輸出目錄隻讀:ro 設定輸出目錄讀寫:rw
- 使用者映射選項
all_squash:将遠端通路的所有普通使用者及所屬組都映射為匿名使用者或使用者組(nfsnobody); no_all_squash:與all_squash取反(預設設定); root_squash:将root使用者及所屬組都映射為匿名使用者或使用者組(預設設定); no_root_squash:與rootsquash取反; anonuid=xxx:将遠端通路的所有使用者都映射為匿名使用者,并指定該使用者為本地使用者(UID=xxx); anongid=xxx:将遠端通路的所有使用者組都映射為匿名使用者組賬戶,并指定該匿名使用者組賬戶為本地使用者組賬戶(GID=xxx);
- 其它選項
secure:限制用戶端隻能從小于1024的tcp/ip端口連接配接nfs伺服器(預設設定); insecure:允許用戶端從大于1024的tcp/ip端口連接配接伺服器; sync:将資料同步寫入記憶體緩沖區與磁盤中,效率低,但可以保證資料的一緻性; async:将資料先儲存在記憶體緩沖區中,必要時才寫入磁盤; wdelay:檢查是否有相關的寫操作,如果有則将這些寫操作一起執行,這樣可以提高效率(預設設定); no_wdelay:若有寫操作則立即執行,應與sync配合使用; subtree:若輸出目錄是一個子目錄,則nfs伺服器将檢查其父目錄的權限(預設設定); no_subtree:即使輸出目錄是一個子目錄,nfs伺服器也不檢查其父目錄的權限,這樣可以提高效率;
這裡我們使用了NFS v3的配置,如下圖所示:
Screenshot from 2017-10-22 02:38:17.png
5.NFS伺服器的啟動:
配置完/etc/exports之後,接下來就可以啟動NFS伺服器了。
為了使NFS伺服器能正常工作,需要啟動rpcbind和nfs-kernel-server兩個服務,并且rpcbind一定要先于nfs-kernel-server啟動。
sudo service rpcbind start
sudo service nfs-kernel-server start
若要開機自啟動nfs服務,可以通過sysv-rc-conf配置自啟動服務。
sudo sysv-rc-conf --level 35 rpcbind on
sudo sysv-rc-conf --level 35 nfs-kernel-server on
6.NFS用戶端的挂載:
用戶端的挂載很簡單,先建立一個挂載目錄
sudo mkdir /mnt/nfs
sudo mount -t nfs 192.168.12:/tmp /mnt/nfs
之後用戶端對應的檔案目錄便挂載上對應的檔案系統了。
7、啟動自動挂載NFS檔案系統:
用戶端可以通過指令配置開機自啟動挂載NFS的檔案系統。
格式:
<server>:</remote/export> </local/directory> nfs < options> 0 0
将對應的指令 mount -t nfs 192.168.12:/tmp /mnt/nfs
添加至/etc/rc.d/local,不要嘗試在直接在/etc/fstab/裡挂載
-
原因分析:
在Linux核心啟動的流程中,網絡的啟動是在本機檔案系統挂載之後,是以直接利用 /etc/fstab 嘗試挂載 NFS 時,系統由于尚未啟動網絡,是無法挂載成功的。
小結:梳理了一下在ubuntu之下NFS伺服器的安裝與配置。當然RedHat系列的發行版也是大同小異。若有疏漏,望指點斧正。