1. 程式人生 > >NFS搭建、配置及故障排除詳解

NFS搭建、配置及故障排除詳解

1.什麼是NFS?

NFS 是Network File System的縮寫,即網路檔案系統。一種使用於分散式檔案系統的協定,由Sun公司開發,於1984年向外公佈。功能是通過網路讓不同的機器、不同的作業系統能夠彼此分享個別的資料,讓應用程式在客戶端通過網路訪問位於伺服器磁碟中的資料,是在類Unix系統間實現磁碟檔案共享的一種方法。
  NFS 的基本原則是“容許不同的客戶端及服務端通過一組RPC分享相同的檔案系統”,它是獨立於作業系統,容許不同硬體及作業系統的系統共同進行檔案的分享。
  NFS在檔案傳送或資訊傳送過程中依賴於RPC協議。RPC,遠端過程呼叫 (Remote Procedure Call) 是能使客戶端執行其他系統中程式的一種機制。NFS本身是沒有提供資訊傳輸的協議和功能的,但NFS卻能讓我們通過網路進行資料的分享,這是因為NFS使用了一些其它的傳輸協議。而這些傳輸協議用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程式。或者說NFS也是一個RPC SERVER。所以只要用到NFS的地方都要啟動RPC服務,不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實現PROGRAM PORT的對應。可以這麼理解RPC和NFS的關係:NFS是一個檔案系統,而RPC是負責負責資訊的傳輸。

2.NFS的掛載原理

NFS分為客戶端與伺服器端,一般設定為一個Server端,多個客戶端,也可設定為多對多,當伺服器端設定好共享目錄/data後,客戶端通過相應的訪問許可權,將共享目錄掛載到本地系統的某個目錄下,就可以透明的看到共享目錄裡的檔案了,依據伺服器制定的相應許可權做操作。

3.NFS伺服器與客戶端的通訊原理

NFS伺服器和客戶端是通過網路進行資料傳輸的,網路傳輸必然要通過指定的埠。然而,NFS伺服器是隨機選擇埠進行傳輸的,這樣NFS客戶端就無法知道NFS伺服器的埠了。就好像兩個小夥伴不認識又想做朋友,不知道怎麼開口。為了解決這個問題,RPC(Remote Procedure Control)這個小夥伴來了,他說我給你們搭個線。NFS伺服器在啟動時會向RPC註冊,告訴RPC自己啟動了哪些埠,而NFS客戶端傳送請求時,先向RPC詢問NFS伺服器的開放埠,這樣,NFS客戶端拿到了伺服器的埠後,再想NFS伺服器傳送真實的資料傳輸請求。這兩個小夥伴有個共同的朋友,這個朋友講兩人介紹認識了,就是這麼一個過程。

客戶端NFS和服務端NFS通訊過程
1)首先伺服器端啟動RPC服務,並開啟111埠
2)啟動NFS服務,並向RPC註冊埠資訊
3)客戶端啟動RPC(portmap服務),向服務端的RPC(portmap)服務請求服務端的NFS埠
4)服務端的RPC(portmap)服務反饋NFS埠資訊給客戶端。
5)客戶端通過獲取的NFS埠來建立和服務端的NFS連線並進行資料的傳輸。

4.NFS系統守護程序

nfsd:它是基本的NFS守護程序,主要功能是管理客戶端是否能夠登入伺服器;
mountd:它是RPC安裝守護程序,主要功能是管理NFS的檔案系統。當客戶端順利通過nfsd登入NFS伺服器後,在使用NFS服務所提供的檔案前,還必須通過檔案使用許可權的驗證。它會讀取NFS的配置檔案/etc/exports來對比客戶端許可權。
portmap:主要功能是進行埠對映工作。當客戶端嘗試連線並使用RPC伺服器提供的服務(如NFS服務)時,portmap會將所管理的與服務對應的埠提供給客戶端,從而使客戶可以通過該埠向伺服器請求服務。

