基於滴滴雲搭建 NFS Server
1. NFS 簡介
NFS 即網路檔案系統,使用者可以通過網路將自己伺服器上的目錄共享出來,具有訪問許可權的伺服器就可以將遠端伺服器上的目錄掛載到本地,對本地目錄的讀寫將會對映到遠端伺服器。在本地機器上看,遠端伺服器上的目錄就好像自己的一個磁碟分割槽一樣。
2. NFS Server 安裝
本次安裝環境為:Centos 7.5
2.1 安裝 NFS
NFS 服務主要涉及到兩個軟體:rpcbind 和 nfs-utls。Rpcbind 主要用來提供 RPC 服務,由於 NFS 提供的功能非常多,設計時沒有將其各個功能的埠固定,而是在啟動時,向 rpcbind 註冊自己的服務埠,客戶端進行連線時,首先向 rpcbind 詢問 NFS 服務所在埠,然後再與 NFS 進行通訊。這裡 rpcbind 的埠固定為 111,所以客戶端總能與 rpcbind 取得聯絡。
在 Centos 上,我們使用 yum 來進行安裝:
yum -y install nfs-utils rpcbind
2.2 配置 NFS 共享目錄
安裝完 NFS 後,我們需要配置 NFS 對外共享哪些目錄,以及對哪些客戶端進行共享。比如,我想在 DC2 上將 /data/dorothy
這個目錄共享出去,同時規定只有 172.22.51.28
這臺機器可以訪問,我可以這樣設定:
mkdir -p /data/dorothy #注意一下目錄的訪問許可權
chmod 777 /data
chmod 777 /data/dorothy
vi /etc/exports #沒有這個檔案的話需要自己手動建立
/data/dorothy 111.202.154.66(insecure,rw,no_root_squash,no_all_squash,sync)
上述配置中括號裡的內容表示 172.22.51.28
這臺機器對 /data/dorothy
這個目錄的操作許可權,常見引數有:
引數值 | 內容說明 |
---|---|
rw、ro | 該目錄分享的許可權是可擦寫 (read-write) 或只讀 (read-only),但最終能不能讀寫,還是與檔案系統的 rwx 及身份有關 |
sync、async | sync 代表資料會同步寫入到記憶體與硬碟中,async 則代表資料會先暫存於記憶體當中,而非直接寫入硬碟 |
no_root_squash、root_squash | 客戶端使用 NFS 檔案系統的賬號若為 root 時,系統該如何判斷這個賬號的身份?預設的情況下,客戶端 root 的身份會由 root_squash 的設定壓縮成 nfsnobody, 如此對伺服器的系統會較有保障。但如果你想要開放客戶端使用 root 身份來操作伺服器的檔案系統,那麼這裡就得要開 no_root_squash 才行 |
all_squash | 不論登入 NFS 的使用者身份為何, 他的身份都會被壓縮成為匿名使用者,通常也就是 nobody(nfsnobody) |
insecure | 允許客戶端從大於1024的tcp/ip埠連線伺服器 |
使用 exportfs -r
使配置生效。
配置完成後我們就可以啟動相關服務了:
服務啟動後檢視一下相關埠資訊:
rpcinfo -p
除了 111 和 2049 這兩個埠是固定的,其他埠都是隨機的。我們在滴滴雲上建立 DC2 時,預設只有 22 和 80 埠是開放的,我們還要在滴滴雲上開放 status、mountd 以及 nlockmgr 對應的埠(這一步很重要!!!)。但是每次啟動 NFS 時,這些埠都是隨機的,所以我們需要固定這些埠。在 /etc/sysconf/nfs
中新增如下配置:
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
重啟服務:
service nfs restart
再用 rpcinfo -p 檢視一下埠資訊:
可以看到 mountd 和 status 服務的埠已經生效了。
修改 /ect/modprobe.d/lockd.conf
加入如下配置:
options lockd nlm_tcpport=30002
options lockd nlm_udpport=30002
然後重新載入 NFS 配置和服務:
systemctl restart nfs-config
systemctl restart nfs-idmap
systemctl restart nfs-lock
systemctl restart nfs-server
在滴滴雲上選擇重新伺服器,上述配置就生效了。
可以看到 nlockmgr 服務的埠也變成固定埠了。
下一步我們需要在 DC2 的安全組裡開放 NFS 相關的埠, 這裡主要有 111、2049、30002、30003、30004 。
具體操作為:
在你的 DC2 頁面點選安全組:
點選建立安全組:
填寫安全組名和應用到的 DC2:
點選立即建立,然後在你剛剛建立的安全組裡新增新的安全規則,把 111、2049、30002、30003、30004 這幾個埠的 TCP、UDP 以及接入接出規則都建立一下。這裡展示一下 111 埠的安全規則,其他埠相同:
這樣,NFS 服務端的配置就完成了。
3. 客戶端設定
客戶端需要安裝 nfs-utils 這個軟體:
yum -y install nfs-utils
建立掛在目錄:
mkdir /home/morespace/dorothy/nfs
使用 showmount 命令檢視服務端共享出的目錄資訊:
如果這一步卡住了,報錯:clnt_create rpc port mapper failure - timed out
, 那麼可能是服務端 NFS 相關埠沒有開放,可以嘗試 telnet ip port
看看能不能 telnet 通,如果不能,還需要在安全組裡開放相關埠。
下一步我們就可以掛在遠端目錄了。首先我們在伺服器共享出來的目錄下建立一個 hello.txt
檔案:
掛載遠端目錄:
可以看到本地掛在的目錄與遠端目錄的內容相同,說明掛在成功了。