linux之NFS服務


一:概念:

NFS(Network File System)即網絡文件系統,它允許網絡中的計算機之間通過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用可以透明地讀寫位於遠端NFS服務器上的文件,就像訪問本地文件一樣。

最早由sun公司開發,是類unix系統間實現磁盤共享的一種方法。

缺點:

1:nfs屬於本地文件系統,在高並發場景和大存儲量下,需要使用分布式存儲mfs,  FastDFS, tfs(taobao)等。

2:客戶端的數據都是通過明文傳送。客戶端沒有用戶認證機制,安全性能一般,所以建議一般在局域網內使用。

3:容易發生單點故障,即server服務器宕機所有的客戶端都不能訪問。

使用場景:web集群中NFS服務器主要用於存儲用戶上傳的信息,方便集群中機器獲取用戶數據。如圖片 附件 頭像 視頻 音頻。

二:工作原理

NFS服務依賴於RPC(Remote Procedure Call)服務。nfsd默認端口2049,實際使用過程中因為需要提供不同的服務,因此NFS啟動時還會隨機調用系統的空閑端口。在centos5.x中默認調用1024以下端口,centos6.x后默認調用的端口號一般較大,30000以上。因為NFS隨機端口的原因所以需要RPC服務來和client端確認傳輸端口等。

因為NFS服務啟動時需要向RPC注冊端口信息,所以RPC要在NFS服務啟動之前啟動。

 

 

在NFS server上創建用於共享的目錄/data,client用mount將/data掛載到自己本地一個目錄上,掛載目錄可以和/data名稱不同。將掛載信息寫入本機開機啟動文件里 如 /etc/rc.local

客戶端無需啟動NFS服務,但需要啟動RPC服務。

 

三:實現 

主機 角色 ip
cnetos6.5 NFS server 192.168.1.240
centos6.5 NFS client 192.168.86.131 
     

1:安裝軟件

NFS server需要至少安裝兩個軟件nfs-utils 和rpcbind。客戶端只要安裝rpcbind。

  rpm -qa nfs-utils rpcbind

安裝完nfs服務一般會自動生成配置文件exports,如果沒有就自己創建一個 /etc/exports

yum install -y nfs-utils  rpcbind
cat /etc/exports

  

創建共享目錄,將文件所有者指定為nfsnobody。nfsnobody用戶在安裝nfs時會自動創建。

如果不指定共享用戶,則nfs系統在分配權限時會以用戶uid為主,客戶端如果用root賬戶會在服務器被自動降級至nfsnobody。

mkdir  -p /data/nfs 
chown -R nfsnobody:nfsnobody /data/nfs

2:server配置文件

格式:共享目錄     指定共享對象(共享參數)

例: /data   192.168.1.0/24(rw,sync)

將 /data  共享給192.168.1.x ,客戶端權限rw

其中共享對象可以用通配符,比如 * 代表所有地址。

配置參數:

rw: 讀寫

ro :只讀

sync:將數據同步寫入內存緩沖區與磁盤中,效率低,但可以保證數據的一致性;

async:是大數據時使用,是先寫到緩存區,必要時再寫到磁盤里。

all_squash:所有訪問用戶都映射為匿名用戶或用戶組;
no_all_squash(默認):訪問用戶先與本機用戶匹配,匹配失敗后再映射為匿名用戶或用戶組;

root_squash(默認):將來訪的root用戶映射為匿名用戶或用戶組;
no_root_squash:來訪的root用戶保持root帳號權限;
 
wdelay(默認):檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率;
no_wdelay:若有寫操作則立即執行,應與sync配合使用;
 
subtree_check :若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限;
no_subtree_check(默認):即使輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣可以提高效率;

 

配置server參數 

#nfs dir /data/nfs 
/data/nfs  192.168.1.0/24(rw)
/data/nfs  192.168.86.131(rw)

也可以寫成一行

/data/nfs  192.168.1.0/24(rw)  192.168.86.131(rw,sync)

 

啟動服務:注意先啟動rpcbind再啟動nfs