5.NFS的常用目錄及常用命
/etc/exports NFS服務的主要配置檔案
/usr/sbin/exportfs NFS服務的管理命令
/usr/sbin/showmount 客戶端的檢視命令
/var/lib/nfs/etab 記錄NFS分享出來的目錄的完整許可權設定值
/var/lib/nfs/xtab 記錄曾經登入過的客戶端資訊
NFS服務的配置檔案為 /etc/exports,這個檔案是NFS的主要配置檔案,不過系統並沒有預設值,所以這個檔案不一定會存在,可能要使用vim手動建立,然後在檔案裡面寫入配置內容。
/etc/exports檔案內容格式:
<輸出目錄> [客戶端1 選項(訪問許可權,使用者對映,其他)] [客戶端2 選項(訪問許可權,使用者對映,其他)]
a. 輸出目錄:
輸出目錄是指NFS系統中需要共享給客戶機使用的目錄;
b. 客戶端:
客戶端是指網路中可以訪問這個NFS輸出目錄的計算機
客戶端常用的指定方式
指定ip地址的主機:192.168.0.200
指定子網中的所有主機:192.168.0.0/24 192.168.0.0/255.255.255.0
指定域名的主機:david.bsmart.cn
指定域中的所有主機:*.bsmart.cn
所有主機:*
c. 選項:
選項用來設定輸出目錄的訪問許可權、使用者對映等。
NFS主要有3類選項:
訪問許可權選項
設定輸出目錄只讀:ro
設定輸出目錄讀寫:rw
使用者對映選項
all_squash:將遠端訪問的所有普通使用者及所屬組都對映為匿名使用者或使用者組(nfsnobody);
no_all_squash:與all_squash取反(預設設定);
root_squash:將root使用者及所屬組都對映為匿名使用者或使用者組(預設設定);
no_root_squash:與rootsquash取反;
anonuid=xxx:將遠端訪問的所有使用者都對映為匿名使用者,並指定該使用者為本地使用者(UID=xxx);
anongid=xxx:將遠端訪問的所有使用者組都對映為匿名使用者組賬戶,並指定該匿名使用者組賬戶為本地使用者組賬戶(GID=xxx);
其它選項
secure:限制客戶端只能從小於1024的tcp/ip埠連線nfs伺服器(預設設定);
insecure:允許客戶端從大於1024的tcp/ip埠連線伺服器;
sync:將資料同步寫入記憶體緩衝區與磁碟中,效率低,但可以保證資料的一致性;
async:將資料先儲存在記憶體緩衝區中,必要時才寫入磁碟;
wdelay:檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率(預設設定);
no_wdelay:若有寫操作則立即執行,應與sync配合使用;
subtree:若輸出目錄是一個子目錄,則nfs伺服器將檢查其父目錄的許可權(預設設定);
no_subtree:即使輸出目錄是一個子目錄,nfs伺服器也不檢查其父目錄的許可權,這樣可以提高效率;

相關命令
1、exportfs
如果我們在啟動了NFS之後又修改了/etc/exports,是不是還要重新啟動nfs呢?這個時候我們就可以用exportfs 命令來使改動立刻生效,該命令格式如下:
  # exportfs [-aruv]
  -a 全部掛載或解除安裝 /etc/exports中的內容
  -r 重新讀取/etc/exports 中的資訊 ,並同步更新/etc/exports、/var/lib/nfs/xtab
  -u 解除安裝單一目錄(和-a一起使用為解除安裝所有/etc/exports檔案中的目錄)
  -v 在export的時候,將詳細的資訊輸出到螢幕上。
具體例子:
  # exportfs -au 解除安裝所有共享目錄
  # exportfs -rv 重新共享所有目錄並輸出詳細資訊
2、nfsstat
檢視NFS的執行狀態,對於調整NFS的執行有很大幫助。
3、rpcinfo
檢視rpc執行資訊,可以用於檢測rpc執行情況的工具,利用rpcinfo -p 可以查看出RPC開啟的埠所提供的程式有哪些。
4、showmount
  -a 顯示已經於客戶端連線上的目錄資訊
  -e IP或者hostname 顯示此IP地址分享出來的目錄
