NFS服務介紹和搭建

1 什麼是NFS

簡單來說nfs是網絡文件系統他可以實現通過網絡讓不同主機之間共享文件

2 NFS的優缺點

優點

1.實現所有服務器文件數據一致
2.節省磁盤資源
3.節省帶寬資源

缺點

1.容易發生單點故障。nfs server端掛掉,所有的機器都不能訪問
2.高併發場景下nfs的效率和性能有限
3.nfs的數據傳輸都是明文的,對數據的完整性不做校驗
4.多臺機器掛載nfs,連接管理時比較麻煩

3 NFS的原理工作流程

NFS掛載原理圖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主進程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章