1 什麼是NFS
簡單來說nfs是網絡文件系統他可以實現通過網絡讓不同主機之間共享文件
2 NFS的優缺點
優點
1.實現所有服務器文件數據一致
2.節省磁盤資源
3.節省帶寬資源
缺點
1.容易發生單點故障。nfs server端掛掉,所有的機器都不能訪問
2.高併發場景下nfs的效率和性能有限
3.nfs的數據傳輸都是明文的,對數據的完整性不做校驗
4.多臺機器掛載nfs,連接管理時比較麻煩
3 NFS的原理工作流程
1.啓動rpc服務
2.啓動nfs服務-------向rpc註冊啓動的端口
3.客戶向rpc請求nfs服務
4.返回端口到客戶端
5.拿着地址和端口請求傳輸數據
首先當NFS啓動後,就會隨機的使用一些端口(1024-65535),然後NFS就會向RPC去註冊這些端口,RPC就會記錄下這些端口,並且RPC會開啓111端口,等待客戶端RPC的請求,如果客戶端有請求,那麼服務器端的RPC就會將之前記錄的NFS端口信息告知客戶端。如此客戶端就會獲取NFS服務器端的端口信息,就會以實際端口進行數據的傳輸了
那可能就有小夥伴問了,爲什麼要向rpcbind註冊端口信息???
我們前邊說過當NFS啓動後,就會隨機的使用一些端口(1024-65535),由於nfs啓動端口不確定性,所以我們沒有辦法去確定這個服務的端口號是多少,rpc服務就是用來管理在這些端口號的,rpc對外統一端口號111,客戶端先向rpc服務請求nfs的端口號,然後在拿着這個端口號去訪問nfs
4 NFS服務端部署過程
4.1 檢查軟件是否安裝
默認是沒有安裝的
yum -y install rpcbind nfs-utils
檢查
[root@nfs01 ~]# rpm -qa|egrep "rpcbind|nfs-utils"
rpcbind-0.2.0-48.el7.x86_64
nfs-utils-1.3.0-0.65.el7.x86_64
4.2 編寫服務端的配置文件
[root@nfs01 ~]# ll /etc/exports
-rw-r--r--. 1 root root 0 Jun 7 2013 /etc/exports
[root@nfs01 ~]# vim /etc/exports
/date 172.16.1.0/24(rw,sync)
共享的目錄 允許訪問的網段(權限)
實例:/data 172.16.1.0/24(rw,sync)
權限 | 描述 |
---|---|
rw | 表示可讀寫權限 |
ro | read-only,只讀; |
sync | 文件同時寫入硬盤和內存; |
async | 文件暫存於內存,而不是直接寫入磁盤 ; |
no_root_squash | NFS客戶端連接服務端時如果使用的是root的話,那麼對服務端分享的目錄來說,也擁有root權限。顯然開啓這項是不安全的。 |
root_squash | NFS客戶端連接服務端時如果使用的是root的話,那麼對服務端分享的目錄來說,擁有匿名用戶權限,通常他將使用nobody或nfsnobody身份; |
all_squash | 不論NFS客戶端連接服務端時使用什麼用戶,對服務端分享的目錄來說都是擁有匿名用戶權限; |
anonuid | 匿名用戶的UID值,通常是nobody或nfsnobody,可以在此處自行設定; |
anongid | 匿名用戶的GID值。 |
如果修改uid和gid,客戶端服務端兩邊的uid必須一致
/etc/exports NFS服務的主要配置文件
/usr/sbin/exportfs NFS服務的管理命令
/usr/sbin/showmount 客戶端的查看命令
/var/lib/nfs/etab 記錄NFS分享出來的目錄的完整權限設定值
/var/lib/nfs/xtab 記錄曾經登錄過的客戶端信息
4.3 企業案例
案例1
rw,sync
讀寫,並且數據同步寫入到服務器的磁盤裏
案例2
rw,sync,all_squash,anounid=2000,anongid=2000
讀寫,數據同步寫入到磁盤,所有用戶過來都匿名用戶的權限,指定客戶端的用戶uid和gid
案例3
ro
只讀,開發人員先查看生產服務器的日誌的需求
4.4 創建共享目錄並授權
[root@nfs01 ~]# mkdir /date
[root@nfs01 ~]# chown nfsnobody:nfsnobody /date
4.5 啓動服務
1.先啓動rpcbind服務,在啓動nfs服務
[root@nfs01 ~]# systemctl start rpcbind
[root@nfs01 ~]# systemctl start nfs
[root@nfs01 ~]# ps -ef | egrep "nfs|rpcbind"
rpc 7824 1 0 15:13 ? 00:00:00 /sbin/rpcbin -w
root 7873 2 0 15:13 ? 00:00:00 [nfsd4_callbacks]
root 7879 2 0 15:13 ? 00:00:00 [nfsd]
root 7880 2 0 15:13 ? 00:00:00 [nfsd]
root 7881 2 0 15:13 ? 00:00:00 [nfsd]
root 7882 2 0 15:13 ? 00:00:00 [nfsd]
root 7883 2 0 15:13 ? 00:00:00 [nfsd]
root 7884 2 0 15:13 ? 00:00:00 [nfsd]
root 7885 2 0 15:13 ? 00:00:00 [nfsd]
root 7886 2 0 15:13 ? 00:00:00 [nfsd]
4.6 檢查服務啓動
[root@nfs01 ~]# rpcinfo -p 127.0.0.1
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 4285 status
100024 1 tcp 25908 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 26225 nlockmgr
100021 3 udp 26225 nlockmgr
100021 4 udp 26225 nlockmgr
100021 1 tcp 8408 nlockmgr
100021 3 tcp 8408 nlockmgr
100021 4 tcp 8408 nlockmgr
[root@nfs01 ~]# showmount -e
Export list for nfs01:
/date 172.16.1.0/24
5 客戶端配置
5.1 軟件安裝
yum -y install rpcbind nfs-utils
5.2 檢查共享目錄並掛載
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/date 172.16.1.0/24
掛載
[root@web01 ~]# mount.nfs 172.16.1.31:/date /mnt/
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda3 19G 2.7G 16G 15% /
/dev/sda1 197M 109M 89M 56% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/date 19G 2.6G 16G 15% /mnt
5.3 掛載的參數
參數 | 含義 |
---|---|
fg與bg | 當客戶機進行掛載的可以選擇前臺(fg)還是後臺(bg),如果在前臺執行mount會持續進行掛載,如果在後臺執行,則mount會在後臺持續進行多次掛載不會影響前臺其他操作,網絡不穩定建議bg |
soft和hard | soft軟掛載,持續幾次就timeout後顯示終止,Hard硬掛載,一直持續,直到卸載,此時無法mount和kill,通常與intr使用 |
intr | 當使用hard掛載的資源timeout後,如果指定intr參數,可以再timeout後終斷掉 |
rsize與wsize | 一次讀出(rsize)和寫入(wsize)的區塊大小,這個設置可以影響客戶端與服務器端傳輸的緩衝區數量 |
proto 指定的協議udp或者tcp
實例:mount -t nfs -o fg,hard,intr ip:/path
suid和nosuid:當掛載文件系統上有任何suid的程序時,只要使用nosuid就能取消suid的功能,任何根suid有關的都不能用
rw和ro:可讀可寫(rw),只讀(ro)
dev和nodev:設置是否保留裝置的特功能,一般不需要
exrc和noexec:是否讓文件具有可執行的權限
user和nouser:是否允許用戶進行文件的掛載與卸載功能,最好不要
auto與noauto:這個是指mount -a時會不會被掛載
5.4 服務啓動進程詳解
rpc 7824 1 0 15:13 ? 00:00:00 /sbin/rpcbind -w
rpcuser 7841 1 0 15:13 ? 00:00:00 /usr/sbin/rpc.statd <---檢查數據一致性
root 7843 2 0 15:13 ? 00:00:00 [rpciod]
root 7850 1 0 15:13 ? 00:00:00 /usr/sbin/rpc.idmapd <---用戶壓縮/映射
root 7868 1 0 15:13 ? 00:00:00 /usr/sbin/rpc.mountd <---權限管理驗證
root 7873 2 0 15:13 ? 00:00:00 [nfsd4_callbacks]
root 7879 2 0 15:13 ? 00:00:00 [nfsd] <---NFS主進程
root 7880 2 0 15:13 ? 00:00:00 [nfsd] <---NFS主進程
root 7881 2 0 15:13 ? 00:00:00 [nfsd]
root 7882 2 0 15:13 ? 00:00:00 [nfsd]
root 7883 2 0 15:13 ? 00:00:00 [nfsd]
root 7884 2 0 15:13 ? 00:00:00 [nfsd]
root 7885 2 0 15:13 ? 00:00:00 [nfsd]
root 7886 2 0 15:13 ? 00:00:00 [nfsd] <---NFS主進程