5、netstat
可以查看出nfs服務開啟的埠,其中nfs 開啟的是2049,portmap 開啟的是111,其餘則是rpc開啟的。
最後注意兩點,雖然通過許可權設定可以讓普通使用者訪問,但是掛載的時候預設情況下只有root可以去掛載,普通使用者可以執行sudo。
NFS server 關機的時候一點要確保NFS服務關閉,沒有客戶端處於連線狀態!通過showmount -a 可以檢視,如果有的話用kill killall pkill 來結束,(-9 強制結束)

6.NFS伺服器搭建

伺服器端:
1)檢視系統版本
[[email protected]_server ~]# uname -a
Linux nfs_server 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[[email protected]_server ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
關閉Linux防火牆:service iptables stop

2)軟體安裝
伺服器端安裝nfs-utils和rpcbind兩個服務
檢視系統是否安裝這兩個軟體
[[email protected]_server ~]# rpm -qa|egrep “nfs-utils|rpcbind”
nfs-utils-lib-1.1.5-13.el6.x86_64
rpcbind-0.2.0-13.el6_9.1.x86_64
nfs-utils-1.2.3-75.el6.x86_64
我的系統上已經安裝,如果沒安裝,可以使用
yum install rpcbind nfs-utils -y 來安裝

3)啟動rpcbind和nfs服務
在這裡,要先啟動rpcbind,後啟動nfs服務,因為nfs服務要向rpcbind註冊的,這樣rpcbind才能獲取到nfs的開放埠,因此無論是啟動或者重啟,都要先啟動rpcbind,後啟動nfs服務
/etc/init。關閉NFS服務時,先關閉nfs服務,後關閉rpcbind
[[email protected]_server ~]# /etc/init.d/rpcbind start

[[email protected]_server ~]# /etc/init.d/nfs start

4)配置開機自啟動
chkconfig nfs on
chkconfig –list nfs
chkconfig rpcbind on
chkconfig –list rpcbind

5)配置共享目錄
建立共享目錄
mkdir /data
伺服器的共享目錄屬主和屬組應改成匿名使用者
chown -R nfsnobody:nfsnobody /data
編輯nfs配置檔案
vi /etc/exports
/data 192.168.200.0/24(rw,sync)

說明:/data為共享目錄
192.168.200.0/24為允許訪問的網段

或者cat >> /etc/exports << EOF
/data 192.168.200.0/24(rw,sync)
EOF

配置完/etc/exports不要忘記重新載入一下
/etc/init.d/nfs reload 或者exportfs -r
客戶端:
1)安裝並啟動rpcbind
客戶端安裝rpcbind,也可rpcbind,nfs-utils都安裝
客戶端也要有和伺服器相同的匿名使用者,否則不同的客戶端進行資料修改會有問題。
yum install rpcbind nfs-utils
rpm -qa | egrep “rpcbind|nfs-utils”
/etc/init.d/rpcbind start
ps -ef |grep rpcbind
chkconfig rpcbind on
chkconfig –list rpcbind

2).檢視伺服器端的共享資訊
[[email protected]_client ~]# showmount -e 192.168.200.128
Export list for 192.168.200.128:
/data 192.168.200.0/24

3).客戶端掛載伺服器的共享目錄
mount -t nfs 192.168.200.128:/data /mnt
這樣搭建NFS服務就完成了

關於許可權的分析
 1. 客戶端連線時候,對普通使用者的檢查
   a. 如果明確設定了普通使用者被壓縮的身份,那麼此時客戶端使用者的身份轉換為指定使用者;
   b. 如果NFS server上面有同名使用者,那麼此時客戶端登入賬戶的身份轉換為NFS server上面的同名使用者;
   c. 如果沒有明確指定,也沒有同名使用者,那麼此時 使用者身份被壓縮成nfsnobody;
 2. 客戶端連線的時候,對root的檢查
   a. 如果設定no_root_squash,那麼此時root使用者的身份被壓縮為NFS server上面的root;
   b. 如果設定了all_squash、anonuid、anongid,此時root 身份被壓縮為指定使用者;
   c. 如果沒有明確指定,此時root使用者被壓縮為nfsnobody;
   d. 如果同時指定no_root_squash與all_squash 使用者將被壓縮為 nfsnobody,如果設定了anonuid、anongid將被壓縮到所指定的使用者與組;

