由於實驗室的項目需要實現在CephFS之上建立NFS之上,所以記錄一下NFS伺服器的安裝與配置流程。 1.NFS服務的簡介: NFS 是 N etwork F ile S ystem 的縮寫,是Sun公司於1984開發的一種分散式文件系統協議。它的核心功能就是可以通過網路,讓不同的客戶端,可以彼此訪 ...
由於實驗室的項目需要實現在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
sudo apt-get install rpcbind
NFS 服務都是通過 RPC 來具體實現的,所以要正常使用NFS服務,需要啟動 rpcbind來實現埠的映射工作 。執行如下命令,安裝並啟動rpcbindnfs-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的配置,如下圖所示:
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系列的發行版也是大同小異。若有疏漏,望指點斧正。