NFS

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客戶端地址212

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

如果不行

1ping NFS服務端IP檢查鏈路

2telnet服務端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

2NFS開機放到fstab也可行  前提是某些開機啓動服務進程開啓,會檢測

 

 cat /var/lib/nfs/etab 服務端查看NFS配置的參數細節

 cat /proc/mounts      客戶端查看掛載參數細節


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章