天天看點

NFS服務詳細分析

1. NFS服務介紹

    1.1什麼是NFS服務

NFS(Network File System)即網絡檔案系統,它允許網絡中的計算機之間通過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的用戶端應用可以透明地讀寫位于遠端NFS伺服器上的檔案,就像通路本地檔案一樣,也就是說用戶端PC可以挂載NFS伺服器所提供的目錄并且挂載之後這個目錄看起來如同本地的磁盤分區一樣,可以使用cp、cd、mv、rm及df等與磁盤相關的指令。

1.2 NFS服務的優缺點

          1.2.1優點

    a.節省本地存儲空間将常用的資料存放在一台伺服器可以通過網絡通路

    b.簡單容易上手

    c.友善部署非常快速,維護十分簡單

    1.2.2缺點

    a.局限性容易發生單點故障,及server機當機了所有用戶端都不能通路

    b.在高并發下NFS效率/性能有限

    c.用戶端沒用使用者認證機制,且資料是通過明文傳送,安全性一般(一般建議在區域網路内使用)

    d.NFS的資料是明文的,對資料完整性不做驗證

    e.多台機器挂載NFS伺服器時,連接配接管理維護麻煩

2. NFS服務工作原理

          下面給大家看一幅圖

NFS服務詳細分析

2.1 NFS原理簡單介紹

NFS Server伺服器上設定/data目錄被分享,而用戶端可以通過internet将/data目錄挂載到本地的挂載點(常用mnt)後,用戶端就可以進入挂載點目錄進行檔案的讀寫。NFS用戶端所開放的端口是随機的我們不知道,那該怎麼辦呢?那是不是就不能進行資料傳輸了呢?答案當然是NO了那就需要另外一種服務幫他配置設定port了,服務是什麼呢?那就是RPC服務了!想知道什麼是RPC服務那就往下看啦~~~

2.2 RPC簡單介紹

            2.2.1什麼是rpc服務

                RPC(Remote Procedure Call)即遠端過程調用。RPC 最主要的功能就是在指定每個 NFS 功能所對應的 port number ,并且回報給用戶端,讓用戶端可以連結到正确的port上去。

            2.2.2 RPC服務原理

NFS服務詳細分析

a.執行順序:1(注冊端口)--à2(達成協定)-à3(直接建立聯系)--à4(達成協定)--à5(建立連接配接)

b.那為啥rpc能夠找到對應的port呢?這是因為當伺服器在啟動NFS時會随機取用數個port,并且主動的向RPC注冊,是以RPC可以知道每個NFS的port對應的NFS功能,然後RPC又是固定使用port111來監聽用戶端的需求并彙報用戶端的正确的port。  

            2.2.3 portmap

              功能:主要是把RPC程式号轉化為Internet的端口号。

              特點:隻在第一次建立連接配接時候幫助網絡應用程式找到正确的port,當當雙方正确連接配接時,端 口就和應用綁定,portmap就無用。相當于媒婆。                                                      

    2.3NFS Server配置安裝

2.3.1 yum安裝nfs服務rpc服務

[root@nfsserver~]# yum -y install nfs*   #nfs*有nfs-utils、nfs-utils-lib、nfs-utils-lib-devel和nfs4-acl-tools      

2.3.2 檢查rpc服務和nfs服務是否安裝并且安裝成功

[root@nfsserver~]# rpm -qa rpc* nfs* 
nfs-utils-lib-1.1.5-11.el6.x86_64 
nfs-utils-lib-devel-1.1.5-11.el6.x86_64 
rpcbind-0.2.0-11.el6.x86_64
nfs-utils-1.2.3-64.el6.x86_64
nfs4-acl-tools-0.3.3-7.el6.x86_64      

 2.3.3 啟動rpc服務和NFS服務(先啟rpc服務,後啟NFS服務)

[root@nfsserver/]# /etc/init.d/rpcbind start
Startingrpcbind:                             [ OK ]
[root@nfsserver/]# /etc/init.d/nfs start
Starting NFSservices:                                    [  OK  ]
Starting NFSmountd:                                      [  OK  ] 
Starting NFSdaemon:                                       [ OK  ]
Starting RPCidmapd:                                      [  OK  ]      

