3、NFS 服務安裝
通過上邊簡要的介紹,我們知道 NFS 服務需要依賴 RPC 服務,所以這里 NFS 服務端需要安裝 rpcbind 和 nfs-utils,客戶端只需要安裝 nfs-utils 即可,由於我選用的為 CentOS 系統,所以可以使用 yum 快速的安裝。
首先,確認下服務端系統是否已安裝 NFS。
$ rpm -qa nfs-utils rpcbind
nfs-utils-1.3.0-0.54.el7.x86_64
rpcbind-0.2.0-38.el7.x86_64
注意:這里我已經安裝完畢,若為空,則說明未安裝。
然后,安裝 NFS 服務
# 服務端
$ yum install -y nfs-utils rpcbind
# 客戶端
$ yum install -y nfs-utils
1
2
3
4
另:Ubuntu 16.04 安裝命令為:
# 服務端
apt install nfs-kernel-server
# 客戶端
apt install nfs-common
4、NFS 配置及使用
我們在服務端創建一個共享目錄 /data/share ,作為客戶端掛載的遠端入口,然后設置權限。
$ mkdir -p /data/share
$ chmod 666 /data/share
然后,修改 NFS 配置文件 /etc/exports
$ vim /etc/exports
/data/share 10.222.77.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)
說明一下,這里配置后邊有很多參數,每個參數有不同的含義,具體可以參考下邊。此處,我配置了將 /data/share 文件目錄設置為允許 IP 為該 10.222.77.0/24 區間的客戶端掛載,當然,如果客戶端 IP 不在該區間也想要掛載的話,可以設置 IP 區間更大或者設置為 * 即允許所有客戶端掛載,例如:/home *(ro,sync,insecure,no_root_squash) 設置 /home 目錄允許所有客戶端只讀掛載。
參數 說明
ro 只讀訪問
rw 讀寫訪問
sync 所有數據在請求時寫入共享
async nfs 在寫入數據前可以響應請求
secure nfs 通過 1024 以下的安全 TCP/IP 端口發送
insecure nfs 通過 1024 以上的端口發送
wdelay 如果多個用戶要寫入 nfs 目錄,則歸組寫入(默認)
no_wdelay 如果多個用戶要寫入 nfs 目錄,則立即寫入,當使用 async 時,無需此設置
hide 在 nfs 共享目錄中不共享其子目錄
no_hide 共享 nfs 目錄的子目錄
subtree_check 如果共享 /usr/bin 之類的子目錄時,強制 nfs 檢查父目錄的權限(默認)
no_subtree_check 不檢查父目錄權限
all_squash 共享文件的 UID 和 GID 映射匿名用戶 anonymous,適合公用目錄
no_all_squash 保留共享文件的 UID 和 GID(默認)
root_squash root 用戶的所有請求映射成如 anonymous 用戶一樣的權限(默認)
no_root_squash root 用戶具有根目錄的完全管理訪問權限
anonuid=xxx 指定 nfs 服務器 /etc/passwd 文件中匿名用戶的 UID
anongid=xxx 指定 nfs 服務器 /etc/passwd 文件中匿名用戶的 GID
接下來,我們先啟動 RPC 服務。
$ service rpcbind start
# 或者使用如下命令亦可
$ /bin/systemctl start rpcbind.service
# 查看 NFS 服務項 rpc 服務器注冊的端口列表
$ rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
注意:此時我們還沒有啟動 NFS 服務,只監聽了 111 端口,接着我們來啟動 NFS 服務,再來看下注冊的端口列表。
# 啟動 NFS 服務
$ service nfs start
# 或者使用如下命令亦可
/bin/systemctl start nfs.service
# 啟動 NFS 服務后 rpc 服務已經啟用了對 NFS 的端口映射列表
# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 33745 status
100024 1 tcp 36980 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 38960 nlockmgr
100021 3 udp 38960 nlockmgr
100021 4 udp 38960 nlockmgr
100021 1 tcp 38362 nlockmgr
100021 3 tcp 38362 nlockmgr
100021 4 tcp 38362 nlockmgr
我們發現,啟動了 NFS 服務后,rpc 注冊的端口列表明顯增多。OK 現在服務端都啟動起來了,在服務端看下是否正確加載了設置的 /etc/exports 配置。
$ showmount -e localhost
Export list for localhost:
/data/share 10.222.77.0/24
1
2
3
5、NFS 測試
最后,在另一台 Linux 虛擬機上測試一下,是否能夠正確掛載吧。首先,我們可以在客戶端查看下 NFS 服務端 (上邊服務端 IP 為:10.222.77.86) 設置可共享的目錄信息。
# showmount -e 10.222.77.86
Export list for 10.222.77.86:
/data/share 10.222.77.0/24
1
2
3
然后,在客戶端創建掛在目錄 /share
$ mkdir -p /share
1
最后,掛載遠端目錄到本地 /share 目錄。
$ mount 10.222.77.86:/data/share /share
$ df -h | grep 10.222.77.86
Filesystem Size Used Avail Use% Mounted on
10.222.77.86:/data/share 27G 11G 17G 40% /share
可以看到,可以正確將遠端 NFS 目錄掛載到本地。注意:掛載點 /share 目錄必須已經存在,而且目錄中沒有文件或子目錄。
最后,我們在 NFS 服務端 /data/share 目錄下創建一個文件,看下客戶端是否能夠正確讀取並修改。
# 服務端寫入
$ echo "This is NFS server." > /data/share/nfs.txt
# ll /data/share/
total 4
-rw-r--r-- 1 root root 20 Nov 5 16:49 nfs.txt
# 客戶端讀取
$ ll /share/
total 4
-rw-r--r-- 1 root root 20 Nov 5 16:49 nfs.txt
$ cat /share/nfs.txt
This is NFS server.
# 客戶端寫入
$ echo "This is NFS client." >> /share/nfs.txt
# 服務端讀取
$ cat /data/share/nfs.txt
This is NFS server.
This is NFS client.
都是木有問題的,這是因為上邊設置了 NFS 遠端目錄權限為 rw 擁有讀寫權限,如果設置為 ro,那么客戶端只能讀取,不能寫入,根據實際應用場景合理配置,這里就不在演示了。這里提一下,NFS 默認使用用 UDP 協議來進行掛載,為了提高 NFS 的穩定性,可以使用 TCP 協議掛載,那么客戶端掛載命令可使用如下命令:
$ mount 10.222.77.86:/data/share /share -o proto=tcp -o nolock
1
最后,如果客戶端要卸載 NFS 掛載的話,使用如下命令即可。
$ umount /share
1
好了,上邊簡單介紹了 NFS 安裝及配置使用,使用它我們可以很方便的透過網絡,讓不同的主機、操作系統實現共享存儲。下一篇,我們繼續研究 Kubernetes 集群中各種方式掛載 NFS,來實現掛載網絡文件存儲系統。
————————————————
原文鏈接:https://blog.csdn.net/aixiaoyang168/article/details/83782336