[root@localhost data]# service rpcbind start
Starting rpcbind: [ OK ]
[root@localhost data]# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]

 

查詢nfs掛載,showmount  -e  192.168.1.240 后面可以接ip來查看。

[root@localhost data]# showmount -e
Export list for localhost:
/data/nfs 192.168.1.0/24,192.168.86.131

NFS服務開啟后,查看共享目錄參數

[root@localhost data]# cat /var/lib/nfs/etab 
/data/nfs	192.168.86.131(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)
/data/nfs	192.168.1.0/24(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服務開機啟動

[root@localhost ~]# chkconfig rpcbind on
[root@localhost ~]# chkconfig nfs on

[root@localhost ~]# chkconfig --list rpcbind
rpcbind 0:off	1:off	2:on	3:on	4:on	5:on	6:off
[root@localhost ~]# chkconfig --list nfs
nfs 0:off	1:off	2:on	3:on	4:on	5:on	6:off

 

3:客戶端配置

安裝rpcbind和nfs,啟動rpcbind,nfs可以不啟動。

客戶端掛載nfs共享目錄

mount -t nfs 192.168.1.240:/data/nfs /nfs    #掛載nfs server的/data/nfs 到/nfs
[root@centos68 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.5G  2.0G  7.1G  22% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             190M   33M  147M  19% /boot
/dev/sdb1             4.8G   11M  4.6G   1% /data
192.168.1.240:/data/nfs
                      2.9G  2.7G  126M  96% /nfs  # nfs掛載信息

 

注:一般不將nfs掛載信息寫入fstab,因為nfs依賴於rpc服務,rpc服務啟動晚於fstab時會出錯。可以將掛載信息寫入 /etc/rc.local

 

vim  /etc/rc.local
#mount nfs_data
mount -t nfs 192.168.1.240:/data/www/image/  /data/www/image/
mount -t nfs 192.168.1.240:/data/www/user/  /data/www/user/

  

 

 

關於默認賬戶

nfs客戶端寫數據除了nfs配置文件要有rw權限,對於目錄也要有對應操作權限。

如果/data/nfs目錄沒有給寫入權限,即使exports里設置了rw也是沒有權限寫入的。客戶端默認操作賬戶為nfsnobody。

[root@localhost ~]# cat /var/lib/nfs/etab 
/data/nfs	192.168.86.131(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)
/data/nfs	192.168.1.0/24(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)

 

查看/var/lib/nfs/etab其中 anonuid=65534,anongid=65534 為默認賬戶uid,即nfsnobody的默認uid。

查看已掛載設備掛載參數 cat /proc/mounts 

[root@localhost ~]# cat /proc/mounts |grep 192
192.168.1.240:/data/nfs /mnt nfs4 rw,noexec,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.240,minorversion=0,local_lock=none,addr=192.168.1.240 0 0

  

客戶端掛載優化參數

noatime       不更新文件的inode訪問時間戳,文件很多時此參數可以提高效率。

nodiratime   不更新目錄的訪問時間戳,同上。

nosuid         關閉掛載目錄的suid

noexec        不允許執行二進制文件。shell腳本無法直接使用,但是用sh  xxx.sh依然可以調用。

rsize           系統每次讀取的最大字節,centos6.5默認131072,此參數過小會影響系統的I/O效率.

wsize          系統每次寫入的最大字節,同上

defaults 使用默認的選項。默認選項為rw、suid、dev、exec、anto  nouser與async。 

例: mount  -o  nosuid  noexec noatime   -t nfs  192.168.1.240:/data/nfs  /mnt

 

卸載掛載點,如果提示 /mnt: device is busy ,可以用lf參數強制卸載

umount  -lf  /mnt  

 

 windows客戶端配置(不常用)

打開windows控制面板,在程序和功能里面啟用 NFS客戶端。

 

cmd里直接輸入 mount 192.168.1.240:/data/nfs  z: 

 這樣windows下就可以瀏覽nfs共享目錄的內容了,如果需要修改權限,那么還需要修改共享目錄權限。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM