NFS介紹
什么是NFS?
NFS是Network File System的縮寫(xiě),即網(wǎng)絡(luò)文件系統(tǒng)。它的主要功能是通過(guò)網(wǎng)絡(luò)(一般是局域網(wǎng))讓不同的主機(jī)系統(tǒng)之間可以共享文件或目錄。NFS客戶端(一般為應(yīng)用服務(wù)器,例如web)可以通過(guò)掛載(mount)的方式將NFS服務(wù)端共享的數(shù)據(jù)目錄掛載到NFS客戶端本地系統(tǒng)中(就是某一個(gè)掛載點(diǎn)下)。從NFS客戶端的機(jī)器本地看,NFS服務(wù)端共享的目錄就好像是客戶自己的磁盤(pán)分區(qū)或者目錄一樣,而實(shí)際上確是遠(yuǎn)端的NFS服務(wù)端的目錄。
NFS網(wǎng)絡(luò)文件系統(tǒng)類(lèi)似windows系統(tǒng)的網(wǎng)絡(luò)共享、安全功能、網(wǎng)絡(luò)驅(qū)動(dòng)器映射,這也和linux系統(tǒng)里的samba服務(wù)類(lèi)似。應(yīng)用于互聯(lián)網(wǎng)中小型集群架構(gòu)后端作為數(shù)據(jù)共享,如果是大型網(wǎng)站,那么有可能還會(huì)用到更復(fù)雜的分布式文件系統(tǒng),例如Moosefs(mfs)、glusterfs、FastDFS。
NFS在企業(yè)中的應(yīng)用場(chǎng)景
在企業(yè)集群架構(gòu)的工作場(chǎng)景中,NFS網(wǎng)絡(luò)文件系統(tǒng)一般被用來(lái)存儲(chǔ)共享視頻、圖片、附件等靜態(tài)資源文件。一般是把網(wǎng)站用戶上傳的文件都放在NFS共享里,例如,BBS產(chǎn)品的圖片、附件、頭像,注意網(wǎng)站BBS程序不要放在NFS共享里,然后前端所有的節(jié)點(diǎn)訪問(wèn)存儲(chǔ)服務(wù)之一,特別是中小網(wǎng)站公司應(yīng)用頻率更高。
NFS流程圖
NFS原理圖
NFS的RPC服務(wù),在CentOS5.x下名稱(chēng)為portmap,在CentOS6.x下名稱(chēng)為rpcbind。
NFS服務(wù)端部署環(huán)境準(zhǔn)備
NFS服務(wù)部署服務(wù)器準(zhǔn)備
| 服務(wù)器系統(tǒng) | 角色 | ip |
| CentOS 6.6 x86_64 | NFS服務(wù)端(nfs-server) | 自定義 |
| CentOS 6.6 x86_64 | NFS客戶端(nfs-client1) | 自定義 |
| CentOS 6.6 x86_64 | NFS客戶端(nfs-client2) | 自定義 |
NFS SERVER端設(shè)置
NFS軟件列表
部署NFS服務(wù),需要安裝下面的軟件包:
nfs-utils:這個(gè)NFS服務(wù)主程序包括rpc.nfsd、rpc.mountd兩個(gè)daemons和相關(guān)文檔說(shuō)明及執(zhí)行命令文件等。
rpcbind:CentOS 6.x下面RPC的主程序(CentOS 5.x下面的portmap)
NFS可以被視為一個(gè)RPC程序,在啟動(dòng)任何一個(gè)RPC程序之前,需要做好端口映射工作,這個(gè)映射工作就是由rpcbind服務(wù)來(lái)完成的。因此,必須先啟動(dòng)rpcbind服務(wù)。
CentOS 6.6默認(rèn)沒(méi)有安裝NFS軟件包(CentOS 5默認(rèn)已經(jīng)安裝)。
[root@web-lnmp01 ~]# yum install nfs-utils rpcbind -y [root@web-lamp01 ~]# rpm -qa nfs-utils rpcbind [root@web-lnmp01 ~]# rpm -qa nfs-utils rpcbind nfs-utils-1.2.3-70.el6_8.2.x86_64 #這個(gè)包在5.8為portmap rpcbind-0.2.0-12.el6.x86_64 出現(xiàn)兩個(gè)軟件包,表示NFS服務(wù)端軟件安裝完畢。
啟動(dòng)NFS相關(guān)服務(wù)
[root@nfs-server ~]# /etc/init.d/rpcbind status #查看rpcbind服務(wù) rpcbind is stopped [root@nfs-server ~]# /etc/init.d/rpcbind start #啟動(dòng)rpcbind服務(wù) Starting rpcbind: [ OK ] [root@nfs-server ~]# /etc/init.d/rpcbind status rpcbind (pid 26101) is running... [root@nfs-server ~]# lsof -i:111 #rpcbind服務(wù)端口111 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 26101 rpc 6u IPv4 28829 0t0 UDP *:sunrpc rpcbind 26101 rpc 8u IPv4 28832 0t0 TCP *:sunrpc (LISTEN) rpcbind 26101 rpc 9u IPv6 28834 0t0 UDP *:sunrpc rpcbind 26101 rpc 11u IPv6 28837 0t0 TCP *:sunrpc (LISTEN) [root@nfs-server ~]# netstat -lntup|grep rpcbind tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 26101/rpcbind tcp 0 0 :::111 :::* LISTEN 26101/rpcbind udp 0 0 0.0.0.0:836 0.0.0.0:* 26101/rpcbind udp 0 0 0.0.0.0:111 0.0.0.0:* 26101/rpcbind udp 0 0 :::836 :::* 26101/rpcbind udp 0 0 :::111 :::* 26101/rpcbind [root@nfs-server ~]# chkconfig --list|grep rpcbind rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@nfs-server ~]# 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 [root@nfs-server ~]# /etc/init.d/nfs status #查看nfs服務(wù) rpc.svcgssd is stopped rpc.mountd is stopped nfsd is stopped rpc.rquotad is stopped [root@nfs-server ~]# /etc/init.d/nfs start #啟動(dòng)nfs服務(wù) Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS mountd: [ OK ] Starting NFS daemon: [ OK ] Starting RPC idmapd: [ OK ] [root@nfs-server ~]# /etc/init.d/nfs status rpc.svcgssd is stopped rpc.mountd (pid 26225) is running... nfsd (pid 26241 26240 26239 26238 26237 26236 26235 26234) is running... rpc.rquotad (pid 26220) is running... [root@nfs-server ~]# netstat -lntup|grep 2049 #nfs服務(wù)端口2049 tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN - tcp 0 0 :::2049 :::* LISTEN - udp 0 0 0.0.0.0:2049 0.0.0.0:* - udp 0 0 :::2049 :::* - [root@nfs-server ~]# 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 56844 mountd ????100005 1 tcp 49326 mountd ????100005 2 udp 47287 mountd ????100005 2 tcp 47817 mountd ????100005 3 udp 56317 mountd ????100005 3 tcp 47741 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 45085 nlockmgr ????100021 3 udp 45085 nlockmgr ????100021 4 udp 45085 nlockmgr ????100021 1 tcp 42582 nlockmgr ????100021 3 tcp 42582 nlockmgr ????100021 4 tcp 42582 nlockmgr [root@nfs-server ~]# chkconfig --list nfs nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@nfs-server ~]# chkconfig nfs on #nfs添加開(kāi)機(jī)自啟動(dòng) [root@nfs-server ~]# chkconfig --list nfs nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@nfs-server ~]# less /etc/init.d/rpcbind #! /bin/sh # # rpcbind Start/Stop RPCbind # # chkconfig: 2345 13 87 #開(kāi)機(jī)啟動(dòng)順序 [root@nfs-server ~]# less /etc/init.d/nfs #!/bin/sh # # nfs This shell script takes care of starting and stopping # the NFS services. # # chkconfig: - 30 60 #開(kāi)機(jī)啟動(dòng)順序 工作中推薦使用/etc/rc.local進(jìn)行服務(wù)的啟動(dòng),不推薦使用chkconfig,目的是為了方便管理。
[root@nfs-server ~]# ps -ef|egrep "rpc|nfs" rpc 26101 1 0 09:45 ? 00:00:00 rpcbind root 26211 2 0 09:52 ? 00:00:00 [rpciod/0] root 26220 1 0 09:52 ? 00:00:00 rpc.rquotad #磁盤(pán)配額進(jìn)程 root 26225 1 0 09:52 ? 00:00:00 rpc.mountd #權(quán)限管理驗(yàn)證 root 26232 2 0 09:52 ? 00:00:00 [nfsd4] root 26233 2 0 09:52 ? 00:00:00 [nfsd4_callbacks] root 26234 2 0 09:52 ? 00:00:00 [nfsd] #NFS主進(jìn)程 root 26235 2 0 09:52 ? 00:00:00 [nfsd] root 26236 2 0 09:52 ? 00:00:00 [nfsd] root 26237 2 0 09:52 ? 00:00:00 [nfsd] root 26238 2 0 09:52 ? 00:00:00 [nfsd] root 26239 2 0 09:52 ? 00:00:00 [nfsd] root 26240 2 0 09:52 ? 00:00:00 [nfsd] root 26241 2 0 09:52 ? 00:00:00 [nfsd] root 26268 1 0 09:52 ? 00:00:00 rpc.idmapd root 26418 1023 0 10:41 pts/0 00:00:00 egrep rpc|nfs 配置NFS服務(wù)端
NFS服務(wù)的默認(rèn)配置文件路徑為:/etc/exports,并且默認(rèn)是空的。
[root@nfs-server ~]# ls -l /etc/exports -rw-r--r--. 1 root root 0 Jan 12 2010 /etc/exports exports配置文件格式
/etc/exports文件配置格式
NFS 共享目錄????NFS客戶端地址1(參數(shù)1,參數(shù)2,參數(shù)3…) 客戶端地址1(參數(shù)1,參數(shù)2,參數(shù)3…)
NFS 共享目錄????NFS客戶端地址(參數(shù)1,參數(shù)2…)
[root@nfs-server ~]# cat /etc/exports /data 192.168.31.*(rw,sync) [root@nfs-server ~]# /etc/init.d/nfs reload exportfs: Failed to stat /data: No such file or directory #/data目錄不存在 [root@nfs-server ~]# mkdir /data [root@nfs-server ~]# /etc/init.d/nfs reload #exports -r ?
[root@nfs-server ~]# showmount -e 127.0.0.1 Export list for 127.0.0.1: /data 192.168.31.* #共享目錄 ?
[root@nfs-server ~]# mount -t nfs 192.168.31.129:/data /mnt #掛載 [root@nfs-server ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 7.1G 1.5G 5.3G 21% / tmpfs 497M 0 497M 0% /dev/shm /dev/sda1 190M 27M 153M 15% /boot 192.168.31.129:/data 7.1G 1.5G 5.3G 21% /mnt #掛載成功 ?
[root@nfs-server ~]# touch /data/oldboy.txt [root@nfs-server ~]# ls /mnt oldboy.txt [root@nfs-server ~]# touch /mnt/test.txt touch: cannot touch `/mnt/test.txt': Permission denied #無(wú)權(quán)限 客戶端配置
啟動(dòng)rpcbind
[root@web-lamp01 ~]# /etc/init.d/rpcbind start Starting rpcbind: [ OK ] [root@web-lamp01 ~]# /etc/init.d/rpcbind status rpcbind (pid 26272) is running... [root@web-lamp01 ~]# cat /etc/rc.local #啟動(dòng)rpcbind /etc/init.d/rpcbind start ?
[root@web-lamp01 ~]# showmount -e 192.168.31.129 Export list for 192.168.31.129: /data 192.168.31.* [root@web-lamp01 ~]# mount -t nfs 192.168.31.129:/data /mnt [root@web-lamp01 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 7.1G 1.5G 5.3G 21% / tmpfs 497M 0 497M 0% /dev/shm /dev/sda1 190M 27M 153M 16% /boot 192.168.31.129:/data 7.1G 1.5G 5.3G 21% /mnt [root@web-lamp01 ~]# ls /mnt oldboy.txt ?
在服務(wù)端刪除/data中的文件/oldboy.txt,然后在客戶端進(jìn)行查看,文件已經(jīng)不存在。
無(wú)法寫(xiě)入是因?yàn)闄?quán)限的問(wèn)題,解決辦法如下。
[root@nfs-server ~]# cat /var/lib/nfs/etab /data 192.168.31.*(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash) #nfs的由65534進(jìn)行管理 [root@nfs-server ~]# cat /etc/exports /data 192.168.31.*(rw,sync) [root@nfs-server ~]# ls -ld /data drwxr-xr-x 2 root root 4096 Jan 19 11:36 /data #/data的屬主是root [root@nfs-server ~]# grep 65534 /etc/passwd #查看65534的用戶名 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin [root@nfs-server ~]# chown -R nfsnobody /data #更改/data屬主 [root@nfs-server ~]# ls -ld /data drwxr-xr-x 2 nfsnobody root 4096 Jan 19 11:36 /data ?
[root@nfs-server ~]# cd /mnt [root@nfs-server mnt]# pwd /mnt [root@nfs-server mnt]# ls [root@nfs-server mnt]# touch test.txt #服務(wù)端創(chuàng)建 [root@nfs-server mnt]# ls test.txt [root@web-lamp01 mnt]# touch test2.txt #客戶端創(chuàng)建 [root@web-lamp01 mnt]# ls test2.txt test.txt ?
客戶端設(shè)置開(kāi)機(jī)自動(dòng)掛載
[root@web-lamp01 mnt]# cat /etc/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local #啟動(dòng)rpcbind /etc/init.d/rpcbind start #掛載nfs /data /bin/mount -t nfs 192.168.31.129:/data /mnt 同樣配置另外一臺(tái)客戶端。
故障排查
1、首先確認(rèn)NFS服務(wù)端配置和服務(wù)是否正常。
[root@nfs-server ~]# showmount -e localhost Export list for localhost: /data 192.168.31.* 最好服務(wù)端自己掛載自己看看是否成功。
[root@nfs-server ~]# mount -t nfs 192.168.31.129:/data /mnt [root@nfs-server ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 7.1G 1.4G 5.4G 21% / tmpfs 497M 0 497M 0% /dev/shm /dev/sda1 190M 27M 153M 15% /boot 192.168.31.129:/data 7.1G 1.4G 5.4G 21% /mnt 這一步主要是檢查服務(wù)端的NFS服務(wù)是不是正常的。
2、確認(rèn)NFS客戶端showmount是否正常。
[root@web-lamp01 ~]# showmount -e 192.168.31.129 Export list for 192.168.31.129: /data 192.168.31.* 如果有問(wèn)題進(jìn)行下面排查。
1)ping NFS服務(wù)端IP檢查
[root@web-lamp01 ~]# ping 192.168.31.129 PING 192.168.31.129 (192.168.31.129) 56(84) bytes of data. 64 bytes from 192.168.31.129: icmp_seq=1 ttl=64 time=1.40 ms 64 bytes from 192.168.31.129: icmp_seq=2 ttl=64 time=0.392 ms 2)telnet NFS服務(wù)端IP端口檢查
[root@web-lamp01 ~]# telnet 192.168.31.129 111 Trying 192.168.31.129... Connected to 192.168.31.129. Escape character is '^]'. 如果出現(xiàn)No route to host很有可能是服務(wù)端防火墻引起。
此外,還需要注意服務(wù)端RPC服務(wù)啟動(dòng)順序問(wèn)題。
/etc/init.d/rpcbind start
rpcinfo -p localhost
/etc/init.d/nfs start
rpcinfo -p localhost
NFS配置參數(shù)權(quán)限
NFS配置文件權(quán)限參數(shù)說(shuō)明
NFS服務(wù)器端的權(quán)限設(shè)置,即/etc/exports文件配置格式中小括號(hào)的參數(shù)。
[root@nfs-server ~]# cat /etc/exports /data 192.168.31.*(rw,sync) | 參數(shù)名稱(chēng) | 參數(shù)用途 |
| rw | read-write,表示可讀寫(xiě)權(quán)限* |
| ro | read-only,表示只讀權(quán)限 |
| sync | 請(qǐng)求或?qū)懭霐?shù)據(jù)時(shí),數(shù)據(jù)同步寫(xiě)入到NFS Server的硬盤(pán)后才返回。數(shù)據(jù)安全不會(huì)丟,缺點(diǎn),性能下降。 |
| async | 請(qǐng)求或?qū)懭霐?shù)據(jù)是,先返回請(qǐng)求,再將數(shù)據(jù)寫(xiě)入到內(nèi)存緩存和硬盤(pán)中,即異步寫(xiě)入數(shù)據(jù)。此參數(shù)可以提升NFS性能,但是會(huì)降低數(shù)據(jù)的安全。因此,一般情況下建議不用,如果NFS處于瓶頸狀態(tài),并且運(yùn)行數(shù)據(jù)丟失的話可以打開(kāi)此參數(shù)提升NFS性能。寫(xiě)入時(shí)數(shù)據(jù)會(huì)先寫(xiě)到內(nèi)存緩沖區(qū),等硬盤(pán)有空檔再寫(xiě)入磁盤(pán),這樣可以提升寫(xiě)入效率,風(fēng)險(xiǎn)若服務(wù)器宕機(jī)或不正常關(guān)機(jī),會(huì)損失緩沖區(qū)中未寫(xiě)入磁盤(pán)的數(shù)據(jù)(解決辦法:服務(wù)器主板電池或加UPS不間斷電源)。(電商秒殺是異步) |
| no_root_squash | 訪問(wèn)NFS Server共享目錄的用戶如果是root的話,它對(duì)該共享目錄具有root權(quán)限。這個(gè)配置原本為無(wú)盤(pán)客戶端準(zhǔn)備的。用戶應(yīng)避免使用。 |
| root_squash | 對(duì)于訪問(wèn)NFS Server共享目錄的用戶如果是root的話,則它的權(quán)限將被壓縮成匿名用戶,同時(shí)它的UID和GID通常會(huì)變成nfsnobody賬號(hào)身份 |
| all_squash | 不管訪問(wèn)NFS Server共享目錄的用戶身份如何,它的權(quán)限都被壓縮成匿名用戶,同時(shí)它的UID和GID都會(huì)變成nfsnobody賬號(hào)身份。在早期多個(gè)NFS客戶端同時(shí)讀寫(xiě)NFS Server數(shù)據(jù)時(shí),這個(gè)參數(shù)很有用。* |
| anonuid | 參數(shù)以anon*開(kāi)頭即值anonymous匿名用戶,這個(gè)用戶的UID設(shè)置值通常為nfsnobody的UID值,當(dāng)然我們也可以自行設(shè)置這個(gè)UID值。但是,UID必須存在于/etc/passwd中。在多個(gè)NFS Clients時(shí),如多臺(tái)web server共享一個(gè)NFS目錄時(shí),通過(guò)這個(gè)參數(shù)可以使得不同的NFS Clients寫(xiě)入的數(shù)據(jù)對(duì)所有NFS Clients保持同樣的用戶權(quán)限,即為配置的匿名UID對(duì)應(yīng)用戶權(quán)限,這個(gè)參數(shù)很有用。* |
| anongid | 同anonuid,區(qū)別是把uid(用戶id)換成gid(組id)。 |
推薦使用配置。
[root@nfs-server ~]# cat /etc/exports /data 192.168.31.0/24(rw,sync,all_squash) [root@nfs-server ~]# exportfs -rv exporting 192.168.31.0/24:/data NFS服務(wù)總結(jié)
使得NFS Client端可寫(xiě)的服務(wù)端配置條件
當(dāng)多個(gè)NFS客戶端以NFS方式寫(xiě)入修改服務(wù)器端的文件系統(tǒng)時(shí),需要具有以下權(quán)限:
1、NFS服務(wù)器/etc/exports設(shè)置需要開(kāi)放可寫(xiě)入的權(quán)限,即服務(wù)端的共享權(quán)限。
2、NFS服務(wù)器實(shí)際要共享的NFS目錄權(quán)限具有可寫(xiě)入w的權(quán)限,即服務(wù)端本地目錄的安全權(quán)限。
3、每臺(tái)機(jī)器都對(duì)應(yīng)存在和nfs默認(rèn)配置UID的相同UID65534的nfsnobody用戶(確保所有客戶端的訪問(wèn)權(quán)限統(tǒng)一,否則每個(gè)機(jī)器需要同時(shí)建立相同UID的用戶,并覆蓋NFS的默認(rèn)配置)。
當(dāng)滿足三個(gè)條件,多個(gè)NFS客戶端才能具有互相寫(xiě)入,互相修改其他主機(jī)寫(xiě)入文件的權(quán)限。
NFS服務(wù)重要文件說(shuō)明
/etc/exports
NFS服務(wù)主配置文件,配置NFS具體共享服務(wù)的地點(diǎn),默認(rèn)內(nèi)容為空,以行為單位。
[root@nfs-server ~]# cat /etc/exports /data 192.168.31.0/24(rw,sync,all_squash) /usr/sbin/exportfs
NFS服務(wù)的管理命令。例如,可以加載NFS配置生效,還可以直接配置NFS共享目錄,即無(wú)需配置/etc/exports實(shí)現(xiàn)共享。
[root@nfs-server ~]# exportfs –rv #加載配置生效,等價(jià)于重啟/etc/init.d/nfs reload exporting 192.168.31.0/24:/data exportfs不但可以加載配置生效,也可以通過(guò)命令直接共享目錄。越過(guò)/etc/exports,但重啟失效。
/usr/sbin/showmount
常用在客戶端,查看NFS配置及掛載結(jié)果的命令。配置nfsserver,分別在服務(wù)端以及客戶端查看掛載情況。
/var/lib/nfs/etab
NFS配置文件的完整參數(shù)設(shè)定的文件(有很多沒(méi)有配置但是默認(rèn)就有的NFS參數(shù))。
[root@nfs-server ~]# cat /var/lib/nfs/etab /data 192.168.31.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,all_squash) /proc/mounts
客戶端掛載參數(shù)
[root@web-lamp01 ~]# cat /proc/mounts rootfs / rootfs rw 0 0 proc /proc proc rw,relatime 0 0 sysfs /sys sysfs rw,relatime 0 0 devtmpfs /dev devtmpfs rw,relatime,size=496952k,nr_inodes=124238,mode=755 0 0 devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /dev/shm tmpfs rw,relatime 0 0 /dev/sda3 / ext4 rw,relatime,barrier=1,data=ordered 0 0 /proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0 /dev/sda1 /boot ext4 rw,relatime,barrier=1,data=ordered 0 0 none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0 sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0 192.168.31.129:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.31.130,minorversion=0,local_lock=none,addr=192.168.31.129 0 0 NFS客戶端mount掛載命令????
NFS客戶端掛載的命令
| 掛載命令 | 掛載的格式類(lèi)型 | NFS服務(wù)器提供的共享目錄 | NFS客戶端要掛載的目錄 |
| mount | -t nfs | 192.168.31.129:/data | /mnt(必須存在) |
| 完整掛載命令為:mount -t nfs 192.168.31.129:/data /mnt |
執(zhí)行掛載的過(guò)程
[root@web-lamp01 ~]# showmount -e 192.168.31.129 #掛載前先檢查有權(quán)限需要掛載的信息是否能夠掛載 Export list for 192.168.31.129: /data 192.168.31.0/24 #可以清晰的看到共享了/data目錄 [root@web-lamp01 ~]# mount -t nfs 192.168.31.129:/data /mnt #執(zhí)行掛載命令 [root@web-lamp01 ~]# df –h #查看掛載后的結(jié)果 Filesystem Size Used Avail Use% Mounted on /dev/sda3 7.1G 1.4G 5.4G 21% / tmpfs 497M 0 497M 0% /dev/shm /dev/sda1 190M 27M 153M 16% /boot 192.168.31.129:/data 7.1G 1.4G 5.4G 21% /mnt [root@web-lamp01 ~]# mount #查看掛載后的結(jié)果 /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) 192.168.31.129:/data on /mnt type nfs (rw,vers=4,addr=192.168.31.129,clientaddr=192.168.31.130) [root@web-lamp01 ~]# grep mnt /proc/mounts #查看掛載后的結(jié)果 192.168.31.129:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.31.130,minorversion=0,local_lock=none,addr=192.168.31.129 0 0 NFS客戶端mount掛載深入
NFS客戶端mount掛載參數(shù)說(shuō)明
在NFS服務(wù)端可以通過(guò)cat /var/lib/nfs/etab查看NFS服務(wù)端配置的參數(shù)細(xì)節(jié)。
在NFS客戶端可以通過(guò)cat /proc/mounts查看mount的掛載參數(shù)細(xì)節(jié)。
NFS Client mount掛載參數(shù)列表
| 參數(shù) | 參數(shù)功能 | 默認(rèn)參數(shù) |
| fg bg | 當(dāng)在客戶端執(zhí)行掛載時(shí),可選擇是前臺(tái)fg還是在后臺(tái)bg執(zhí)行。若在前臺(tái)執(zhí)行,則mount會(huì)持續(xù)嘗試掛載,直到成功或掛載時(shí)間超時(shí)為止,若在后臺(tái)執(zhí)行,則mount會(huì)在后臺(tái)持續(xù)多次進(jìn)行mount,而不會(huì)影響到前臺(tái)的其它程序操作。如果網(wǎng)絡(luò)聯(lián)機(jī)不穩(wěn)定,或是服務(wù)器常常需要開(kāi)關(guān)機(jī),建議使用bg比較好。 | fg |
| soft hard | 當(dāng)NFS Client以soft掛載Server后,若網(wǎng)絡(luò)或Server出現(xiàn)問(wèn)題,造成Client和Server無(wú)法傳輸資料時(shí),Client會(huì)一直嘗試到timeout后顯示錯(cuò)誤并且停止嘗試。若使用soft mount的話,可能會(huì)在timeout出現(xiàn)時(shí)造成資料丟失,一般不建議使用。 若用hard模式掛載硬盤(pán)時(shí),剛好和soft相反,此時(shí)Client會(huì)一直嘗試連線到Server,若Server有回應(yīng)就繼續(xù)剛才的操作,若沒(méi)有回應(yīng)NFS Client會(huì)一直嘗試,此時(shí)無(wú)法umount或kill,所以常常會(huì)配合intr使用。 | hard |
| intr | 當(dāng)使用hard掛載的資源timeout后,若有指定intr參數(shù),可以在timeout后把它中斷掉,這避免出問(wèn)題時(shí)系統(tǒng)整個(gè)被NFS鎖死。 | 無(wú) |
| rsize wsize | 讀出(rsize)與寫(xiě)入(wrize)的區(qū)塊大小(block size),這個(gè)設(shè)置值可以影響客戶端與服務(wù)端傳輸數(shù)據(jù)的緩沖存儲(chǔ)量,一般來(lái)說(shuō),如果在局域網(wǎng)內(nèi)(LAN),并且客戶端與服務(wù)端都具有足夠的內(nèi)存,這個(gè)值可以設(shè)置大一點(diǎn)(65535bytes),提升緩沖區(qū)塊將可提升NFS文件系統(tǒng)的傳輸能力。但設(shè)置的值也不能太大,最好是實(shí)現(xiàn)網(wǎng)絡(luò)能夠傳輸?shù)淖畲笾禐橄蕖?/p> | CentOS 5:默認(rèn)1024 CentOS 6:默認(rèn)131072 |
| proto=udp | 使用UDP協(xié)議來(lái)傳輸資料,在LAN中會(huì)有比較好的性能。若要跨越Internet的話,使用proto=tcp多傳輸?shù)臄?shù)據(jù)會(huì)有比較好的糾錯(cuò)能力 | proto=tcp |
man nfs查看上述信息。
優(yōu)化:
[root@web-lamp01 ~]# mount -t nfs -o bg,hard,intr,rsize=131072,wsize=131072 192.168.31.129:/data /mnt 下面是mount -o參數(shù)對(duì)應(yīng)的選項(xiàng)列表
| 參數(shù) | 參數(shù)意義 | 默認(rèn)值 |
| suid nosuid | 當(dāng)掛載的文件系統(tǒng)上有任何SUID的程序時(shí),只要使用nosuid就能夠取消設(shè)置SUID的功能。 | suid |
| rw ro | 可以指定文件系統(tǒng)是只讀ro或可寫(xiě)rw | rw |
| dev nodev | 是否可以保留裝置文件的特殊功能,一般來(lái)說(shuō)只有/dev才有特殊的裝置,因此可以選擇nodev | dev |
| exec noexec | 是否具有執(zhí)行文件的權(quán)限,如果想要掛載的僅僅是普通資源數(shù)據(jù)區(qū)(例如圖片、附件),可以選擇noexec | exec |
| user nouser | 是否允許用戶進(jìn)行文件的掛載與卸載功能,如果要保護(hù)文件系統(tǒng),最好不要提供用戶選擇掛載與卸載 | nouser |
| auto noauto | 這個(gè)auto指的是"mount -a"時(shí)會(huì)不會(huì)被掛載的項(xiàng)目,如果不需要這個(gè)分區(qū)隨時(shí)被掛載,可設(shè)置為noauto | auto |
NFS客戶端mount掛載優(yōu)化
在企業(yè)工作場(chǎng)景,一般來(lái)說(shuō),NFS服務(wù)器共享的只是普通靜態(tài)數(shù)據(jù)(圖片、附件、視頻),不需要執(zhí)行suid、exec等權(quán)限,掛載的這類(lèi)文件系統(tǒng)只能作為數(shù)據(jù)存取之用,無(wú)法執(zhí)行程序,對(duì)于客戶端來(lái)講增加了安全性。例如,很多木馬篡改站點(diǎn)文件都是由上傳入口上傳的程序到存儲(chǔ)目錄,然后執(zhí)行的。
因此在掛載的時(shí)候用下面的命令很有必要。
mount安全掛載參數(shù)
mount -t nfs -o nosuid,noexec,nodev,rw 192.168.31.129:/data /mnt
通過(guò)mount -o指定掛載參數(shù)和在/etc/fstab里指定掛載參數(shù)效果是一樣的。
mount掛載性能優(yōu)化參數(shù)選項(xiàng)
1、禁止更新目錄及文件時(shí)間戳掛載
mount -t nfs -o noatime,nodiratime 192.168.31.129:/data /mnt
2、安全加優(yōu)化的掛載方式
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 192.168.31.129:/data /mnt
3、默認(rèn)的掛載方式(推薦)
mount -t nfs 192.168.31.129:/data /mnt
如果是本地文件系統(tǒng)
mount /dev/sdb1 /mnt -o defaults,async,noatime,data=writeback,barrier=0
NFS服務(wù)內(nèi)核優(yōu)化
優(yōu)化選項(xiàng)說(shuō)明:
1、/proc/sys/net/core/rmem_default
該文件指定了接收套接字緩沖區(qū)大小的缺失值(以字節(jié)為單位),缺省設(shè)置:124928。
2、/proc/sys/net/core/rmem_max
該文件指定了接收套接字緩沖區(qū)大小的最大值(以字節(jié)為單位),缺省設(shè)置:124928。
3、/proc/sys/net/core/wmem_default
該文件指定了發(fā)送套接字緩沖區(qū)大小的缺失值(以字節(jié)為單位),缺省設(shè)置:124928。
4、/proc/sys/net/core/wmem_max
該文件指定了發(fā)送套接字緩沖區(qū)大小的最大值(以字節(jié)為單位),缺省設(shè)置:124928。
上述文件對(duì)應(yīng)的具體內(nèi)核優(yōu)化命令:
cat >>/etc/sysctl.conf<<EOF net.core.wmem_default=8388608 net.core.wmem_max=16777216 net.core.rmem_datault=8388608 net.core.rmem_max=16777216 EOF sysctl -p 企業(yè)場(chǎng)景NFS共享存儲(chǔ)優(yōu)化小結(jié)
1、硬件:sas、ssd硬盤(pán),買(mǎi)多塊,raid0、raid10。網(wǎng)卡吞吐量要大,至少千兆
2、NFS服務(wù)器端配置:/data
192.168.31.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)
3、NFS客戶端掛載:rsize、wsize、noatime、nodirtime、nosuid、noexec、soft(hard、intr)
mount -t nfs -o nosuid,noexec,nodev,noatime,rsize=131072,wsize=131072 192.168.31.129:/data /mnt
mount -t nfs -o noatime,nodiratime,rsize=131072,wsize=131072 192.168.31.129:/data /mnt
mount -t nfs -o noatime,nodiratime 192.168.31.129:/data /mnt
4、有關(guān)NFS服務(wù)的所有服務(wù)器內(nèi)核優(yōu)化
cat >>/etc/sysctl.conf<<EOF net.core.wmem_default=8388608 net.core.wmem_max=16777216 net.core.rmem_datault=8388608 net.core.rmem_max=16777216 EOF sysctl -p 5、如果卸載的時(shí)候提示:umount:/mnt:device is busy,需要退出掛載目錄后進(jìn)行卸載,或是NFS Server宕機(jī)了,需要強(qiáng)制卸載mount -lf /mnt。
6、大型網(wǎng)站NFS網(wǎng)絡(luò)文件系統(tǒng)替代軟件,分布式文件系統(tǒng)Moosefs(mfs)、glusterfs、FastDFS。
NFS系統(tǒng)應(yīng)用優(yōu)缺點(diǎn)說(shuō)明
作用:
NFS服務(wù)可以讓不同的客戶端掛載使用同一目錄,作為共享存儲(chǔ)使用,這樣可以保證不同節(jié)點(diǎn)客戶端數(shù)據(jù)的一致性,在集群架構(gòu)環(huán)境中經(jīng)常會(huì)用到。如果windows+linux可以用samba。
優(yōu)點(diǎn):
1、簡(jiǎn)單,容易上手,容易掌握。
2、NFS文件系統(tǒng)內(nèi)數(shù)據(jù)是在文件系統(tǒng)之上的,即數(shù)據(jù)能看見(jiàn)。
3、方便,部署快速,維護(hù)簡(jiǎn)單,可控且滿足需求。
4、可靠,從軟件層面上看,數(shù)據(jù)可靠性高,經(jīng)久耐用。數(shù)據(jù)是在文件系統(tǒng)之上的
5、穩(wěn)定。
局限:
1、局限性是存在單點(diǎn)故障,如果nfs server宕機(jī)了所有客戶端都不能訪問(wèn)共享目錄
可以通過(guò)負(fù)載均衡及高可用方案彌補(bǔ)。
2、在大數(shù)據(jù)高并發(fā)的場(chǎng)合,NFS效率、性能有限(一般幾千萬(wàn)pv的網(wǎng)站不是瓶頸,除非網(wǎng)站架構(gòu)太差,2千萬(wàn)pv/日)。
3、客戶端認(rèn)證是基于ip和主機(jī)名的,權(quán)限是根據(jù)ID識(shí)別,安全性一般(用于內(nèi)外則問(wèn)題不大)。
4、NFS數(shù)據(jù)是明文的,NFS本身對(duì)數(shù)據(jù)完整性不作驗(yàn)證。
5、多臺(tái)客戶機(jī)器掛載一個(gè)NFS服務(wù)器時(shí),連接管理維護(hù)麻煩(耦合度高)。尤其N(xiāo)FS服務(wù)出現(xiàn)問(wèn)題后,所有NFS客戶端都掛掉狀態(tài)(測(cè)試環(huán)境可以使用autofs自動(dòng)掛載解決)。
6、大中小型網(wǎng)站(2千萬(wàn)PV以下)線上應(yīng)用,都有用武之地。
showmount命令說(shuō)明
| 短格式 | 長(zhǎng)格式 | 用途及實(shí)例結(jié)果 |
| -e | --exports | 顯示NFS服務(wù)器輸出的目錄列表 [root@web-lamp01 ~]# showmount -e 192.168.31.129 Export list for 192.168.31.129: /data 192.168.31.0/24 |
| -d | --directories | 顯示NFS服務(wù)器中提供共享的目錄 |
| -a | --all | 以ip:/die格式顯示NFS服務(wù)器的ip和可被掛載的目錄 |
轉(zhuǎn)載于:https://www.cnblogs.com/yinshoucheng-golden/p/6318191.html
總結(jié)
以上是生活随笔為你收集整理的网络文件系统NFS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。