1 NFS介紹
Network File System,網絡文件系統。它的主要功能是通過網絡讓不同的主機系統之間可以共享文件或目錄。NFS客戶端通過掛載的方式將NFS服務器端共享的數據目錄掛載到NFS客戶端本地系統中。
NFS Network File System,通過網絡,讓不同主機系統之間可以共享目錄和文件
NFS一般被用來存儲共享視頻,圖片,附件等靜態資源文件
網站BBS程序不要放文件在NFS共享裏
mount /dev/sdb1 /mnt
mount 網絡設備系統資源 /mnt
2 RPC
因爲NFS支持的功能很多,而不同的功能都會使用不同的程序來啓動,每啓動一個功能就會啓用一些端口來傳輸數據,因此,NFS的功能所對應的端口無法固定,會使用隨機端口;因此會造成NFS客戶端和NFS服務端通信障礙。
RPC服務就是用來解決這個困擾的,它會記錄每個NFS功能所對應的端口號,並且在NFS客戶端請求時將端口和功能對應的信息傳遞給請求的NFS客戶端。
3 NFS工作流程原理
當訪問程序通過NFS客戶端向NFS服務器端存取文件時,數據流程大致如下:
1、用戶訪問網站程序,由程序在NFS客戶端發出存取請求,它的RPC服務向服務器端的RPC服務發出請求
2、服務器端的RPC服務找到對應的已註冊的NFS端口,通知NFS客戶端的RPC服務
3、此時NFS客戶端獲取到正確的端口,並與NFS daemon聯機存取數據
4、NFS客戶端把數據存取成功後,返回給前端訪問程序,告知用戶存取結果,作爲網站用戶,就完成了一次存取操作
因此,FNS的各項功能都需要向RPC服務註冊,所以要先啓動RPC服務,後啓動NFS服務
4 NFS服務器端的設置和安裝
4.1 NFS軟件的3種安裝方法
檢查是否有安裝:rpm -aq nfs-utils rpcbind
1)yum install nfs-utils rpcbind -y
2)通過系統光盤裏的rpm包安裝:命令:rpm -ivh nfs-utils-1.2.3-36.e16.x86_64.rpm
3)LANG=en
yum grouplist|grep -i nfs
yum groupinstall "NFS file server" -y
4.2 安裝nfs-utils rpcbind(知名端口111)
yum install nfs-utils rpcbind –y
啓動RPC服務
111端口爲rpcbind服務對外提供服務的主端口
[root@nfs-server ~]# /etc/init.d/rpcbind status rpcbind 已停 [root@nfs-server ~]# /etc/init.d/rpcbind start 正在啓動 rpcbind: [確定] [root@nfs-server ~]# /etc/init.d/rpcbind status rpcbind (pid 2035) 正在運行...
[root@nfs-server ~]# lsof -i :111 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 2035 rpc 6u IPv4 12735 0t0 UDP *:sunrpc rpcbind 2035 rpc 8u IPv4 12738 0t0 TCP *:sunrpc (LISTEN) rpcbind 2035 rpc 9u IPv6 12740 0t0 UDP *:sunrpc rpcbind 2035 rpc 11u IPv6 12743 0t0 TCP *:sunrpc (LISTEN) [root@nfs-server ~]# netstat -lntup|grep rpcbind tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2035/rpcbind tcp 0 0 :::111 :::* LISTEN 2035/rpcbind udp 0 0 0.0.0.0:111 0.0.0.0:* 2035/rpcbind udp 0 0 0.0.0.0:938 0.0.0.0:* 2035/rpcbind udp 0 0 :::111 :::* 2035/rpcbind udp 0 0 :::938 :::* 2035/rpcbind [root@nfs-server ~]# netstat -lntup|grep 111 tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2035/rpcbind tcp 0 0 :::111 :::* LISTEN 2035/rpcbind udp 0 0 0.0.0.0:111 0.0.0.0:* 2035/rpcbind udp 0 0 :::111 :::* 2035/rpcbind [root@nfs-server ~]# chkconfig --list rpcbind rpcbind 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉
啓動NFS服務
[root@nfs-server ~]# /etc/init.d/nfs status rpc.svcgssd 已停 rpc.mountd 已停 nfsd 已停 rpc.rquotad 已停 [root@nfs-server ~]# /etc/init.d/nfs start 啓動 NFS 服務: [確定] 關掉 NFS 配額: [確定] 啓動 NFS mountd: [確定] 啓動 NFS 守護進程: [確定] 正在啓動 RPC idmapd: [確定] [root@nfs-server ~]# /etc/init.d/nfs status rpc.svcgssd 已停 rpc.mountd (pid 2141) 正在運行... nfsd (pid 2156 2155 2154 2153 2152 2151 2150 2149) 正在運行... rpc.rquotad (pid 2137) 正在運行... nfs的主端口2049 [root@nfs-server ~]# netstat -lntup|grep 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 :::*
/etc/init.d/rpcbind start
/etc/init.d/nfs start
將此寫入rc.local
4.3 NFS的配置文件exports
NFS的默認配置文件:/etc/exports,默認是空的
[root@nfs-server ~]# ls -l /etc/exports -rw-r--r--. 1 root root 0 1月 12 2010 /etc/exports [root@nfs-server ~]# cat /etc/exports
/exports文件的配置格式爲:
NFS共享的目錄 NFS客戶端地址1(參1,參2) NFS客戶端地址2(1,2)
NFS共享的目錄 NFS客戶端地址(參1,參2,…)
[root@nfs-server ~]# man exports EXAMPLE # sample /etc/exports file / master(rw) trusty(rw,no_root_squash) /projects proj*.local.domain(rw) /usr *.local.domain(ro) @trusted(rw) /home/joe pc001(rw,all_squash,anonuid=150,anongid=100) /pub *(ro,insecure,all_squash) /srv/www -sync,rw server @trusted @external(ro) /foo 2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw) /build buildhost[0-9].local.domain(rw)
配置實例
/data 192.168.4.0/24(rw,sync,all_squash)
NFS配置權限設置的常用參數 /data 192.168.4.*(rw,sync)
rw Read-write 表示可讀寫權限
ro Read-only 只讀權限
sync 請求或寫入數據時,數據同步寫入到NFS Server 同步寫入
async 請求或寫入數據時,先返回請求,再將數據寫入到內存 異步寫入
all_squash 不論登入NFS的使用者身份是什麼,他的身份都會被壓縮成爲匿名使用者,通常就是nobody
平滑加載此服務 下面兩個命令等價
[root@nfs-server ~]# exportfs -r
[root@nfs-server ~]# /etc/init.d/nfs reload
4.4 查看本機共享的記錄
[root@nfs-server ~]# showmount -e 127.0.0.1 Export list for 127.0.0.1: /data 192.168.4.*
4.5 在本機測試掛載
[root@nfs-server ~]# mount -t nfs 192.168.4.120:/data /mnt [root@nfs-server ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 9.2G 1.8G 7.0G 20% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 194M 29M 155M 16% /boot 192.168.4.120:/data 9.2G 1.8G 7.0G 20% /mnt
5 NFS客戶端配置
[root@lamp01 ~]# /etc/init.d/rpcbind start 正在啓動 rpcbind: [確定] [root@lamp01 ~]# chkconfig rpcbind on [root@lamp01 ~]# vi /etc/rc.local 最好也放進/etc/rc.local [root@lamp01 ~]# /etc/init.d/rpcbind status rpcbind (pid 1729) 正在運行... [root@lamp01 ~]# [root@lamp01 ~]# showmount -e 192.168.4.120 Export list for 192.168.4.120: /data 192.168.4.* [root@lamp01 ~]# mount -t nfs 192.168.4.120:/data /mnt [root@lamp01 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 9.2G 1.8G 7.0G 20% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 194M 29M 155M 16% /boot 192.168.4.120:/data 9.2G 1.8G 7.0G 20% /mnt [root@lamp01 ~]# 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) 192.168.4.120:/data on /mnt type nfs (rw,vers=4,addr=192.168.4.120,clientaddr=192.168.4.121)
默認沒有寫的權限,需要更改權限
[root@nfs-server /]# cat /var/lib/nfs/etab /data 192.168.4.*(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) [root@nfs-server /]# ls -ld /data/ drwxr-xr-x 2 root root 4096 6月 9 00:01 /data/ [root@nfs-server /]# grep 65534 /etc/passwd nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin [root@nfs-server /]# chown -R nfsnobody /data [root@nfs-server /]# ls -ld /data/ drwxr-xr-x 2 nfsnobody root 4096 6月 9 00:01 /data/
把掛載放進rc.local
[root@lamp01 mnt]# vim /etc/rc.local mount -t nfs 192.168.4.120:/data /mnt
6 NFS客戶端掛載排錯思路
1、首先確認NFS服務端配置和服務是否OK
[root@nfs-server ~]# showmount -e 127.0.0.1(localhost)
最好服務端自己掛載自己看看可不可以
mount -t nfs 192.168.4.120:/data /mnt
df -h
2、確認NFS客戶端showmount是否OK
showmount -e 192.168.4.120
如果不行
1)ping NFS服務端IP檢查鏈路
2)telnet服務端IP端口檢查
telnet 192.168.4.120 111
7 NFS服務端配置步驟
1、安裝軟件:yum install nfs-utils rpcbind -y
2、啓動服務(注意先後順序)
/etc/init.d/rpcbind start
rpcinfo -p localhost <=======檢查
/etc/init.d/nfs start
rpcinfo -p localhost <=======檢查
3、設置開機自啓動,扔到/etc/rc.local
chkconfig nfs on
chkconfig rpcbind on
4、配置NFS服務
echo "/data 192.168.4.0/24(rw,sync,all_squash)" >>/etc/exports
mkdir -p /data
chown -R nfsnobody.nfsnobody /data (查看nfs默認使用的用戶及共享參數cat /var/lib/nfs/etab)
5、重新加載服務(平滑加載)
/etc/init.d/nfs reload <=====exportfs -r
6、檢查或測試掛載
showmount -e localhost
monut -t nfs 192.168.4.120:/data /mnt
8 客戶端配置步驟
1、安裝軟件:yum install nfs-utils rpcbind -y
2、啓動rpcbind
/etc/init.d/rpcbind start
3、配置開機啓動,扔到rc.local
chkconfig rpcbind on
4、測試服務端共享情況
showmount -e server_ip
5、掛載
mkdir -p /data
mount -t nfs server_ip:/data /data
6、測試讀、寫
7、把掛載的命令扔到rc.local使它開機掛載
9 企業生產環境nfs性能優化掛載的例子
1)禁止更新目錄及文件時間戳掛載
mount -t nfs -o noatime,nodiratime 192.168.4.120:/data /mnt
2)安全的掛載方式
mount -t nfs -o nosuid,noexec,nodev,rw 192.168.4.120:/data /mnt
3)安全加優化的掛載方式
mount -t nfs -o
nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 192.168.4.120:/data /mnt
4)默認的掛載方式
mount -t nfs 192.168.4.120:/data /mnt
注意:非性能的參數越多,速度可能會越慢
10 重要問題
1、有關NFS客戶端普通用戶寫NFS的問題
exports 加all_squash
2、NFS開機放到fstab也可行 前提是某些開機啓動服務進程開啓,會檢測
cat /var/lib/nfs/etab 服務端查看NFS配置的參數細節
cat /proc/mounts 客戶端查看掛載參數細節