NFS部署實戰及原理介紹

NFS簡介

NFS(Network File System)的縮寫,它的主要功能是:通過網絡、讓不同的機器、不同的OS可以共享彼此的文件

NFS服務器可以允許NFS客戶端將遠端NFS服務器的共享目錄掛載到自己的NFS客戶端,這樣客戶端就好比有在本地有一塊磁盤一樣,只不過是網絡磁盤而已。

掛載結構圖

1.png

如上圖,當我們在NFS服務器設置好一個共享目錄/data/share後,其他的有權限訪問NFS服務器的NFS客戶端就可以講這個目錄掛載到自己的本地,並且能看到服務端/data/share下的所有數據


NFS是通過網絡來進行Server端和Client端之間的數據傳輸,既然走網絡,雙方肯定都要有端口,哪NFS Server怎麼知道使用哪個端口來進行數據傳輸,NFS其實會隨機選擇端口來進行數據傳輸。那NFS客戶端又是如何知道NFS服務端到底是使用哪個端口呢?其實NFS服務器是通過遠程過程調用RPC(Remote Procedure Call)協議來實現的,所以,RPC管理服務端的NFS端口分配,客戶端要傳數據,那麼客戶端的RPC會先跟服務端的RPC去要服務器的端口,要到端口後,再建立連接,然後傳輸數據,見下圖


NFS客戶端/NFS服務端、RPC關係圖

spacer.gif2.png

如上圖,當我們在NFS服務器設置好一個共享目錄/data/share後,其他的有權限訪問NFS服務器的NFS客戶端就可以講這個目錄掛載到自己的本地,並且能看到服務端/data/share下的所有數據


NFS是通過網絡來進行Server端和Client端之間的數據傳輸,既然走網絡,雙方肯定都要有端口,哪NFS Server怎麼知道使用哪個端口來進行數據傳輸,NFS其實會隨機選擇端口來進行數據傳輸。那NFS客戶端又是如何知道NFS服務端到底是使用哪個端口呢?其實NFS服務器是通過遠程過程調用RPC(Remote Procedure Call)協議來實現的,所以,RPC管理服務端的NFS端口分配,客戶端要傳數據,那麼客戶端的RPC會先跟服務端的RPC去要服務器的端口,要到端口後,再建立連接,然後傳輸數據,見下圖


通信過程:

1.首先服務器端啓動RPC服務,並開啓111端口

2.服務器端啓動NFS服務,並向RPC註冊端口信息

3.客戶端啓動RPC服務,向服務端的RPC服務請求服務端的NFS端口

4.服務端的RPC服務反饋NFS端口信息給客戶端。

5.客戶端通過獲取的NFS端口來建立和服務端的NFS連接並進行數據的傳輸。

機器清單

主機名

IP地址

操作系統版本

備註

node100

172.20.20.100

CentOS 7.6 x64

NFS服務端

node200

172.20.20.200


NFS客戶端

實驗環境

CentOS:CentOS Linux release 7.6.1810 (Core)

2臺都操作

配置主機名:

# cat >> /etc/hosts << EOF

172.20.20.100 node100

172.20.20.200 node200

EOF



NFS服務端操作

# rpm -qa nfs-utils rpcbind

# yum install nfs-utils rpcbind


建立目錄

# mkdir  -p /data/share

# chmod 666 /data/share/

# cat >> /etc/exports << EOF

/data/share 172.20.20.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)

EOF

# mkdir -p /data/share/soft/


啓動RPC服務

# systemctl start rpcbind.service

[root@node100 ~]# ps -ef|grep rpcbind

rpc       15712      1  0 03:41 ?        00:00:00 /sbin/rpcbind -w

root      15714   8035  0 03:41 pts/0    00:00:00 grep --color=auto rpcbind


[root@node100 ~]# 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服務

# service nfs start

[root@node100 ~]# 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  40044  status

100024    1   tcp  34946  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  37957  nlockmgr

100021    3   udp  37957  nlockmgr

100021    4   udp  37957  nlockmgr

100021    1   tcp  43494  nlockmgr

100021    3   tcp  43494  nlockmgr

100021    4   tcp  43494  nlockmgr


是否加載配置/etc/exports

[root@node100 ~]# showmount  -e localhost

Export list for localhost:

/data/share 172.20.20.0/24


在NFS客戶端安裝

# yum install nfs-utils

[root@node200 ~]# showmount  -e 172.20.20.100

Export list for 172.20.20.100:

/data/share 172.20.20.0/24


在NFS客戶端進行測試

# mkdir /root/soft/

# mount 172.20.20.100:/data/share/soft /root/soft

[root@node200 soft]# df -Th

Filesystem                     Type      Size  Used Avail Use% Mounted on

/dev/sda3                      xfs        36G  1.1G   35G   4% /

devtmpfs                       devtmpfs  224M     0  224M   0% /dev

tmpfs                          tmpfs     235M     0  235M   0% /dev/shm

tmpfs                          tmpfs     235M  5.6M  229M   3% /run

tmpfs                          tmpfs     235M     0  235M   0% /sys/fs/cgroup

/dev/sda1                      xfs       897M  127M  771M  15% /boot

tmpfs                          tmpfs      47M     0   47M   0% /run/user/0

172.20.20.100:/data/share/soft nfs4       36G  1.1G   35G   4% /root/soft


遇到的問題

[root@node200 ~]# showmount  -e  172.20.20.100

clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)


因爲iptables沒有添加規則所致,解決方法:

一是關閉防火牆,這樣不×××全。另一個可以向iptables中添加nfs的所有端口

這裏使用第一種方法:

systemctl stop firewalld.service

service iptables stop



相關參數說明:

參數

說明


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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章