7.NFS服務調優
1).客戶端優化
客戶端優化主要是掛載優化,主要引數有:
rw:讀寫許可權
ro:只讀許可權

suid:允許設定suid
nosuid:不允許設定suid

exec:允許在共享檔案系統中直接執行任何二進位制檔案
noexec:不允許在共享檔案系統中直接執行任何二進位制檔案

user:允許使用者去掛載和解除安裝這個共享目錄。並且這個選項也意味著noexec, nosuid, and nodev這個選項,除非後面有覆蓋指定。
nouser:不允許使用者去掛載和解除安裝這個共享目錄

fg | bg 當執行掛載時,該掛載行為是在前臺(fg)還是在後臺(bg)執行。若在前臺執行,則mount會持續嘗試連結,直到成功或time out為止。若為在後臺執行,則mount會在後臺持續多次進行mount,而不會影響到前臺的程式操作。如果網路聯機不穩定,或是伺服器常常需要開關機。建議使用bg比較妥當。

soft| hard :使用掛載時會使用RPC呼叫。如果是hard的情況,那麼當兩者之間有任何一臺主機離線,那RPC會持續呼叫,直到對方恢復聯機為止。而soft,只是在RPC time out後重復呼叫。而非持續呼叫。因此係統的延遲會不這麼明顯,如果伺服器經常開開關關的話,建議使用soft。在生產環境中推薦使用hard,intr這樣的方式來掛載。
intr 當使用hard方式掛載時,若加上intr引數,則RPC的持續呼叫是可以被中斷的

rsize|wsize :讀出(rsize)和寫入(wsize)的區塊大小。這個設定值可以影響客戶端與伺服器端傳輸資料的緩衝儲存容量。一般來說,如果在區域網內(LAN),並且客戶端與伺服器都具有足夠的記憶體,這個值可以設定大一點,比如說32768,提升緩衝區塊將可提升NFS檔案系統的傳輸能力。但設定的值也不要太大,最好是實現網路能夠傳輸的最大值為限。

推薦掛載引數:
umount -lf /mnt 強制解除安裝
Centos5.8 x86_64客戶端掛載優化
mount -t nfs -o noatime,nodiratime,nosuid,noexec,nodev,rw,bg,soft,rsize=32768,wsize=32768 192.168.200.128:/data /mnt
Centos6.5 x86_64客戶端掛載優化
mount -t nfs -o noatime,nodiratime,nosuid,noexec,nodev,rw,bf,hard,intr 192.168.200.128:/data /mnt
最佳效能掛載;mount -t nfs - noatime,nodiratime,rsize=131072,wsize=131072 192.168.200.128:/data /mnt

如何設定開機自動掛載

特別說明:我們重新啟動客戶端之後,我們要重新去掛載nfs,我們可以有兩種方式來實現。

<1>通過把mount–t nfs 192.168.200.128:/data /mnt這條命令寫到/etc/rc.local中,讓它開機就執行。

<2>在/etc/fstab(系統開機啟動分割槽載入項)新增我們的NFS配置:

192.168.200.128:/data /mnt nfs defaults 0 0 。

但在生產環境中,對於共享的NFS目錄,一般不會配置到/etc/fstab裡。因為在客戶端主機重啟時如果由於網路等原因連線不上nfs server時,就會導致客戶機無法啟動的厄運發生。一般是通過把mount -t nfs 192.168.200.128:/data /mnt命令放到rc.local中來實現開機自動掛載NFS。

2)伺服器端優化
NFS核心調優;調整接收/傳送套接字緩衝區大小
cat /proc/sys/net/core/rmem_default
cat /proc/sys/net/core/rmem_max

echo 262144 > /proc/sys/net/core/rmem_default
echo 262144 > /proc/sys/net/core/rmem_max

寫入檔案
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
sysctl -p

8.NFS綜述

NFS優點

1、簡單容易掌握

2、方便快速部署簡單維護容易

3、可靠—從軟體層面上看,資料可靠性高,經久耐用

NFS侷限

1、侷限性是存在單點故障,如果NFSserver宕機了所有客戶端都不能訪問共享目錄,#####我們可以通過rsync來進行資料的同步。或者是通過負載均衡的高可用方案。######

