通過 NFS 實現服務器目錄共享

項目需求

在一些項目開發中,往往有這種需求,就是項目的一些靜態資源都是直接存放在項目服務外的目錄中。比如 APP 程序包的上傳和下載,一般後臺服務上傳包,服務直接把包上傳到當前系統資源目錄,但多個上傳服務上傳的包都在各自的應用服務器上,由於下載併發量比較大,下載服務常常做了負載均衡,所以當前機器的下載服務並不一定能找到上傳的包,因爲有些包是在其它機器上。

鑑於這種需求,有兩種解決方式。一種是上傳下載就用一個服務,目錄也只有一個,上傳時上傳到該目錄,下載時從該目錄取,這種方式對併發大的情況顯然不能支撐;另外一種方式,就是每個服務都對應自己單獨的資源目錄,然後做目錄共享,使得不管哪個服務下載資源,都能夠訪問到,這就是這篇所要說的 NFS 目錄共享安裝和配置。

服務原理

NFS(Network File System,網絡文件系統)是當前主流異構平臺共享文件系統之一。主要應用在 UNIX 環境下。最早是由 Sun Microsystems 開發,現在能夠支持在不同類型的系統之間通過網絡進行文件共享,廣泛應用在 FreeBSD、SCO、Solaris 等異構操作系統平臺,允許一個系統在網絡上與他人共享目錄和文件。通過使用NFS,用戶和程序可以像訪問本地文件一樣訪問遠端系統上的文件,使得每個計算機的節點能夠像使用本地資源一樣方便地使用網上資源。換言之,NFS 可用於不同類型計算機、操作系統、網絡架構和傳輸協議運行環境中的網絡文件遠程訪問和共享。

NFS 的工作原理是使用客戶端/服務器架構,由一個客戶端程序和服務器程序組成。服務器程序向其他計算機提供對文件系統的訪問,其過程稱爲輸出。NFS 客戶端程序對共享文件系統進行訪問時,把它們從 NFS 服務器中“輸送”出來。文件通常以塊爲單位進行傳輸。其大小是 8KB(雖然它可能會將操作分成更小尺寸的分片)。NFS 傳輸協議用於服務器和客戶機之間文件訪問和共享的通信,從而使客戶機遠程地訪問保存在存儲設備上的數據。

資源準備

準備兩臺機器,分別爲 web69(192.168.220.69)、web68(192.168.220.68),計劃用 web69 作爲 nfs 服務端,web68 作爲 nfs 服務客戶端,機器可以任意擴展。

安裝配置

一、查看系統是否已經安裝 NFS 服務

命令:rpm -qa |grep nfs

如果沒有輸出信息,則說明未安裝該服務。

二、查看系統是否已經安裝 rpcbind 服務

命令:rpm -qa |grep rpcbind

注:rpcbind 是一個 RPC 服務,主要是在 nfs 共享時候負責通知客戶端、服務器的 nfs 端口號的,簡單理解 rpc 就是一箇中介服務。

三、安裝 NFS 和 rpcbind

如果在前兩步發現這兩個服務都沒有安裝,則安裝這倆服務,如果安裝了,則這步不需要做了。

命令:yum -y install nfs-utils rpcbind

已加載插件:fastestmirror
設置安裝進程
Loading mirror speeds from cached hostfile
... ...
已安裝:
  nfs-utils.x86_64 1:1.2.3-70.el6_8.2                           rpcbind.x86_64 0:0.2.0-12.el6                          

作爲依賴被安裝:
  keyutils.x86_64 0:1.4-5.el6         libevent.x86_64 0:1.4.13-4.el6         libgssglue.x86_64 0:0.1-11.el6           
  libtirpc.x86_64 0:0.2.1-11.el6_8    nfs-utils-lib.x86_64 0:1.1.5-11.el6    python-argparse.noarch 0:1.2.1-2.1.el6   

完畢!

四、NFS 服務端配置

1. 在 NFS 服務端上創建共享目錄 /home/workspace

命令:mkdir -p /home/workspace

2. 並設置目錄訪問權限

命令:chmod 777 /home/workspace

3. 編輯 export 文件,內容如下:

命令:vi /etc/exports

/home/workspace 192.168.220.0/24(rw,no_root_squash,no_all_squash,sync)

常見的參數則有:

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 才行!
no_all_squash/all_squash:不論登入 NFS 的使用者身份爲何,他的身份都會被壓縮成爲匿名用戶,通常也就是 nobody(nfsnobody) 。
anonuid/anongid:anon 意指 anonymous (匿名者) 前面關於 *_squash 提到的匿名用戶的 UID 設定值,通常爲 nobody(nfsnobody),但是你可以自行設定這個 UID 的值!當然,這個 UID 必需要存在於你的 /etc/passwd 當中! anonuid 指的是 UID 而 anongid 則是羣組的 GID。