2.3.4 設定開機自啟

[root@nfsserver/]# chkconfig nfs on 
[root@nfsserver/]# chkconfig rpcbind on  
[root@nfsserver/]# chkconfig --list |grep -E "nfs|rpcbind" 
nfs         0:off  1:off   2:on    3:on   4:on   5:on    6:off         
nfslock     0:off  1:off   2:off   3:on   4:on    5:on   6:off         
rpcbind     0:off  1:off   2:on    3:on   4:on    5:on   6:off      

2.3.5配置共享目錄/data(nfs配置檔案時/etc/exports 預設是空的)

[root@nfsserver~]# vim /etc/exports                                             
#share /datafor nfsclient  
 /data192.168.137.2/10(rw,sync, no_all_squash)      

2.3.6 建立共享目錄

[root@nfsserver ~]# mkdir /data      

2.3.7 平滑加載NFS服務并檢查服務(shoumount -e localhost)

[root@nfsserver~]# /etc/init.d/nfs reload
[root@nfsserver~]# showmount -e localhost                              
Export list forlocalhost:               
/data192.168.137.2/10      

     2.4 NFS Client 配置

2.4.1安裝rpc服務

[root@nfsclient01 ~]# yum -y installrpcbind      

2.4.2 啟動rpc服務并檢查

[root@nfsclient01~]# /etc/init.d/rpcbind start
Startingrpcbind:                                         [  OK  ]
[root@nfsclient01~]# ps -ef| grep "rpc"  
rpc        1208      1 0 13:38 ?        00:00:00 rpcbind 
root       1212  1135  0 13:39 pts/0    00:00:00 grep rpc      

2.4.3 設定開啟自啟并檢查

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

2.4.4 挂載并測試

                     挂載/data到/mnt目錄下

[root@nfsclient01/]# mount -t nfs 192.168.137.7:/data /mnt      

                     大家注意了,如果是新的機子的話在這裡可能會出現這樣的一個error

mount: wrong fstype, bad option, bad superblock on 192.168.137.7:/data,missing 
codepage or helper program, orother error(for several filesystems (e.g. nfs, cifs)you might need a /sbin/mount.<type> helperprogram) In some cases useful info is found insyslog - try dmesg | tail  or so      

                     解決方法是安裝一個nfs-utils之後再挂載一次就ok

[root@nfsclient01 /]# yum -y installnfs-utils
root@nfsclient01 /]# mount -t nfs 192.168.137.7:/data/mnt      

                     最後,将挂載指令寫進rc.local

2.5 拓展:CDN

2.5.1 CDN簡介 

    CDN的全稱是ContentDelivery Network,即内容分發網絡

2.5.2 CDN的基本介紹

    基本思路:盡可能避開網際網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使内容傳輸的更快、更穩定。

    簡介:通過在網絡各處放置節點伺服器,這些節點之間會動态的互相傳輸内容,CDN系統能夠根據網絡流量和各節點的連接配接、負載狀況以及到使用者的距離和響應時間等綜合資訊将使用者的請求重新導向離使用者最近的服務節點上。目的是就近取得所需内容,解決Internet網絡擁擠的狀況,提高使用者通路網站的響應速度。也就是:這些節點之間會動态的互相傳輸内容,對使用者的下載下傳行為最優化,并借此減少内容供應者所需要的帶寬成本,改善使用者的下載下傳速度,提高系統的穩定性。

    基本原理:依靠部署在各地的邊緣伺服器。通過中心平台的負載均衡、内容分發、排程等功能子產品,就近擷取内容,降低網絡擁塞,提高通路響應速度和命中率。關鍵技術:内容存儲和分發技術。

    關鍵點:廣泛采用各種緩存伺服器、全局負載技術

    4要件:分布式存儲,負載均衡,網絡請求重定向,内容管理

2.5.3 CDN的優缺點

    優點:1.本地cache加速,提高企業站點2.鏡像服務,實作跨營運商網絡加速 3.遠端加速 4.帶寬優化 減少遠端通路的帶寬、分擔網絡流量、減輕 原站點web伺服器負載 5.叢集抗攻擊

    缺點:1.實施難度複雜,2投資大