2、在高併發的場合,NFS效率效能有限(一般幾千萬以下pv的網站不是瓶頸,除非網站架構太差。)

3、伺服器共享檔案的客戶端認證是基於IP和主機名的安全性一般(但用於內網則問題不大)

4、NFS資料是明文的,對資料完整性不做驗證(一般是存放於內網,提供內網的伺服器使用。所以安全性相對不是一個問題)

5、多機器掛載伺服器時,連線管理維護麻煩。尤其NFS服務端出問題後,所有客戶端都掛掉狀態(可使用autofs自動掛載解決。)

生產應用場景

中小型網站(2000萬pv以下)線上應用,都有用武之地。入口網站也會有其他方面的應用,。因為入口網站的併發量是超級的大。所以有更加會用專業的儲存來做這件事情。

相關推薦

NFS搭建配置故障排除

1.什麼是NFS? NFS 是Network File System的縮寫,即網路檔案系統。一種使用於分散式檔案系統的協定,由Sun公司開發,於1984年向外公佈。功能是通過網路讓不同的機器、不同的作業系統能夠彼此分享個別的資料,讓應用程式在客戶端通過網路訪問

nfs伺服器的搭建配置監控

NFS介紹 nfs主要功能是通過網路讓不同機器作業系統之間可以共享檔案和目錄,nfs伺服器允許nfs客戶端將遠端nfs伺服器的共享目錄掛載到本地的nfs客戶端中。 在本地的nfs客戶端的機器看來,nfs服務端共享的目錄就好像自己的磁碟分割槽和目錄一樣,一般客戶端掛在到本地目錄的名字可以隨

Tomcat安裝配置優化負載均衡

error png cache 新的 ip地址 ace ppa 不同步 工作目錄 一、常見JavaWeb服務器 1、WebLogic:是BEA公司的產品、WebSphereAS:是IBM公司的產品、JBossAS:紅帽公司的產品,可以自行了解 2、Tomcat服務器:S

Java學習系列(一)Java的執行機制JDK的安裝配置常用命令

Java的執行機制:Java源程式經過編譯器編譯成平臺無關的位元組碼,位元組碼由虛擬機器解釋執行,虛擬機器將每一條要執行的位元組碼傳送給特定平臺的直譯器,直譯器將其翻譯成相應平臺上的機器碼,然後執行在該平臺上,又由於執行時依然保留了解釋這樣就保證了Java程式能跨平臺了。J

Nginx狀態信息(status)配置信息

status;nginx;linux; Nginx狀態信息(status)配置及信息詳解 nginx與php-fpm一樣內建了一個狀態頁,對於想了解nginx的狀態以及監控nginx非常有幫助。為了後續的zabbix監控,我們需要先了解一下nginx的狀態頁。 Ngin

Android + Appium 自動化測試完整的環境配置代碼

完成 通知 文件的 lam tails contain version 自動化測試 開發 環境的的搭建 參考大神博客:https://www.cnblogs.com/fnng/p/4540731.html 該博客有一套詳細的入門教程,奈何時間有點久遠有些東西不能用了,但是參

Nginx負載均衡的詳細配置使用案例.!

Nginx負載均衡的詳細配置及使用案例詳解. 感謝看過這一些列博文和評論的小夥伴, 我把自己所看到的學到的拿到這裡來分享是想和大家一起學習進步, 想聽聽園友給出的意見, 也是對自己學習過程的一個總結. 技術無止境, 我們仍需努力!1,話不多說, 這裡我們來說下很重要的負載均衡, 那麼什

Security配置檔案的基本配置引數名

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/sc

uboot的移植之配置編譯過程5

