NFS網絡共享介紹與使用

什麼是NFS(網絡文件系統)?node

         NFS(Network File System)即網絡文件系統,是FreeBSD支持的文件系統中的一種,它容許網絡中的計算機之間經過TCP/IP網絡共享資源。它的主要功能是經過網絡(通常是局域網)讓不一樣主機系統之間能夠共享文件或目錄。NFS客戶的(通常是應用服務器,例如,web)能夠經過掛載(mount)的方式將NFS服務端共享的數據目錄掛載到NFS客戶端本地系統中(就是某一個掛載點下)。從NFS客戶端的機器本地看,NFS服務器端共享的目錄就好像是客戶機自建的磁盤分區或目錄同樣,而實際上確是遠端的NFS服務器的目錄。linux

       NFS網絡文件系統很像windows系統的網絡共享、安全功能、網絡驅動器映射,這也和linux系統裏的samba服務相似。只不過通常狀況,windows網絡共享服務或者samba服務用於辦公局域網共享,互聯網中小型網站集羣架構後端經常使用NFS做爲數據共享,若是是大型網站。那麼有可能還會用到更復雜的分佈式 文件系統,例如,Moosefs(mfs),glusterfs,FastDFS等等。web

 

例如:共享/data目錄給192.168.43.0/24整個網段的主機可讀寫。windows

測試數據以下:後端

1、NFS服務測試環境環境:centos

服務器部署:緩存

centos6.5X86_64       服務器角色     ip  192.168.43.117安全

centos6.5X86_64       客戶端角色1   ip  192.168.43.118性能優化

centos6.5X86_64       客戶端角色2   ip  192.168.43.119服務器

服務端配置:

配置主機名:

hostname nfs-server     臨時生效

vi /etc/sysconfig/nework  永久生效

 

查看操做系統及內核版本信息:

cat /etc/redhat-release   系統版本

uname –r              內核信息

uname –m             系統位數

咱們下查詢一下機器上是否安裝了NFS服務:

rpm –qa nfs-utils rpcbind  若是知道服務器名字,此命令效率高

rpm –qa|egrep 「nfs-utils|recbind」

安裝nfs軟件:centos6.5默認沒有安裝NFS軟件包(centos5默認是會安裝的。)所以咱們能夠:yum install nfs-utils rpcbind –y 命令來安裝nfs軟件。

rpcinfo –p localhost  //查看NFS服務向rpc服務註冊的端口信息,由於沒啓動nfs。

若是rpcbind服務未啓動,執行命令rpcinfo –p localhost檢查時,會報以下錯誤:

解決辦法:執行/etc/init.d/rpcbind start 啓動rpcbind服務便可。

啓動rpcbind服務:

/etc/init.d/rpcbind status    //查看rpcbind服務狀態

/etc/init.d/rpcbind start    //啓動rpcbind服務

lsof -i :111                     //111端口爲rpcbind服務對外提供服務的主端口。

啓動NFS服務:

  啓動順序:rpcbind服務,再啓動nfs服務。

etc/init.d/nfs start          //啓動nfs服務

netstat –lntup|grep 2049   //nfs主端口2049

rpcinfo –p localhost  //查看NFS服務向rpc服務註冊的端口信息。發現不少端口和功能的對應。

咱們能夠把啓動命令放到/etc/rc.lcal文件裏。固然也能夠用chkconfig管理。

下面咱們開始操做NFS服務端配置文件:

NFS服務的默認配置文件路徑爲:/etc/exports且默認是空的。

exports配置文件格式:

NFS 共享的目錄 NFS客戶端地址(參1,參2…)

NFS 共享的目錄  NFS客戶端地址1(參1,參2…) 客戶端地址2(參1,參2…)

接下來,咱們開始配置客戶端1:

若是執行showmunt -e 192.168.43.117命令出現No route to host錯誤提示,多數緣由是由於防火牆沒有關致使的。

解決方法:執行service iptables stop命令便可。

NFS客戶端mount掛載的命令:

掛載命令   掛載的格式類型   NFS服務器提供的共享目錄   NFS客戶端要掛載的目錄

mount             -t nfs                 ip地址:共享目錄                   要掛載的目錄(必須存在)

----------------------------------------------------------------------------------------------------------

mount –t nfs 192.168.43.117:/data /mnt 

df -h  查看磁盤掛載信息的狀況(也能夠用cat /proc/mounts)

此時咱們測試一下:

①在共享目錄/data裏建立一個a.txt文件,並寫入123值a.txt中,而後再客戶端掛載的目錄中看是否有服務端建立的文件。

②在服務端刪除a.txt文件,事後再客戶端建立b.log文件。

服務端:

客戶端:

此時發現沒法再客戶端建立文件:

緣由是/data屬主爲root,解決方法:修改屬主

在NFS服務端把要共享的NFS目錄賦予默認用戶nfsnobody用戶和用戶組的權限,
若是不設置會致使NFS客戶端訪問時沒法經過NFS本地共享目錄權限寫入數據,
固然也能夠給NFS服務端本地共享目錄權限,但工做中最好不用,由於777權限太大了。

