1. 程式人生 > >基於滴滴雲搭建 NFS Server

基於滴滴雲搭建 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 使配置生效。

配置完成後我們就可以啟動相關服務了:

image-20181210173159571

服務啟動後檢視一下相關埠資訊:

rpcinfo -p 

image-20181210173420087

除了 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 檢視一下埠資訊:

image-20181210174821561

可以看到 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

滴滴雲上選擇重新伺服器,上述配置就生效了。

image-20181210175127170

image-20181210175218778

可以看到 nlockmgr 服務的埠也變成固定埠了。

下一步我們需要在 DC2 的安全組裡開放 NFS 相關的埠, 這裡主要有 111、2049、30002、30003、30004 。

具體操作為:

在你的 DC2 頁面點選安全組:

image-20181210175554359

點選建立安全組:

image-20181210175649347

填寫安全組名和應用到的 DC2:

image-20181210175812639

點選立即建立,然後在你剛剛建立的安全組裡新增新的安全規則,把 111、2049、30002、30003、30004 這幾個埠的 TCP、UDP 以及接入接出規則都建立一下。這裡展示一下 111 埠的安全規則,其他埠相同:

image-20181210180346697

這樣,NFS 服務端的配置就完成了。

3. 客戶端設定

客戶端需要安裝 nfs-utils 這個軟體:

yum -y install nfs-utils

建立掛在目錄:

mkdir /home/morespace/dorothy/nfs

使用 showmount 命令檢視服務端共享出的目錄資訊:

image-20181210181103951

如果這一步卡住了,報錯:clnt_create rpc port mapper failure - timed out , 那麼可能是服務端 NFS 相關埠沒有開放,可以嘗試 telnet ip port 看看能不能 telnet 通,如果不能,還需要在安全組裡開放相關埠。

下一步我們就可以掛在遠端目錄了。首先我們在伺服器共享出來的目錄下建立一個 hello.txt 檔案:

image-20181210181603072

掛載遠端目錄:

image-20181210182111463

可以看到本地掛在的目錄與遠端目錄的內容相同,說明掛在成功了。