/***********************************************************************************     分析物件:原始碼主Makefile中進行配置時的一個重要的指令碼:mkconfig(MKCO

redis的CLUSTER SINGLETON SHAREED哨兵模式

redis的部署分為三種 第一種是SINGLETON模式,單機模式部署。即只有一臺redis,所有資料都放這個redis中。一旦這個redis掛了,資料也就over了 第二種是SHAREED模式,共享模式部署。即有多臺redis,所有資料放在多臺redis中,每個redis儲存一部分資料,每

JavaEE開發之SpringMVC中的路由配置引數傳遞

在之前我們使用Swift的Perfect框架來開發服務端程式時,聊到了Perfect中的路由配置。而在SpringMVC中的路由配置與其也是大同小異的。說到路由,其實就是將URL對映到Java的具體類中的具體方法,或者對映到具體的JSP檔案上。本篇部落格主要就闡述瞭如何在SpringMVC中配置路由以及RES

BITMAPFILEHEADERBITMAPINFOHEADERBMP結構

BMP檔案總體上由4部分組成,分別是點陣圖檔案頭、點陣圖資訊頭、調色盤和影象資料,如表5-1所示。表5-1 BMP檔案的組成結構點陣圖檔案頭(bitmap-file header)點陣圖資訊頭(bitmap-information header)彩色表/調色盤(color table)點陣圖資料(bitmap

sqlalchemy limmitoffsetslice操作

在sqlalchemy中,如何使用limit 、offset  、slice(切片)呢?下面我就舉例來講講這三種操作的用法。老規矩,我們先建立一個模型(相信大家寫這程式碼寫的滾瓜爛熟了!)class Arctire(Base):      __tablename__ = "a

Hibernate_day01---Hibernate環境搭建配置檔案核心api介紹

JavaEE三層結構對應的框架 1) web層:struts2框架 2) service層:spring框架 3)dao層:hibernate框架 -- 對資料庫進行crud操作 什麼是框架: 可複用的設計構件 作用:可以少寫一部分程式碼。使用框架寫程式,會幫我們實現一部

OpenVPN下載安裝配置使用

原文:http://www.cnblogs.com/CakaSWM/p/5582236.html 一、目的: 通過雲伺服器的外網地址,將沒有外網的伺服器的埠地址轉發到外網,使其能夠通過外網進行訪問。 二、原理:   1.虛擬專用網VPN   虛擬專用網VPN(virt ual p

OpenVPN安裝配置使用,證書驗證使用者密碼驗證手機連線配置

搞了一天安裝過程中不是很順利,部分文章說明的不是太詳細,因此結合多個文章撰寫的此文,希望能幫上使用OpenVpn的兄弟們。一、OpenVPN     OpenVPN是一個用於建立虛擬專用網路(Virtual Private Network)加密通道的免費開源軟體。使用Op

kafka入門:簡介使用場景設計原理配置叢集搭建

問題導讀: 1.zookeeper在kafka的作用是什麼? 2.kafka中幾乎不允許對訊息進行“隨機讀寫”的原因是什麼? 3.kafka叢集consumer和producer狀態資訊是如何儲存的? 4.partitions設計的目的的根本原因是什麼? 一、入

winxp檔案印表機共享故障排除方法“操作無法完成.鍵入的印表機名不正確,或者指定的印表機沒有連線到伺服器上"

上午同時說,網路印表機列印不了,於是首先看一下列印伺服器IP是不是給換了,結果沒換。 接著嘗試重新新增一下網路印表機,結果問題來了,連不上,提示: 操作無法完成.鍵入的印表機名不正確,或者指定的印表機沒有連線到伺服器上.有關詳細資訊,請單幫助 然後網上查了查資料,說法倒有N

OpenVPN下載安裝配置使用 OpenVPN簡介 OpenVPN是一個用於建立虛擬專用網路(Virtual Private Network)加密通道的免費開源軟體。使用OpenVPN可以方

local 192.168.0.2 #指定監聽的本機IP(因為有些計算機具備多個IP地址),該命令是可選的,預設監聽所有IP地址。 port 1194 #指定監聽的本機埠號 proto udp #指定採用的傳輸協議,可以選擇tcp或udp dev tun #指定建立的通訊隧道型別,可選tun或tap ca c

oracle em企業管理器的安裝配置相關問題

密碼 技術分享 分享 control spa alt .com 企業管理 gre 2017-05-10 一、配置ORACLE_UNQNAME環境變量 二、重建EM資料庫:emca -repos recreate 三、配置EM賬號密碼:DBSNMP、SYSMAN 四、配置EM