用戶和用戶組都是nfsnobody,服務端認爲全部的客戶端寫入的文件和目錄都會被壓縮成默認的uid爲65534和nfsnobody用戶。

咱們將rpcbind服務和掛載加入開啓啓動項:

到此,nfs客戶端1掛載成功。

注意:
實戰的狀況下,客戶端是不用安裝nfs軟件的,centos6.4之前版本;
可是6.五、6.6要是不裝的話有時會有問題。全部咱們在作測試的時候,
都裝nfs和rpbind。可是客戶端不用配置nfs和啓動

咱們能夠用一樣的方法配置客戶端2:

/etc/init.d/rpcbind start

vi /etc/rc.local

/etc/init.d/rpcbind start

mount –t nfs 192.168.43.117:/data /mnt

showmount –e 192.168.43.117

df –h

.......截圖省略

此時在客戶端2上,咱們能夠建立文件,也能夠管理掛載的目錄文件:

建立c.txt文件,並刪除服務端a.txt和客戶端1b.txt文件。

卸載掛載點: umount -t nfs 192.168.43.117:/data /mnt

我的總結:

在工做中,咱們配置/etc/exports內容爲:/data 10.1.1.0/24(rw,sync,all_squash)

rw:表示讀寫。
ro:表示只讀
sync:請求或寫入數據時,數據同步寫入到NFS Server的硬盤後才返回。

優勢:數據安全不會丟;缺點:性能比不啓用該參數要差

async:寫入時數據會先寫到內存緩存區,直到硬盤有空擋纔會再寫入磁盤,
這樣能夠提高寫入效率!風險爲若服務器宕機或不正常關機,會損失緩存區中
未寫入磁盤的數據

解決辦法:服務器主板電池或加UPS不間斷電源

all_squash:無論訪問NFS Server共享目錄的用戶身份如何,它的權限都將被壓縮成匿名
用戶,同時它的UID和GID都會變成nfsnobody帳號身份。在早期多個NFS客戶端同時讀
寫NFS Server數據時,這個參數頗有用
在生產中配置NFS的重要技巧:
1)確保全部客戶端服務器對NFS共享目錄具有相同的用戶訪問權限
a、all_squash把全部客戶端都壓縮成固定的匿名用戶(UID相同)。
b、就是anonuid,anongid指定的UID和GID的用戶。
2)全部的客戶端和服務器端都須要有一個相同的UID和GID的用戶,即nfsnobody(UID必須相同)


例如exports內配置的爲:
/data 192.168.43.0/24(rw,sync)
/etc/init.d/nfs reload //在服務端
在客戶端df -h 查看依舊是掛載狀態,root用戶切到/mnt目錄下,能夠建立目錄寄文件;若是用普通用戶切換到/mnt目錄下,沒法建立目錄及文件。

反之,若是exports內配置爲:/data 192.168.43.0/24(rw,sync,all_squash)
既能夠在普通用戶下建立目錄及文件,可讀可寫。而且常見的文件及目錄屬主及屬組都爲nfsnobody。

若是追求極致:能夠用以下參數掛載:
mount –t nfs –o bg,hard,intr,rsize=121072,wsize=121072 192.168.43.0:/data /mnt

安全掛載參數:
mount –t nfs –o nosuid,noexec,nodev,rw 192.168.43.117:/data /mnt

nosuid:不但願共享的存儲被執行setuid的功能;
noexec:不但願共享的存儲被執行二進制文件;
nodev: 不但願共享的存儲建立的設備。

經過mount –o 指定掛載參數和在/etc/fstab裏指定掛載參數效果是同樣的,網絡文件系統和本地的文件系統效果也是同樣的。

有關NFS服務的全部服務器內核優化:
cat >>/etc/sysctl.conf<<eof
net.core.wmem_default=8388608
net.core.rmem_default=8388608
net.core.rmem_max=16777216
net.core.wmem_max=16777216
eof
執行sysctl –p 生效。

若是卸載的時候提示: umount:/mnt:device is busy
解決方法:須要退出掛載目錄再進行卸載,或者是否NFS server宕機了,須要強制卸載:
mount –lf /mnt
此命令也能夠:fuser –km /mnt 不建議用。

nfs性能優化掛載的例子:

①禁止更新目錄及文件時間戳掛載
mount –t nfs –o noatime,nodiratime 192.168.43.117:/data
②安全加優化的掛載方式
mount –t nfs –o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,
wsize=131072 192.168.43.117:/data /mnt (intr:避免出問題時真個系統被NFS鎖死)
③默認的掛載方式
mount –t nfs 192.168.43.117:/data /mnt

NFS客戶端掛載排錯思路:

首先確認NFS服務端配置和服務是否ok(服務端最後本身掛載本身看是否ok)

確認NFS客戶端showmount是否ok(提示NO route to host關閉防火牆便可)

相關文章
相關標籤/搜索