2.5.4CDN的結構圖

NFS服務詳細分析

3. NFS配置知識介紹

3.1 NFS 配置檔案格式

3.1.1 NFS配置檔案:/etc/exports(預設為空)

3.1.2/etc/exports格式

NFS服務詳細分析

            3.1.3 權限參數

權限參數類型      功能
rw 可讀寫的權限
ro 隻讀的權限
sync(同步) 資料同步寫入到記憶體與硬碟中(慢,不容易丢資料)
async(異步) 資料會暫存于記憶體當中,而不是寫入硬碟(快,容易丢資料)
no_root_squash 用戶端用root使用者通路該共享檔案夾時, root使用者不會映射成匿名使用者(極不安全,不建議使用)
root_squash 用戶端用root使用者通路該共享檔案夾是,将root使用者映射為匿名使用者
all_squash 不論登入NFS的使用者身份是誰,他的身份都會被壓縮成匿名使用者(nfsnobody)
anonuid=xxx 指定NFS伺服器的匿名使用者UID
anongid=xxx 指定NFS伺服器的匿名使用者GID
insecure NFS通過1024以上的端口發送
secure NFS通過1024以下的安全TCP/IP端口發送
hide 在NFS共享目錄中共享其子目錄
no_hide
wdelay 如果多個使用者寫入NFS目錄,則歸組寫入(預設)
no_wdelay 如果多個使用者寫入NFS目錄,則立即寫入,當使用async時,無需此設定
subtree_check 在共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的權限(預設)
no_subtree_check 和上面相對,不檢查父目錄權限

    3.2 NFS常用指令

指令 參數 含義
exportfs -a 遞增式更新,對/etc/export增加或修改的部分進行挂載和解除安裝
-i<檔案> 指定配置檔案
-r 更新配置重新讀取/etc/exports
-u 解除安裝指定的目錄
-o 使用指定的參數
-v 顯示共享詳細情況
showmount -a或--all 以host:dir 這樣的格式來顯示客戶主機名和挂載點目錄
-d或--directories 僅顯示用戶端挂載的目錄名
-e或--exports 顯示NFS伺服器輸出清單
-h或--help 顯示幫助資訊
-v或--version 顯示版本資訊
--no-headers 禁止輸出描述頭部資訊

rpcinfo文法:rpcinfo –p [host];rpcinfo

[-n port] –u |-t host program[version]

rpcinfo -p(probe,探測) 列出所有在host用portmap注冊的RPC程式,如果沒有指定的host,就查找本地上的RPC程式
-n(port number,端口号) 根據-t或者-u,使用編号為port的端口,而不是由portmap指定的端口号
-u(UDP) UDP RPC調用host上程式program的version版本,并報告是否接収到響應
-t(TCP) TCP RPC調用host上程式program的version版本(如果指定的話),并報告是否接收到響應
-b(broadcast,廣播) 向程式program的version版本進行RPC廣播,并列出響應的主機
-d(delete,删除) 将程式program的version版本從本機的RPC系統資料庫中删除。隻有root特權使用者才可以使用這個選項
mount(nfs) -t 指定裝置的檔案系統類型
以隻讀方式加載裝置
umount 僅卸除選項中所指定的檔案系統
若無法成功卸除,則嘗試以隻讀的方式重新挂入檔案系統

3.3 NFS出問題解決方法及生産應用場景:

     大中小型網站(2000wpv以下)線上應用,當web伺服器少的時候,棄用nfS,同步資料到web伺服器上(上傳資料太快的話,同步延遲較大)

             看配置是否有問題à看服務是否開啟à挂載沒反應à挂載沒反應(看ping通?然後看telnet通不通)

這次總結就到此為止,這次總結由于事情較多耽擱了,時間比較長,忘見諒!這次總結感悟:無論做什麼事情隻有動手去做才會發現問題,才能更快的成長起來!要有求甚解的态度才能提高自己!

繼續閱讀