1.1 什麼是NFS
NFS是Network File System的縮寫,中文稱爲網絡文件系統,它的主要功能是經過網絡(一個局域網)讓不一樣的主機系統之間能夠共享文件或目錄,NFS的客戶端(通常爲應用服務器,例如web)能夠經過掛載(mount)的方式將NFS服務器共享的數據目錄掛載到NFS客戶端本地系統中(就是某一個關在點下),從客戶端本地看,NFS服務器端共享目錄就好像是客戶端本身的磁盤分區或者目錄同樣,而實際上倒是遠端的NFS服務器的目錄。
NFS網絡文件系統很像Windows系統的網絡共享、安全功能、網絡驅動器映射,這也和linux的samba服務相似,只不過通常狀況下,Windows網絡共享服務或samba服務用戶辦公局域網共享,而互聯網中小型網站集羣架構後端經常使用NFS進行數據共享,如果大型網站,那麼有可能還會用到更復雜的分佈式文件系統Moosefs(mfs)、GlusterFS。
1.2 NFS歷史介紹
第一個網絡文件系統被稱爲File Access Listener,由DEC在1976年開發。
NFS是第一個構建在IP協議之上的現代網絡文件系統,在20世紀80年代,首先做爲實驗文件系統,由Sun Microsystems在內部開發完成,NFS協議歸屬與RFC標準,在隨後演化爲NFSv2,做爲一個標準,因爲NFS與其餘客戶端和服務器的互操做能力很好而發展迅速。
1.3 NFS發展時間表
1.4 NFS企業在企業中的應用場景
在企業集羣架構的工做場景中,NFS網絡文件系統通常被用來存儲共享視頻、圖片、附件等靜態資源文件,一般網站用戶上傳的文件都會放到NFS共享中,例如BBS產品的圖片、附件、頭像(網站BBS的程序不要放在NFS共享中),而後前端全部節點在訪問這些靜態資源時都會讀取NFS存儲上的資源。
NFS是當前互聯網系統架構中最經常使用的數據存儲服務之一,特別是中小型網站應用頻率更高。
1.5 NFS工做流程圖
1.6 NFS原理圖
注意:NFS的rpc服務,在Centos5系列下名稱爲portmap,在Centos6系列下名稱爲rpcbind前端
2.1 部署服務器前的準備linux
操做系統 | 服務器角色 | IP地址 |
---|---|---|
CentOS release 6.9 x86_64 | NFS服務端(nfs-server) | 內網:172.16.1.31/24 外網:10.0.0.31/24 |
CentOS release 6.9 x86_64 | NFS客戶端(nfs-client1) | 內網:172.16.1.41/24 外網:10.0.0.41/24 |
CentOS release 6.9 x86_64 | NFS客戶端(nfs-client2) | 內網:172.16.1.8/24 外網:10.0.0.8/24 |
2.2 NFS服務端的配置
2.2.1 檢查操做系統的環境
[root@nfs01 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@nfs01 ~]# uname -r
2.6.32-696.el6.x86_64
[root@nfs01 ~]# uname -m
x86_64
2.2.2 NFS服務端須要安裝的軟件包
nfs-utils:nfs服務的主程序,包括rpc.nfsd、rpc.mountd兩個daemons和相關的文檔說明及執行命令文件等
rpcbind:centos6下面的rpc主程序(centos5下的是portmap)
2.2.3 安裝相應的軟件包及檢查
安裝:
[root@nfs01 ~]# yum install nfs-utils rpcbind -y
檢查:
[root@nfs01 ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-13.el6_9.1.x86_64
nfs-utils-1.2.3-75.el6_9.x86_64
注意:在安裝完該軟件包後會自動建立nfsnobody用戶
[root@nfs01 ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
2.2.4 啓動NFS相關的服務
2.2.4.1 啓動rpcbind服務並進行檢查
啓動:
[root@nfs01 ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
檢查:
[root@nfs01 ~]# /etc/init.d/rpcbind status
rpcbind (pid 2309) is running...
查看rpc的端口:
[root@nfs01 ~]# netstat -tnulp|grep rpc 端口爲111
tcp 0 0 0.0.0.0:111 0.0.0.0: LISTEN 2309/rpcbind
tcp 0 0 0.0.0.0:35957 0.0.0.0: LISTEN 1221/rpc.statd
tcp 0 0 :::14282 ::: LISTEN 1221/rpc.statd
tcp 0 0 :::111 ::: LISTEN 2309/rpcbind
udp 0 0 0.0.0.0:49347 0.0.0.0: 1221/rpc.statd
udp 0 0 127.0.0.1:973 0.0.0.0: 1221/rpc.statd
udp 0 0 0.0.0.0:111 0.0.0.0: 2309/rpcbind
udp 0 0 0.0.0.0:788 0.0.0.0: 2309/rpcbind
udp 0 0 :::111 ::: 2309/rpcbind
udp 0 0 :::10354 ::: 1221/rpc.statd
udp 0 0 :::788 :::* 2309/rpcbind
查看端口映射狀況:
[root@nfs01 ~]# 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服務時,不能看到nfs端口的映射狀況
2.2.4.2 啓動nfs服務並進行檢查
啓動:
[root@nfs01 ~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
檢查:
[root@nfs01 ~]# /etc/init.d/nfs status
rpc.svcgssd is stopped
rpc.mountd (pid 2432) is running...
nfsd (pid 2448 2447 2446 2445 2444 2443 2442 2441) is running...
rpc.rquotad (pid 2427) is running...
查看端口映射狀況:
[root@nfs01 ~]# 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
100011 1 udp 875 rquotad
100011 2 udp 875 rquotad
100011 1 tcp 875 rquotad
100011 2 tcp 875 rquotad
100005 1 udp 28839 mountd
100005 1 tcp 34541 mountd
100005 2 udp 12297 mountd
100005 2 tcp 38042 mountd
100005 3 udp 54557 mountd
100005 3 tcp 11471 mountd
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100021 1 udp 9683 nlockmgr
100021 3 udp 9683 nlockmgr
100021 4 udp 9683 nlockmgr
100021 1 tcp 4166 nlockmgr
100021 3 tcp 4166 nlockmgr
100021 4 tcp 4166 nlockmgr
注意:此時有了端口映射
【特別注意】必須先啓動rpcbind服務以後,才能啓動nfs服務
緣由:nfs能夠視爲一個rpc程序,在啓動任何一個rpc程序以前,須要作好端口和功能的映射工做,這個映射工做就是由rpcbind服務來完成的,所以在提供nfs服務以前,必需要先啓動rpcbind服務
2.2.4.3 檢查nfs和rpc進程
[root@nfs01 ~]# ps -ef |grep nfs
root 2900 2 0 19:05 ? 00:00:00 [nfsiod]
root 3133 2 0 19:40 ? 00:00:00 [nfsd4]
root 3134 2 0 19:40 ? 00:00:00 [nfsd4_callbacks]
root 3135 2 0 19:40 ? 00:00:00 [nfsd]
root 3136 2 0 19:40 ? 00:00:00 [nfsd]
root 3137 2 0 19:40 ? 00:00:00 [nfsd]
root 3138 2 0 19:40 ? 00:00:00 [nfsd]
root 3139 2 0 19:40 ? 00:00:00 [nfsd]
root 3140 2 0 19:40 ? 00:00:00 [nfsd]
root 3141 2 0 19:40 ? 00:00:00 [nfsd]
root 3142 2 0 19:40 ? 00:00:00 [nfsd]
root 3221 2130 0 19:41 pts/0 00:00:00 grep nfs
[root@nfs01 ~]# ps -ef |grep rpc
rpcuser 1221 1 0 10:37 ? 00:00:00 rpc.statd
root 1270 2 0 10:37 ? 00:00:00 [rpciod/0]
rpc 2309 1 0 14:27 ? 00:00:00 rpcbind
root 3121 1 0 19:40 ? 00:00:00 rpc.rquotad
root 3126 1 0 19:40 ? 00:00:00 rpc.mountd
root 3173 1 0 19:40 ? 00:00:00 rpc.idmapd
root 3223 2130 0 19:42 pts/0 00:00:00 grep rpc
2.2.5 將相關的服務添加到開機自啓動中
【方法1】
將nfs服務加入並檢查:
[root@nfs01 ~]# chkconfig nfs on
[root@nfs01 ~]# chkconfig --list nfs
nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
將rpcbind服務加入並檢查:
[root@nfs01 ~]# chkconfig rpcbind on
[root@nfs01 ~]# chkconfig --list rpcbind
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off
【方法2】
加入:
[root@nfs01 ~]# echo "/etc/init.d/rpcbind start" >>/etc/rc.local
[root@nfs01 ~]# echo "/etc/init.d/nfs start" >>/etc/rc.local
查看:
[root@nfs01 ~]# tail -2 /etc/rc.local
/etc/init.d/rpcbind start
/etc/init.d/nfs start
【注意】
在實際的生產環境中用方法2而不用方法1,由於能夠方便運維人員的管理
2.2.6 配置nfs服務的配置文件/etc/exports
默認狀況下該配置文件是空的:
[root@nfs01 ~]# ll -h /etc/exports
-rw-r--r--. 1 root root 0 Jan 12 2010 /etc/exports
編輯該配置文件:
[root@nfs01 ~]# vim /etc/exports
查看:
[root@nfs01 ~]# cat /etc/exports
#share /data by oldboy for bingbing at 2018-3-12
/data 172.16.1.0/24(rw,sync)
【注意】
該配置文件默認是存在,只不過是空文件而已,在172.16.1.0/24(rw,sync)中24和(之間不能有空格
查看NFS服務器配置的參數(包含默認的參數)的文件/var/lib/nfs/etabweb
2.2.6.1 nfs配置文件的格式
NFS共享的目錄 NFS客戶端地址(參1,參2,……) NFS客戶端地址2(參1,參2,……)或者
NFS共享的目錄 NFS客戶端地址(參1,參2,……)
上述各列參數的含義:
NFS共享的目錄:爲NFS服務端要共享的實際目錄,要用絕對路徑如(/data)。注意共享目錄的本地權限,若是須要讀寫共享,必定要讓本地目錄能夠被NFS客戶端的用戶(nfsnobody)讀寫。/etc/exports配置文件格式書寫詳細以下表vim
經常使用格式說明 | 實例 |
---|---|
配置案例1 | /data 172.16.1.0/24(rw,sync) 容許客戶端讀寫,而且數據同步寫到服務器的磁盤裏 |
配置案例2 | /data 172.16.1.0/24(rw,sync,all_squash,anonuid=888,anongid=888) 容許客戶端讀寫,而且數據同步寫到服務器的磁盤裏,而且指定客戶端的uid和gid,早期生產環境中的一種配置,適合多客戶端共享一個NFS單目錄,若是全部服務器的nfsnodoby帳戶的UID相同,則本案例就沒什麼意義了 |
配置案例3 | /data 172.16.1.0/24(ro) 只讀共享,用途:例如在生產環境中開發人員有查看服務器日誌的需求,可是又不但願給開發服務器的權限,那麼就能夠給開發提供從某個測試服務器NFS客戶端上查看某個生產服務器日誌目錄(NFS共享目錄)的權限,可是,這不是惟一的方法喲 |
NFS 客戶端地址:爲NFS服務端受權的可訪問共享目錄的NFS客戶端地址,能夠爲單獨的IP地址或主機名、域名等,也能夠爲整個網段的地址,還能夠用」*」來匹配全部的客戶端服務器,這裏所謂的客戶端通常爲前端的業務服務器,例如web服務。詳細說明以下表後端
客戶端地址 | 具體地址 | 說明 |
---|---|---|
受權單一客戶端訪問NFS | 172.16.1.41 | 通常狀況下,生產環境中此配置很少 |
受權整個網段訪問NFS | 172.16.1.0/24 | 指定網段爲生產環境中最多見的配置,配置簡單、維護方便 |
受權整個網段可訪問NFS | 172.0.0.* | 指定網段的另外寫法(不推薦使用) |
受權某個域名客戶端訪問 | nfs.lzhnb.com | 生產環境中通常不使用 |
受權整個域名客戶端訪問 | *.lzhnb.com | 生產環境中通常不使用 |
NFS配置參數權限,具體以下表centos
參數名稱 | 參數用途 |
---|---|
rw(熟記) | 表示可讀寫權限 |
sync(熟記) | 請求或寫入數據時,數據同步寫入到NFS Server的硬盤後才返回,優勢:數據安全不會丟,缺點:性能比不啓用該參數要差 |
async(熟記) | 寫入數據時會先寫到內存緩衝區,直到硬盤有空檔纔會在寫入磁盤,這樣能夠提高寫入效率。風險是若服務器宕機或不正常關機,會損失緩衝區中未寫入硬盤的數據(解決辦法:服務器主板電池或UPS不間斷電源) |
all_squash(熟記) | 無論訪問NFS Server共享目錄的用戶身份如何,它的權限都將被壓縮爲匿名用戶,同時它的UID和GID都會變成nfsnobody帳號身份,在早期多個NFS客戶端同時讀寫NFS Server數據時,這個參數頗有用,在生產環境中配置NFS的重要技巧:1)確保全部客戶端服務器對NFS共享目錄具有相同的用戶訪問權限,all_squash把全部客戶端都壓縮成匿名用戶(UID相同),就是anonuid,anongid指定的UID和GID相同,2)全部的客戶端和服務器端都須要有一個相同的UID和GID的用戶,nfsnodoby(UID必須相同) |
anonuid(熟記) | 參數以anon*開頭即值anonymous匿名用戶,這個用戶的UID設置值一般爲nfsnobody的UID值,固然咱們也能夠自行設置這個UID值。可是,UID必須存在於/etc/passwd中。在多個NFS Clients時,如多臺web server共享一個NFS目錄時,經過這個參數可使得不一樣的NFS Clients寫入的數據對全部NFS Clients保持一樣的用戶權限,即爲配置的匿名UID對應用戶權限,這個參數頗有用。通常默認就好 |
anongid(熟記) | 同anonuid,區別是把uid(用戶id)換成gid(組id) |
ro | 表示只讀權限 |
2.2.7 建立共享目錄
[root@nfs01 ~]# mkdir /data -p
[root@nfs01 ~]# ll -d /data/
drwxr-xr-x. 2 root root 4096 Nov 19 10:45 /data/
2.2.8 更改共享目錄的權限
[root@nfs01 ~]# chown -R nfsnodoby.nfsnodoby /data
[root@nfs01 ~]# ll -d /data
drwxr-xr-x 2 nfsnobody nfsnobody 4096 Mar 12 19:27 /data
2.2.9 從新加載NFS服務
[root@nfs01 ~]# /etc/init.d/nfs reload
【注意】
/etc/init.d/nfs reload<==>fexportfs -rv
修改完/etc/exports配置後,須要從新加載NFS服務
用yum/rpm包安裝的軟件,用service和/etc/init.d/服務名啓動是同樣的
2.2.10 檢查有權限掛載的服務器是否可以掛載
【方法1】利用showmount來進行檢查
[root@nfs01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
或者
[root@nfs01 ~]# showmount -e localhost
Export list for localhost:
/data 172.16.1.0/24
【注意】
出現上面信息是,說明服務器能夠掛載
測試的IP地址爲NFS服務器的IP地址
【方法2】能夠在把NFS服務器當作客戶端來進行掛載測試
[root@nfs01 ~]# mount -t nfs 172.16.1.31:/data /mnt 掛載
[root@nfs01 ~]# df -h 查看
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 35M 146M 19% /boot
172.16.1.31:/data 8.8G 1.5G 6.9G 18% /mnt
[root@nfs01 ~]# umount /mnt 測試完後取消掛載
[root@nfs01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 35M 146M 19% /boot
2.3 NFS客戶端的配置
2.3.1 檢查操做系統的環境
[root@ client1 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@ client1 ~]# uname -r
2.6.32-696.el6.x86_64
[root@ client1 ~]# uname -m
x86_64
2.3.2 安裝客戶端軟件rpcbind和nfs-utils
安裝:
[root@client1 ~]# yum install nfs-utils rpcbind -y
檢查:
[root@ client1 ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-13.el6_9.1.x86_64
nfs-utils-1.2.3-75.el6_9.x86_64
【注意】
安裝nfs-utils軟件的目的是爲了使用showmount等功能,因此客戶端最好也裝上,可是不啓動NFS服務
2.3.3 啓動RPC服務並進行查看
啓動:
[root@client1 ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
檢查:
[root@ client1 ~]# /etc/init.d/rpcbind status
rpcbind (pid 2370) is running...
2.3.4 檢查可否訪問服務端
【方法1】
[root@ client1 ~]# showmount -e 172.16.1.31 此ip地址爲服務器端的ip地址
Export list for 172.16.1.31:
/data 172.16.1.0/24
出現上面的狀況說明能夠訪問服務端
【方法2】
[root@ client1 ~]# telnet 172.16.1.31 111 111爲rpc服務的端口
Trying 172.16.1.31...
Connected to 172.16.1.31.
Escape character is '^]'.
出現上面的狀況說明能夠訪問服務端
2.3.5 掛載NFS共享目錄
掛載:
[root@ client1 ~]# mount -t nfs 172.16.1.31:/data /mnt
查看:
[root@ client1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 35M 146M 19% /boot
172.16.1.31:/data 8.8G 1.5G 6.9G 18% /mnt
查看:
[root@ client1 ~]# mount
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
172.16.1.31:/data on /mnt type nfs (rw,vers=4,addr=172.16.1.31,clientaddr=172.16.1.8)
2.3.6 測試讀寫數據
2.3.6.1 在/mnt目錄下建立測試文件
[root@ client1 ~]# cd /mnt/
[root@ client1 mnt]# touch test.txt
[root@ client1 mnt]# ls
test.txt
2.3.6.2 在NFS服務端/data目錄下進行查看
[root@nfs01 ~]# cd /data
[root@nfs01 data]# ls
test.txt
至此NFS客戶端掛載成功
2.3.7 將掛載命令加入開機自啓動
[root@client1 ~]# echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
[root@client1 ~]# tail -1 /etc/rc.local
mount -t nfs 172.16.1.31:/data /mnt安全
3.1 NFS常見進程詳解
3.1.1 查看NFS進程
[root@nfs01 ~]# ps -ef|grep -E "rpc|nfs"
rpcuser 1221 1 0 10:37 ? 00:00:00 rpc.statd 檢查文件的一致性
root 1270 2 0 10:37 ? 00:00:00 [rpciod/0]
rpc 2309 1 0 14:27 ? 00:00:00 rpcbind
root 2900 2 0 19:05 ? 00:00:00 [nfsiod]
root 3121 1 0 19:40 ? 00:00:00 rpc.rquotad 磁盤配額進程
root 3126 1 0 19:40 ? 00:00:00 rpc.mountd 權限管理驗證
root 3133 2 0 19:40 ? 00:00:00 [nfsd4]
root 3134 2 0 19:40 ? 00:00:00 [nfsd4_callbacks]
root 3135 2 0 19:40 ? 00:00:00 [nfsd] nfs主進程管理登入ID身份 認證等
root 3136 2 0 19:40 ? 00:00:00 [nfsd]
root 3137 2 0 19:40 ? 00:00:00 [nfsd]
root 3138 2 0 19:40 ? 00:00:00 [nfsd]
root 3139 2 0 19:40 ? 00:00:00 [nfsd]
root 3140 2 0 19:40 ? 00:00:00 [nfsd]
root 3141 2 0 19:40 ? 00:00:00 [nfsd]
root 3142 2 0 19:40 ? 00:00:00 [nfsd]
root 3173 1 0 19:40 ? 00:00:00 rpc.idmapd name mapping daemon
root 3271 2130 0 20:15 pts/0 00:00:00 grep -E rpc|nfs
3.1.2 NFS服務啓動的進程說明服務器
服務或進程名 | 用途說明 |
---|---|
nfsd(rpc.nfsd) | 主要功能是用來管理NFS客戶端是否可以登入NFS服務端主機,其中還包括登入者的ID判別等 |
mountd(rpc.mountd) | 主要功能是管理NFS文件系統,特別注意的是:NFS自己設置的是網絡共享權限,整個共享目錄的權限還和目錄自身的系統權限有關 |
rpc.lockd(非必要) | 可用來鎖定文件,用於多客戶端同時寫入 |
rpc.statd(非必要) | 檢查文件的一致性,與rpc.lockd有關 |
rpc.idmapd | 名字映射後臺進程 |
3.3 NFS客戶端掛載命令網絡
掛載命令 | 掛載的格式類型 | NFS服務器提供的共享目錄 | NFS客戶端的掛載點 |
---|---|---|---|
mount | -t nfs | 172.16.1.31:/data | /mnt (該目錄必須存在) |
3.4 多個NFS客戶端訪問服務器的讀寫文件時必需要有的權限
NFS服務器/etc/exports設置須要開放可寫入的權限,即服務端的共享權限
NFS服務器實際要共享的NFS目錄權限具備可寫入w的權限,即服務端本地目錄的安全權限
每臺服務器都對應存在和NFS默認配置UID的相同UID的帳戶nfsnodoby(確保全部全部客戶端的訪問權限統一,不然每臺機器都須要同時創建相同UID用戶,並覆蓋NFS的默認用戶配置)
只有知足上述三個條件,多個NFS客戶端才能具備查看、修改、刪除其餘任意NFS客戶端上傳文件的權限,這在大規模的集羣環境中最爲集羣共享存儲時尤其重要
第4章 錯誤重現及客戶端排錯思路
4.1 錯誤重現
4.1.1 服務端的防火牆未關閉
【錯誤實例】
[root@web01 ~]# showmount -e 172.16.1.31
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
而且再出現這種錯誤時,在客戶端不能用df -h命令
【解決方法】
只需關掉NFS服務端的防火牆便可
[root@nfs01 ~]# /etc/init.d/iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@nfs01 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
【測試】
在NFS客戶端在進行測試
[root@client1 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
4.1.2 NFS服務端的共享目錄權限不夠
【錯誤實例】
在NFS客戶端掛載目錄下建立文件被拒絕出現下面的錯誤
[root@client1 ~]# cd /mnt/
[root@client1 mnt]# touch oldboy.txt
touch: cannot touch `oldboy.txt': Permission denied
【解決方法】
在客戶端修改共享目錄的權限
[root@nfs01 ~]# ll -d /data
drwxr-xr-x 2 root root 4096 Mar 13 20:07 /data
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data
[root@nfs01 ~]# ll -d /data
drwxr-xr-x 2 nfsnobody nfsnobody 4096 Mar 13 20:07 /data
【測試】
在NFS客戶端掛載目錄下建立文件
[root@client1 ~]# cd /mnt/
[root@client1 mnt]# touch oldboy.txt
在NFS服務端共享目錄下查看
[root@nfs01 ~]# cd /data
[root@nfs01 data]# ls
oldboy.txt test.txt
4.1.3 NFS服務端啓動順序有問題
【錯誤實例】
[root@client1 ~]# showmount -e 172.16.1.31
clnt_create: RPC: Program not registered
【解決方法】
在NFS端從新啓動服務,先啓動rpcbind服務,在啓動nfs服務
[root@nfs01 ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
[root@nfs01 ~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
【測試】
[root@client1 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
4.1.4 NFS服務端的nfs服務未開啓
【錯誤實例】
[root@client1 ~]# showmount -e 172.16.1.31
clnt_create: RPC: Program not registered
【解決方法】
在NFS服務端開啓nfs服務器
[root@nfs01 ~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
【測試】
[root@client1 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
4.2 排錯思路
4.2.1 首先確認NFS服務器端的服務或配置是否OK
[root@nfs01 ~]# showmount -e localhost
Export list for localhost:
/data 172.16.1.0/24
4.2.2 在NFS服務器端測試可否掛載
[root@nfs01 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@nfs01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 35M 146M 19% /boot
172.16.1.31:/data 8.8G 1.5G 6.9G 18% /mnt
4.2.3 從客戶端pingNFS服務端的ip
[root@client1 ~]# ping 172.16.1.31
PING 172.16.1.31 (172.16.1.31) 56(84) bytes of data.
64 bytes from 172.16.1.31: icmp_seq=1 ttl=64 time=2.39 ms
64 bytes from 172.16.1.31: icmp_seq=2 ttl=64 time=0.528 ms
這是通的狀況
執行這步的主要目的是看物理鏈路是否通
4.2.4 從客戶端telnet服務器端IP端口檢查
[root@client1 ~]# telnet 172.16.1.31 111
Trying 172.16.1.31...
Connected to 172.16.1.31.
Escape character is '^]'
這是通的狀況
執行這步的主要目的是用於測試NFS服務或RPC服務是否通
第5章 生產環境高級案例配置實戰
5.1 NFS服務端的配置
5.1.1 創建用戶組zuma,並指定GID爲888,全部的客戶端也執行一樣的操做
[root@nfs01 ~]# groupadd zuma -g 888
5.1.2 創建用戶zuma,指定UID爲888,並加入zuma組,全部的客戶端也執行一樣的操做
[root@nfs01 ~]# useradd zuma -u zuma -g 888
[root@nfs01 ~]# id zuma 查看創建的用戶及用戶組
uid=888(zuma) gid=888(zuma) groups=888(zuma)
5.1.3 配置/etc/exports配置文件並檢查
[root@nfs01 ~]# vim /etc/exports
[root@nfs01 ~]# cat /etc/exports
#share /data by oldboy for bingbing at 2018-3-12
/data 172.16.1.0/24(rw,sync)
#####
/data1 172.16.1.0/24(rw,sync,all_squash,anonuid=888,anongid=888)
5.1.4 建立共享目錄並檢查
[root@nfs01 ~]# mkdir -p /data1
[root@nfs01 ~]# ll -d /data1
drwxr-xr-x 2 root root 4096 Mar 12 20:00 /data1
5.1.5 給共享目錄服務權限並檢查
[root@nfs01 ~]# chown -R zuma.zuma /data1
[root@nfs01 ~]# ll -d /data1
drwxr-xr-x 2 zuma zuma 4096 Mar 12 20:00 /data1
5.1.6 從新加載NFS服務器
[root@nfs01 ~]# /etc/init.d/nfs reload
5.1.7確認NFS服務端的服務或配置是否OK
[root@nfs01 ~]# showmount -e localhost
Export list for localhost:
/data1 172.16.1.0/24
/data 172.16.1.0/24
至此NFS服務端配置完成
5.2 NFS客戶端的配置
5.2.1 創建用戶組zuma,並指定GID爲888,同服務端的操做步驟
[root@client1 ~]# groupadd zuma -g 888
5.2.2 創建用戶zuma,指定UID爲888,並加入zuma組,同服務端的操做步驟
[root@client1 ~]# useradd zuma -u 888 -g zuma
[root@client1 ~]# id zuma 查看
uid=888(zuma) gid=888(zuma) groups=888(zuma)
5.2.3 建立掛載目錄並檢查
[root@client1 ~]# mkdir /test
[root@client1 ~]# ll -d /test
drwxr-xr-x 2 root root 4096 Mar 14 10:18 /test
5.2.3 檢查是否啓動rpcbind服務
[root@client1 ~]# /etc/init.d/rpcbind status
rpcbind (pid 1204) is running... 說明正在運行
5.2.4 測試NFS服務端是否能夠掛載
[root@client1 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data1 172.16.1.0/24
/data 172.16.1.0/24 說明能夠掛載
5.2.5 掛載並進行查看
[root@client1 ~]# mount -t nfs 172.16.1.31:/data1 /test 掛載
[root@client1 ~]# df -h 查看
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 35M 146M 19% /boot
172.16.1.31:/data 8.8G 1.5G 6.9G 18% /mnt
172.16.1.31:/data1 8.8G 1.5G 6.9G 18% /test
5.2.6 在掛載目錄下建立測試文件
[root@client1 ~]# cd /test/
[root@client1 test]# touch test.txt
[root@client1 test]# ls
test.txt
5.2.7 在服務端共享目錄下進行查看
[root@nfs01 ~]# cd /data1
[root@nfs01 data1]# ls
test.txt
至此指定NFS共享用戶zuma共享/data1目錄的配置完成架構