4. 使得配置生效

命令:exportfs -r

五、啓動服務端 rpcbind 和 nfs 服務

1. 查看服務是否啓動

命令:

service rpcbind status

service nfs status

2. 啓動服務

命令:

service rpcbind start

service nfs start

3. 配置開機啓動服務

chkconfig rpcbind on

chkconfig nfs on

chkconfig --list rpcbind

chkconfig --list nfs

4. 查看 RPC 服務的註冊狀況

命令:rpcinfo -p localhost

選項與參數:
-p :針對某 IP (未寫則預設爲本機) 顯示出所有的 port 與 porgram 的信息;
-t :針對某主機的某支程序檢查其 TCP 封包所在的軟件版本;
-u :針對某主機的某支程序檢查其 UDP 封包所在的軟件版本;

5. 測試聯機

在 NFS 服務器設定妥當之後,我們可以在 server 端先自我測試一下是否可以聯機,就是利用 showmount 這個指令來查閱。

命令:showmount -e localhost

選項與參數:
-a :顯示目前主機與客戶端的 NFS 聯機分享的狀態;
-e :顯示某部主機的 /etc/exports 所分享的目錄數據;

六、NFS 客戶端安裝

客戶端只需要安裝 nfs 服務即可,不需要安裝 rpcbind 服務了。

安裝詳細步驟參考第三步。

七、NFS 客戶端配置

1. 創建掛載目錄

在客戶端機器上創建掛在目錄,這裏與服務端保持一致(可以按照需求,不一致也沒問題)

命令:mkdir -p /home/workspace

2. 並設置目錄訪問權限

命令:chmod 777 /home/workspace

3. 查看服務器拋出的共享目錄信息

命令:showmount -e 192.168.220.69

4. 掛載目錄

爲了提高 NFS 的穩定性,使用 TCP 協議掛載,NFS默認用 UD P協議。

命令:mount -t nfs 192.168.220.69:/home/workspace /home/workspace -o proto=tcp -o nolock

八、測試目錄共享

1. 在客戶端機上,查看磁盤信息。

命令:df -h

2. 在服務端機上,創建一個文件,編輯一些內容。

[root@web69 workspace]# touch abc.txt
[root@web69 workspace]# ll
total 4
-rw-r--r--. 1 root root    0 Jan 17 16:21 abc.txt
drwxr-xr-x. 4 root root 4096 Apr 26  2019 RSF
[root@web69 workspace]# vi abc.txt 
[root@web69 workspace]# cat abc.txt 
test nfs...
[root@web69 workspace]#

3. 查看客戶端機上是否能共享,查看內容是否正確。

[root@web68 workspace]# ll
total 4
-rw-r--r--. 1 root root    0 Jan 17 16:21 abc.txt
drwxr-xr-x. 4 root root 4096 Apr 26  2019 RSF
[root@web68 workspace]# cat abc.txt 
test nfs...
[root@web68 workspace]#

4. 在客戶端機上追加一部分內容到文件。

[root@web68 workspace]# echo 'ok.' >> abc.txt 
[root@web68 workspace]# cat abc.txt 
test nfs...
ok.
[root@web68 workspace]# 

5. 查看服務端機上的文件內容是否正確。

[root@web69 workspace]# cat abc.txt 
test nfs...
ok.
[root@web69 workspace]# 

到此,nfs 目錄共享的安裝、配置和測試就完成了。

九、其它配置

1. 設置掛載永久生效

上面測試步驟中的掛載命令,是臨時生效的。也就是說當機器重啓後,在客戶端機上,看不到掛載的目錄,那麼如何設置永久掛載呢?有兩種方式:

1)修改 /etc/fstab 文件。

命令:192.168.220.69:/home/workspace    /home/workspace    nfs    rw    0    0

2)把上面的掛載命令添加到 /etc/rc.local 中。

命令:mount -t nfs 192.168.220.69:/home/workspace /home/workspace -o proto=tcp -o nolock

2. 端口不固定,如何配置防火牆規則

爲了方便配置防火牆,需要固定 nfs 服務端口。NFS 啓動時會隨機啓動多個端口並向 RPC 註冊,這樣如果使用 iptables 對 NFS 端口進行限制就會有點麻煩,可以更改配置文件固定 NFS 服務相關端口。

分配端口,編輯配置文件:

命令:vi /etc/sysconfig/nfs

修改配置文件後,記得重啓 nfs 服務。重啓後可以看到,隨機端口已固定,便於配置防火牆策略。

發佈了83 篇原創文章 · 獲贊 36 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章