1.1 什么是NFS
- NFS是Network File System的縮寫,中文意思是網絡文件系統,
它的主要功能是通過網絡(一般是局域網)讓不同的主機系統之間可以共享文件或目錄
- 互聯網中小型網站集群機構后端常用NFS進行數據共享,
如果大型網站,那么有可能還會用到更復雜的分布式文件系統,例如:Moosefs(mfs)、GlusterFS、FastDFS
說明:NFS服務只能應用在linux系統上,而FTP samba服務均都支持linux和windows
1.2 NFS服務應用
NFS是一個共享存儲服務,為什么要有共享存儲?
- 實現數據信息的共享
- 實現數據信息的一致
1.3 共享存儲的方式
- 硬件實現共享服務
IBM oracle EMC
- 軟件實現共享服務
NFS FTP samba
1.4 NFS共享系統原理
- 在NFS服務端創建共享目錄
- 通過mount網絡掛載,將NFS客戶端本地目錄掛載到NFS服務端共享目錄下
- NFS客戶端掛載目錄上創建、刪除、查看數據操作,等價於在服務端進行的創建刪除,查看操作
1.5 什么是RPC
注意:centos5中rpcbind'名稱為portmap
第2章 實踐操作
2.1 服務器規划:
進行服務器的規划
2.2 NFS服務端部署過程
2.2.1 第一個里程碑-確認軟件是否已經安裝,安裝NFS服務相關軟件
rpm -qa nfs-utils rpcbind
yum install -y nfs-utils rpcbind
2.2.2 第二個里程碑-編寫nfs配置文件
PS.nfs配置文件默認存在/etc/exports
#注釋
/data 172.16.1.0(rw,sync)
說明:
第一部分:/data --指定共享目錄信息
第二部分:172.16.1.0/24 --指定了一個網段信息,表示允許指定的網段主機掛載到我本地的共享目錄上
第三部分:(rw,sync) --表示定義共享參數信息,
2.2.3 第三個里程碑-創建共享目錄並設定權限
mkdir /data
chown -R nfsnobody.nfsnobody /data
ll -d /data
說明:nfsbody在軟件安裝時會自動創建,所以此用戶不在創建
2.2.4 第四個里程碑-啟動服務
首先啟動rpc服務
/etc/init.d/rpcbind start
查看服務相關信息
ps -ef|grep rpcbind
netstat -lnupt|grep rpcbind
rpcinfo -p localhost
其次啟動nfs服務
/etc/init.d/nfs start
2.2.5 查看服務相關信息
ps -ef|grep nfs ##查看nfs進程
netstat -inupt|grep nfs ##查看NFS端口
showmount -e 10.0.0.31 ##查詢NFS服務器上本地所有共享目錄
rpcinfo -p localhost ##查看NFS先RPC的注冊信息
2.3 NFS客戶端部署過程
2.3.1 第一個里程碑-確認軟件是否安裝
rpm -qa nfs-utils rpcbind
yum install -y nfs-utils rpcbind
注意:如果不安裝nfs軟件會發生如下問題:
- 客戶端無法使用showmount命令
- 客戶端無法識別nfs文件系統類型
2.3.2 第二個里程碑-啟動服務
首先啟動rpc服務
/etc/init.d/rpcbind start
查看服務相關信息
ps -ef|grep rpcbind
netstat -lnupt|grep rpcbind
rpcinfo -p localhost
其次啟動nfs服務
/etc/init.d/nfs start
PS. nfs軟件安裝后,不需要啟動nfs服務
rpcbind軟件安裝后,也可以不啟動rpcbind服務
2.3.3 查看服務相關信息
ps -ef|grep nfs ##查看nfs進程
netstat -inupt|grep nfs ##查看NFS端口
showmount -e 10.0.0.31 ##查詢NFS服務器上本地所有共享目錄
rpcinfo -p localhost ##查看NFS先RPC的注冊信息
2.3.4 第三個里程碑-檢查nfs服務端是否有可以進行共享掛載的目錄
showmount -e 172.16.1.31
2.3.5 第四個里程碑-進行nfs客戶端掛載
mount -t nfs 172.16.1.31:/data /mnt
2.3.6 第五個里程碑-檢查掛載信息
df -h
2.4 設置開機自啟動
chkconfig rpcbind on
chkconfig nfs on
第3章 NFS和RPC相關進程說明
服務或進程名 |
用途說明 |
rpcbind |
rpcbind的主進程 |
rpc-statd |
檢查數據存儲的一致性 |
rpc.rquotad |
磁盤配額進程 |
rpc.mountd |
權限管理驗證等 |
nfsd |
NFS服務的主進程 |
rpc.lockd |
用來鎖定文件 |
rpc.idmapd |
用戶映射或用戶壓縮 |
PS.相應進程名可以通過man 【進程名】查詢
第4章 /etc/exports的配置信息
官方配置手冊
/etc/exports文件配置格式為:
NFS共享目錄 NFS客戶端地址1(參數1,參數2,...) 客戶端地址2(參數1,參數2,...)
或
NFS共享目錄 NFS客戶端地址1(參數1,參數2,...)
4.1 NFS共享目錄
為NFS服務器段要共享的實際目錄,要用絕對路徑,如(/data)。注意共享目錄的本地權限,如果需要讀寫共享,一定要讓本地目錄可以被NFS客戶端的用戶(nfsnobody)讀寫
4.2 NFS客戶端地址
為NFS服務器段授權的可訪問共享目錄的NFS
客戶端地址,可以為單獨的IP地址或主機名、域名等,也可以為整個網段地址。還可以用*來匹配所有客戶端服務器。
客戶端地址 |
具體地址 |
說明 |
授權第一客戶端訪問NFS |
10.0.0.30 |
一般情況,生產環境中此配置不多 |
授權整個網段可訪問NFS |
10.0.0.0/24 |
其中24等同於255.255.255.0,指定網段為生產環境中最常見的配置。配置簡單,維護方便 |
授權整個網段可訪問NFS |
10.0.0.* |
指定網段的另外寫法(不推薦) |
授權某個域名客戶端訪問 |
nfs.test.com |
此方法生產環境中一般情況不常用 |
授權整個域名 |
*.test.com |
nfs.test.com |
4.3 權限參數集
- nfs權限:nfs配置的/etc/exports /data 172.16.1.0/21(rw)決定
- 本地文件系統權限決定drwxr-xr-x
4.4 生產環境常見樣例
常見格式說明 |
要共享的目錄客戶端IP地址或IP段 |
配置案例一 |
/data 10.0.0.0/24(rw,sync) 說明:允許客戶端讀寫,並且數據同步寫入到服務器端的磁盤里 注意:24和(之間不能有空格 |
配置案例二 |
/data 10.0.0.0/24(rw,sync,all_squash,anonuid=2000,anongid=2000) 說明:允許客戶端讀寫,並且數據同步寫到服務器段的磁盤里,並且指定客戶端的用戶UID和GID。早期生產環境的一種配置,適合多客戶端共享一個NFS服務單用戶,如果所有服務器的nfsnobody賬戶UID都是65534,則本例沒必要。早期centos5.5的系統默認情況下nfsnobody的UID不一定是65534,此時如果這些服務器共享一個NFS目錄,就會出現訪問權限問題 |
配置案例三 |
/home/test 10.0.0.0/24(ro) 說明:只讀共享 用途:例如在生產環境中,開發人員有查看生產服務器日志的需求,但又不希望給開發生產服務器的權限,那么就可以給開發提供從某個測試服務器NFS客戶端上查看某個生產服務器的日志目錄(NFS共享)的權限,當然這不是唯一的方法,例如可以把程序記錄的日志發送到測試服務器供開發查看或者通過收集日志等其他方式展現 |
第5章 NFS配置配置參數權限
- 查詢方法:man exporst
參數名稱 |
參數用途 |
rw |
Eead-write,表示可讀可寫權限 |
ro |
Eead-only,表示只讀權限 |
sync |
請求或者寫入數據時,數據同步寫入到NFS Server的硬盤后才返回。 優點,數據安全不會丟;缺點,性能比不啟用該參數要差 |
async |
寫入時數據會先寫到內存緩沖區,直到硬盤有空擋才會再寫入磁盤,這樣可以提升寫入效率。風險為若服務器宕機或不正常關機,會損失緩沖區中未寫入磁盤的數據(解決辦法:服務器主板電池或加UPS,AB(雙路電源)不間斷電源)! 停電--uos--發電機 |
all_squash |
不管訪問NFS Server共享目錄的用戶身份如何,他的權限都將被壓縮成匿名用戶,同時它的UID和GID都會變成nfsnobody賬號身份。在早期多個NFS客戶端同時讀寫NFS Server數據時,這個參數很有用 l 在生產中配置NFS的重要技巧:
|
no_root_squash |
保持root用戶不進行壓縮 訪問NFS Server共享目錄的用戶如果是root的話,它對該共享目錄具有root權限,這個配置原本是為無盤客戶端准備的。用戶應避免使用 |
root_squash |
如果訪問NFS Server共享目錄的用戶是root,則它的權限將被壓縮成匿名用戶,同時,它的UID和GID都會變成nfsnobody賬號身份 |
anonuid |
指定的是匿名用戶的uid(數字) 參數以anon*開頭即指anonymous匿名用戶,這個用戶的UID設置值通常為nfsnobody的UID值,當然也可以自行設置這個UID值。但是,UID必須存在於/etc/passwd中。在多NFS Cliens時,如多台web server共享一個NFS目錄,通過這個參數可以使得不同的NFS Clients寫入的數據對所有NFS Clients保持同樣的用戶權限,即為配置的匿名用戶UID對應用戶權限,這個參數很有用,一般默認即可 |
anongid |
指定的是匿名用戶組的gid(數字) 同anonuid,區別就是吧uid(用戶ID)換成gid(組id) |
5.1 anonuid和anongid
說明:修改映射后的默認用戶信息
實踐操作配置:修改NFS默認映射用戶(nfsbobody--www)
5.1.1 第一步:創建映射用戶(服務端和客戶端都創建,並且gid和uid保持一致)
客戶端創建用戶www:
[root@backup ~]# useradd www -u 666
[root@backup ~]# id www
uid=666(www) gid=666(www) groups=666(www)
服務端創建用戶www
[root@nfs01 ~]# useradd www -u 666
[root@nfs01 ~]# id www
uid=666(www) gid=666(www) groups=666(www)
5.1.2 第二步:服務端進行nfs文件配置並重啟,以及修改共享目錄權限
[root@nfs01 ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@nfs01 ~]# /etc/init.d/nfs reload
[root@nfs01 ~]# chown -R www.www /data
[root@nfs01 ~]# ll -d /data
drwxr-xr-x 2 www www 4096 Oct 14 13:31 /data
5.1.3 第三步:客戶端重新掛載:
[root@backup ~]# umount /mnt
[root@backup ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 190M 34M 146M 19% /boot
[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@backup ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 190M 34M 146M 19% /boot
172.16.1.31:/data 8.8G 1.5G 6.9G 18% /mnt
5.1.4 第四步,客戶端進行測試
測試root用戶映射:
[root@backup ~]# touch /mnt/user_root.txt
[root@backup ~]# ll /mnt
total 0
-rw-r--r-- 1 www www 0 Oct 14 2017 user_root.txt
測試普通用戶:
[www@backup ~]$ touch /mnt/user_www.txt
[www@backup ~]$ ll /mnt
total 0
-rw-r--r-- 1 www www 0 Oct 14 2017 user_root.txt
-rw-rw-r-- 1 www www 0 Oct 14 2017 user_www.txt
5.2 nfs默認配置文件
[root@nfs01 ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,anonuid=666,anongid=666,sec=sys,rw,root_squash,all_squash)
注意:只是查看作用,影響配置的文件是/etc/exports
第6章 實例
6.1 實例一:共享不同的兩個目錄,分別賦予讀和寫權限
服務端要求:
nfs服務器172.16.1.31,共享下面兩個目錄
/data/w 要求的權限可讀寫,同步數據,所有用戶都壓縮為匿名用戶
/data/r 要求的權限為只讀,同步數據,所有用戶都壓縮為匿名用戶
客戶端要求
backup服務器 把NFS服務器的/data/r掛載到/data/r
web01服務器 把NFS服務器的/data/w掛載到/data/w
6.1.1 第一步:創建目錄環境
nfs服務端:
[root@nfs01 ~]# mkdir -p /data/{r,w}
[root@nfs01 ~]# ll -d /data/{r,w}
drwxr-xr-x 2 root root 4096 Oct 14 20:28 /data/r
drwxr-xr-x 2 root root 4096 Oct 14 20:28 /data/w
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data/{r,w}
[root@nfs01 ~]# ll -d /data/{r,w}
drwxr-xr-x 2 nfsnobody nfsnobody 4096 Oct 14 20:28 /data/r
drwxr-xr-x 2 nfsnobody nfsnobody 4096 Oct 14 20:28 /data/w
backup客戶端:
[root@backup ~]# mkdir -p /data/r
[root@backup ~]# ll -d /data/r
drwxr-xr-x 2 root root 4096 Oct 14 20:40 /data/r
web客戶端:
[root@web01 ~]# mkdir -p /data/w
[root@web01 ~]# ll -d /data/w
drwxr-xr-x 2 root root 4096 Oct 14 20:39 /data/w
6.1.2 第二步:編輯nfs服務端配置文件
[root@nfs01 ~]# vim /etc/exports
/data/w 172.16.1.0/24(rw,sync,all_squash)
/data/r 172.16.1.0/24(ro,sync,all_squash)
注意:在配置共享目錄時需要考慮到子目錄會繼承上一級目錄的權限,因此盡量讓共享目錄之間沒有繼承關系
6.1.3 第三步:重新加載nfs服務
[root@nfs01 ~]# /etc/init.d/nfs reload
6.1.4 第四不:客戶端重新掛載
backup客戶端:
[root@backup ~]# mount -t nfs 172.16.1.31:/data/r /data/r/
[root@backup ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 190M 34M 146M 19% /boot
172.16.1.31:/data/r 8.8G 1.5G 6.9G 18% /data/r
web01客戶端:
[root@web01 ~]# mount -t nfs 172.16.1.31:/data/w /data/w
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 190M 34M 146M 19% /boot
172.16.1.31:/data/w 8.8G 1.5G 6.9G 18% /data/w
6.1.5 第五步測試
backup服務端:
[root@backup /]# touch /data/r/.txt
touch: cannot touch `/data/r/.txt': Read-only file system
web客戶端:
[root@web01 /]# touch /data/w/.txt
[root@web01 /]# ll /data/w/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 14 21:09 ol
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 14 2017 .txt
6.1.6 第六步-客戶端開機自動掛載
方法一:把掛載命令命令寫入到/etc/rc.local
##backup客戶端
mount -t nfs 172.16.1.31:/data/r /data/r
##web客戶端
mount -t nfs 172.16.1.31:/data/w /data/w
方法二:寫入/etc/fstab(不推薦)
##backup客戶端
172.16.1.31:/data/r /data/r nfs defaults 0 0
##web客戶端
172.16.1.31:/data/r /data/r nfs defaults 0 0
注意:在生產環境中,對於共享的NFS目錄,一般不會配置到/etc/fstab里。在客戶端主機重啟時因為啟動順序的原因該配置文件會在網卡配置文件之前啟動,就會導致客戶機無法掛載。一般是通過把mount -t nfs命令放到rc.local中來實現開機自動掛載NFS。或者使用netfs服務
/etc/init.d/netfs start
chkconfig netfs on
chkconfig --list netfs
第7章 重點梳理
當多個NFS客戶端訪問服務器端的讀寫文件時,需要具有以下幾個權限
l NFS服務器實際要共享的NFS目錄權限具有可寫入w的權限,即服務器段本地目錄安全權限
l NFS服務器/etc/exports設置需要開放可寫入的權限,即服務器端的共享權限
l 每台機器對應存在和NFS默認配置UID的相同UID=65534的nfsnobody用戶(確保所有客戶端的訪問權限統一,否則每個機器需要同時建立相同UID的用戶,並覆蓋NFS的默認用戶配置)
只有滿足上述三個條件,多個NFS客戶端才能具有查看、修改、刪除其他任意NFS客戶端上傳文件的權限,這在大規模的集群環境中作為集群共享存儲時尤為重要
7.1 nfs常用路徑
NFS重要路徑 |
說明 |
/etc/exports |
NFS服務主配置文件,配置NFS具體共享服務的地點,默認內容為空,以行為單位 |
/usr/sbin/exports |
NFS服務的管理命令 |
/usr/sbin/showmount |
常用來在客戶端查看NFS配置及掛載結果的命令 |
/var/lib/nfs/etab |
NFS服務端的配置信息查詢文件 NFS配置文件的完整參數設定的文件(有很多沒有配置但是默認就有的NFS參數) |
/proc/mounts |
存放客戶端掛載參數(配置讀寫權限時,不管服務端還是客戶端,只要有一方權限為ro,則最終目錄為只讀權限) |
/var/lib/nfs/xtab(歷史) |
適合centos5.x記錄曾經掛載過的NFS客戶端的信息,包括IP地址等,centos 6.8由此文件,但是內容為空 |
/var/lib/nfs/rmtab(歷史) |
客戶端訪問服務器exports的信息列表 |
7.2 卸載目錄的方法
7.2.1 退出掛載點,進行卸載
cd ..
umount /data/r
7.2.2 不退出掛載點,強制卸載
umount -lf /data/w
第8章 NFS客戶端掛載命令
8.1 NFS客戶端掛載命令格式
掛載命令 |
掛載的格式類型 |
指定掛載參數 |
NFS服務端提供的共享目錄 |
NFS客戶端的掛載點 |
mount |
-t nfs |
-o |
172.16.1.31:/data |
/mnt |
注意:該命令在客戶端執行 |
8.2 客戶端掛載過程:
8.2.1 第一步:測試是否有可以掛載的共享目錄
showmount -e 172.16.1.31
8.2.2 第二步:進行目錄掛載
mount -t nfs 172.16.1.31:/data /mnt
8.2.3 第三步:檢查掛載結果
df -h
第9章 掛載時常見錯誤
9.1 常見錯誤
第一個報錯:
[root@nfs-client1 ~]# showmount -e 10.0.0.7 <- 恭喜•各位,這里遇到了故障
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
說明:防火牆開啟造成的
第二個報錯:
[root@nfs-client1 ~]# showmount -e 10.0.0.7
clnt_create: RPC: Program not registered
說明:nfs服務沒有啟動;nfs與rpc服務啟動順序不對
9.2 排查過程
1)從客戶端ping NFS服務器端IP,目的是看物理鏈路是否通。
[root@nfs-client1 ~]# ping 10.0.0.7
PING 10.0.0.7 (10.0.0.7) 56(84) bytes of data.
64 bytes from 10.0.0.7: icmp_seq=1 ttl=64 time=0.256 ms
64 bytes from 10.0.0.7: icmp_seq=2 ttl=64 time=0.233 ms
2)從客戶端telnet服務器端IP端口檢查,用於測試NFS服務(RPC服務)是否通。
[root@nfs-client1 ~]# telnet 10.0.0.7 111
Trying 10.0.0.7...
telnet: connect to address 10.0.0.7: No route to host <- 防火請攔截了
如果不通,再通過去NFS服務器端執行如下命令看看111端口是不是開了!
3) 測試是否有可以掛載的共享目錄
showmount -e 172.16.1.31
說明:此步測試失敗,表示nfs服務配置有問題
第10章 如何設置客戶端自動掛載
方法一:將掛載命令放入/etc/rc.local文件中
echo 'mount -t nfs 172.16.1.31:/data /mnt' >>/etc/rc.local
方法二:編寫配置/etc/fstab文件
172.16.1.31:/data/r /data/r nfs defaults 0 0
注意:在生產環境中,對於共享的NFS目錄,一般不會配置到/etc/fstab里。在客戶端主機重啟時因為啟動順序的原因該配置文件會在網卡配置文件之前啟動,就會導致客戶機無法掛載。一般是通過把mount -t nfs命令放到rc.local中來實現開機自動掛載NFS。或者使用netfs服務
/etc/init.d/netfs start
chkconfig netfs on
chkconfig --list netfs
:利用/etc/fstab編寫自動掛載功能時,fstab文件會在網絡服務啟動前進行加載
第11章 常見客戶端的掛載參數
man nfs
參數 |
參數功能 |
默認參數 |
fg bg |
l 當在客戶端執行掛載時,可選是在前台(fg)還是在后台(bg)執行 l 若在前台執行,則mount會持續嘗試掛載,直到成功或掛載時間超時為止 l 若在后台執行,則mount會在后台持續多次進行mount,而不會影響到前台的其他程序操作 l 如果網絡聯機不穩定,或是服務器常常需要開關機,建議使用bg比較穩妥。 |
fg |
soft hard |
l 當NFS Client以soft掛載server時,若網絡或server出現問題,造成client和server無法傳輸資料,client就會一直嘗試,直到timeout后顯示錯誤才停止。若使用soft mount的話,可能會在timeout出現時造成數據丟失,故一般不采用 l 若使用hard模式掛載硬盤時,剛好與soft相反,此時client會一直嘗試連接到server,若server有回應就繼續剛才的操作,若沒有回應NFS client會一直嘗試,此時無法umonut或kill。所以常常會配合intr使用,這是默認值。 |
hard |
intr |
l 當使用hard掛載的資源timeout后,若有指定intr參數,可以在timeout后把它中斷掉,這避免出問題時系統整個被NFS鎖死,建議使用intr |
無 |
rsize wsize |
l 讀出(rsize)與寫入(wsize)的區塊大小(block size),這個設置值可以影響客戶端與服務端傳輸數據的緩沖存儲量,一般來說,如果在局域網(LAN),並且客戶端與服務器端都具有足夠的內存,這個值可以設置大一點,提升緩沖區塊將提升NFS文件系統的傳輸能力。但設置的值也不要太大,最好以網絡能夠傳輸的最大值為限 |
centos5(默認): rsize=1024 wsize=1024 centos6(默認): rsize=131072 wsize=131072 |
proto=tcp |
l 使用tcp協議來傳輸資料,在LAN中會有比較好的性能。若要跨越internet的話,使用proto=tcp會多些,而且傳輸的數據會有比較好的糾錯能力 |
proto=tcp |
第12章 常見服務端掛載參數
man mount
參數 |
參數意義 |
系統默認參數 |
suid nosuid |
l 當掛載的文件系統上有任何SUID的程序,只要使用nosuid就能夠取消設置SUID的功能 |
suid |
rw ro |
l 可以制定文件系統是只讀(ro)或是可寫(rw) |
rw |
dev nodev |
l 是否可以保留裝置文件的特殊功能?一般來說只有/dev才會有特殊的裝置,因此可以選擇nodev |
dev |
exec noexec |
l 是否具有執行文件的權限?如果想要掛載的僅是普通資源數據區(如:圖片、附件)那么可以選擇noexec |
exec |
user nouser |
l 是否允許普通用戶擁有文件的掛載與卸載功能?如果想要保護文件系統,最好不要為普通用戶提供掛載和卸載功能 |
nouesr |
auto noauto |
l 這個auto指的是“mount -a”時會不會掛載的項目,如果不需要這個分區隨時被掛載,可以設置為noauto l 備注:mount -a==/etc/init.d/netfs start |
auto |
第13章 mount掛載參數參考(相關參數請參照上文中表或man幫助)
13.1 禁止更新目錄及文件時間戳,命令如下
測試:
mount -t nfs -o noatime.nodiratime 10.0.0.1:/data /mnt
寫入/etc/fstab配置文件
10.0.0.1:/data /mnt nfs noatime,nodiratime 0 0
13.2 安全加優化的掛載方式
測試:
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 10.0.0.1:/data /mnt
寫入/etc/fstab配置文件:
10.0.0.0:/data /mnt nfs nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 0 0
13.3 NFS網絡文件系統優化掛載的參數建議
測試:
mount -t nfs -o natime,nodiratime,nosuid,noexec,nodev,rsize=131072,wsize=131072 10.0.0.1:/data /mnt
寫入/etc/fatab配置文件
10.0.0.1:/data /mnt nfs natime,nodiratime,nosuid,noexec,nodev,rsize=131072,wsize=131072 0 0
第14章 NFS服務的優點和缺陷
14.1 優點
- 簡單、易上手、容易管理
- NFS文件系統內數據是在文件系統上的、即數據是可見的
- 部署快速、維護簡單方便、且可控、滿足需求是最好的
- 可靠、從軟件層面上看,數據可靠性高。經久耐用。數據是在文件系統上的
- 服務非常穩定
- 存在單點故障,如果NFS Server宕機了,所有客戶端都不能訪問共享目錄,這個在后期會通過負載均衡及高可用方案彌補
- 在大數據高並發的場合,NFS效率,性能有限(2千萬/日一下PV的網站不是瓶頸,除非網站架構設計太差)
- 客戶端認證是基於IP和主機名的,權限要根據ID識別,安全性一般(用於內網則問題不大)
- NFS數據是明文的,NFS本身不對數據完整性進行測試
- 多台客戶機掛載一個NFS服務器時,連接管理維護麻煩(耦合度高),尤其當NFS服務器端出問題后,所有NFS客戶端都處於掛掉狀態(測試環境可使用autofs自動掛載解決,正式環境可修復NFS服務或強制卸載)
- 涉及了同步(實時等待)和異步(解耦)的概念,NFS服務器端和客戶端相對來說就是耦合度有些高,網站程序也是一樣,盡量不要耦合度太高,系統及程序架構師的重要職責就是為程序及架構解耦,讓網站的擴展性變的更好
14.2 缺陷
14.3 應用建議
對於大中小網站(參考點2000萬/日PV以下)線上應用,都有用武之地、門戶網站也會有應用,生產場景應該多將數據的訪問往前推,即盡量將靜態存儲里的資源通過CDN或緩存服務器提供服務,如果沒有緩存服務或架構不好,存儲服務器數量再多也是扛不住壓力的,而且用戶體驗也很差