Linux自學筆記——檔案共享之NFS

技術小阿哥發表於2017-11-27

NFS:Network File System,網路檔案系統,用於實現unix或類unix系統之間通過網路共享資源,而傳統的檔案系統在核心中實現;

NFS原理:

NFS支援的功能很多,不同的功能會使用不同的程式,每啟動一個功能就需要開啟一些埠傳輸資料,因此,NFS功能所對應的埠不是固定的,而是隨機取用一些未被使用的埠。這樣一來,客戶端與NFS伺服器之間的溝通就成了一大問題。NFS藉助rpc解決這一問題。

RPC(Remote Procedure Call protocol),遠端過程呼叫,函式呼叫(遠端主機上的函式)。一部分功能由本地程式完成,另一部分功能由遠端主機上的函式完成;

RPC最主要的功能就是指定每個NFS功能所對應的埠號,並且告知客戶端,讓客戶端可以連線到正確的埠上去。負責RPC服務的一支關鍵daemon叫做portmap(centos6.x之後稱為rpcbind),當伺服器在啟動NFS時會隨機取用數個埠,並主動向RPC註冊,portmap就會動態分配埠號給哪些提供NFS服務的相關daemon,因此當client端在對NFS Server提出服務請求時,必須先聯絡portmap程式(監聽在111埠),portmap將NFS服務相關daemon的埠號告知,然後client才知道要跟哪些埠號溝通。

NFS依賴於rpc,所以要啟動NFS必須要先啟動rpc,否則NFS無法完成埠註冊;

版本:NFS由sun公司研發

NFSv1

NFSv2,udp

NFSv3,

NFSv4.0

NFSv4.1, 

NFSv4.2

pNFS: parallel

NIS:Network Information System

身份認證:集中於某伺服器完成身份認證

NFS:基於IP的認證

RPC:

NFS:2049/tcp,2049/udp

RPC服務:portmapper

rpcinfo:report RPC information

NFS伺服器:nfsd,mountd,idmapd

檢視NFS伺服器端共享的檔案系統:

showmount –e NFSSERVER_IP

 Linux自學筆記檔案共享之NFS

掛載NFS檔案系統:

mount –t nfs SERVER:/path/to/sharedfs /path/to/mount_point

配置檔案/etc/exports格式:

檔案系統 客戶端(選項)客戶端(選項)

客戶端:IP、FQDN或DOMAIN、NETWORK

exportfs:維護exports檔案匯出的檔案系統表的專用工具:

exportfs -ar :重新匯出所有的檔案系統;

exportfs -au :關閉匯出的所有檔案系統

exportfs -u FS :關閉指定的匯出的檔案系統

 Linux自學筆記檔案共享之NFS

Note:此工具一般用於更改exports檔案時建立新的共享時,無須重啟服務,利用工具重新匯出檔案系統;

開機自動掛載nfs:

編輯配置檔案/etc/fstab;

SERVER:/PATH/TO/EXPORTED_FS /mount_point nfs deaults,_netdev 0 0

補充材料:

/etc/exports檔案中的項的格式相當簡單。要共享一個檔案系統,只需要編輯/etc/exports並使用下面的格式給出這個檔案系統(和選項)即可:

Directory(or file system) client1(option1,option2)client2(option1,option2)

常用選項:

有幾個常用的選項可以對NFS實現進行定製。這些選項包括:

Secure:這個選項是預設選項,它使用了1024以下的TCP/IP埠實現NFS的連線。指定insecure可以禁用這個選項。

rw:這個選項允許NFS客戶機進行讀寫訪問。預設選項是隻讀的。

async:這個選項可以改進效能,但是如果沒有完全關閉NFS守護程式就重新啟動了NFS伺服器,這也可能會造成資料丟失。

no_wdelay:這個選項關閉寫延時。如果設定了async,那麼NFS就會忽略這個選項。

nohide:如果講一個目錄掛載到另外一個目錄之上,那麼原來的目錄通常就被隱藏起來或看起來像空的一樣。要禁用這種行為,需啟用hide選項。

no_subtree_check:這個選項關閉子樹檢查,子樹檢查會執行一些不想忽略的安全性檢查。預設選項是啟用子樹檢查。

no_auth_nlm:這個選項也可以作為insecure_locks指定,它告訴NFS守護程式不要對加鎖請求進行認證。如果關心安全性問題,就要避免使用這個選項。預設選項是auth_nlm或secure_locks。

mp(mountpoint=path):通過顯式地宣告這個選項,NFS要求掛載所匯出的目錄。fsid=num;這個選項通常都在NFS故障恢復的情況中使用。如果希望實現NFS的故障恢復,請參考NFS文件。

使用者對映

通過NFS中的使用者對映,可以將偽或實際使用者和組的標識賦給一個正在對NFS捲進行操作的使用者。這個NFS使用者具有對映所允許的使用者和組的許可許可權。對NFS卷使用一個通用的使用者/組可以提供一定的安全性和靈活性,而不會帶來很多管理符合。在使用NFS掛載的檔案系統上的檔案時,使用者的訪問通常都會受到限制,這就是說使用者都是以匿名使用者的身份對檔案進行訪問的,這些使用者預設情況下多這些檔案只有只讀許可權。這種行為對於root使用者來說尤其重要。然而,實際上的確存在這種情況:希望使用者以root使用者或所定義的其它的使用者的身份訪問遠端檔案系統上的檔案。NFS允許指定訪問遠端檔案的使用者—通過使用者標識號(UID)和組標識號(GID),可以禁用正常的squash行為。

使用者對映的選項包括:

root_squash:這個選項不允許root使用者訪問掛載上來的NFS卷。

no_root_squash:這個選項允許root使用者訪問掛載上來的NFS卷。

all_squash:這個選項對於公共訪問的NFS捲來說非常有用,它會限制所有的UID和GID,只使用匿名使用者。預設設定是no_all_squash

anonuid和anongid:這兩個選項將匿名UID和GID修改成特定使用者和組賬號。

客戶端掛載時可以使用的特殊選項:

Client

Mounting remote directories

Before mounting remote directories 2 daemons should be be started first:

rpcbind

rpc.statd

rsize 的值是從伺服器讀取的位元組數。wsize 是寫入到伺服器的位元組數。預設都是1024, 如果使用比較高的值,如8192,可以提高傳輸速度。 

The timeo value is the amount of time, in tenths of a second, to wait before resending a transmission after an RPC timeout. After the first timeout, the timeout value is doubled for each retry for a maximum of 60 seconds or until a major timeout occurs. If connecting to a slow server or over a busy network, better performance can be achieved by increasing this timeout value.

The intr option allows signals to interrupt the file operation if a major timeout occurs for a hard-mounted share.

示例:共享一個檔案系統;nfs共享服務端地址:192.168.19.134,客戶端地址:192.168.19.130

  1. 建立共享目錄;
    Linux自學筆記檔案共享之NFS
  2. 編輯配置檔案/etc/exports,定義匯出/nfs/sharedata檔案至192.168.19.0/24這個網路,但僅192.168.19.130有rw許可權,其餘均為ro許可權;
    Linux自學筆記檔案共享之NFS

    Note:這裡我們測試使用,允許root使用者訪問掛載上來的NFS卷
  3. 啟動nfs服務,並檢視埠是否開啟;
    Linux自學筆記檔案共享之NFS
  4. 用ip地址為192.168.19.130的另一臺主機作為客戶端,掛載nfs服務的/nfs/sharedata、
    Linux自學筆記檔案共享之NFS
  5. 進入掛載目錄,執行寫操作,發現寫操作失敗;
    Linux自學筆記檔案共享之NFS
  6. 在服務端授權一個使用者對/nfs/sharedata目錄的rwx許可權,再在客戶端建一個相同uid的使用者

    1) 授權一個使用者;
    Linux自學筆記檔案共享之NFS

    2) 在客戶端新建一個同之上claude使用者uid相同的使用者;
    Linux自學筆記檔案共享之NFS

    3) 切換claude_liu使用者後發現有了寫許可權;
    Linux自學筆記檔案共享之NFS

示例2:兩臺web伺服器,共享關係型資料庫,共享NFS伺服器,利用DNS記錄輪詢提供負載均衡;

環境:web伺服器1:192.168.19.134

Web伺服器2:192.168.19.130

DNS伺服器、mysql伺服器:192.168.19.135

NFS伺服器:192.168.19.136

  1. 搭建DNS伺服器(以下操作在192.168.135伺服器上實現)

    1) 安裝bind程式包;

    #yum install bind –y

    2) 編輯dns配置檔案/etc/named.conf,作如下修改;
    Linux自學筆記檔案共享之NFS

    3) 編輯/etc/named.rfc1912.zones檔案,新增如下兩個區域
    Linux自學筆記檔案共享之NFS

    4) 編輯/var/named目錄下的正向解析庫檔案;
    Linux自學筆記檔案共享之NFS

    5) 編輯/var/named目錄下的反向解析庫檔案;
    Linux自學筆記檔案共享之NFS

    6) 修改許可權;
    Linux自學筆記檔案共享之NFS

    修改屬主屬組;
    Linux自學筆記檔案共享之NFS

    7) 檢查配置檔案語法;
    Linux自學筆記檔案共享之NFS

    8) 測試;

    測試正向解析:
    Linux自學筆記檔案共享之NFS

    測試反向解析:
    Linux自學筆記檔案共享之NFS
  2. 搭建NFS伺服器(以下操作在192.168.19.136伺服器上實現);

    1) 建立共享目錄;
    Linux自學筆記檔案共享之NFS

    2) 編輯/etc/exports檔案,新增如下內容;
    Linux自學筆記檔案共享之NFS

    3) 啟動服務;
    Linux自學筆記檔案共享之NFS

    4) 檢視當前共享的目錄
    Linux自學筆記檔案共享之NFS
  3. 搭建mysql伺服器(以上操作在192.168.19.135伺服器上實現);

    1) 建立相關目錄,掛載nfs共享目錄;
    Linux自學筆記檔案共享之NFS

    2) 建立mysql組和使用者;
    Linux自學筆記檔案共享之NFS

    3) 二進位制編譯安裝mariadb-5.5.46;

    解壓mariadb-5.5.46-linux-x86_64.tar.gz到/usr/local目錄下,並建立連結檔案,進入相關目錄;
    Linux自學筆記檔案共享之NFS

    4) 屬主屬組修改;
    Linux自學筆記檔案共享之NFS

    5) 指明使用者和資料庫位置生成後設資料庫;
    Linux自學筆記檔案共享之NFS

    檢視初始化後生成的資料;
    Linux自學筆記檔案共享之NFS

    6) 複製執行指令碼,並將其加入服務列表中;
    Linux自學筆記檔案共享之NFS

    7) 複製配置檔案並編輯配置檔案新增以下三行;
    Linux自學筆記檔案共享之NFS

    8) 配置環境變數;
    Linux自學筆記檔案共享之NFS

    其中mysql.sh中的內容為:

    export PATH=/usr/local/mysql/bin:$PATH

    9) 啟動服務並測試;
    Linux自學筆記檔案共享之NFS

    成功進入mysql;
    Linux自學筆記檔案共享之NFS 

    10) 建立資料庫,並建立使用者並授權;

    建立資料庫;
    Linux自學筆記檔案共享之NFS

    建立使用者並授權;
    Linux自學筆記檔案共享之NFS

    重新整理許可權;
    Linux自學筆記檔案共享之NFS

    至此。Mysql伺服器配置完成;
  4. 搭建WEB伺服器1(以下操作在192.168.19.134伺服器上實現)

    1) 安裝相關程式包;
    Linux自學筆記檔案共享之NFS

    2) 建立相關目錄,並掛載nfs共享目錄;
    Linux自學筆記檔案共享之NFS

    3) 編輯httpd配置檔案/etc/httpd/conf/httpd.conf;

    首先,註釋以下項;
    Linux自學筆記檔案共享之NFS

    其次,新增虛擬主機;
    Linux自學筆記檔案共享之NFS

    4) 安裝wordpress;

    解壓縮wordpress程式包;
    Linux自學筆記檔案共享之NFS

    複製wp-config-sample.php檔案為wp-config.php,並編輯此配置檔案;
    Linux自學筆記檔案共享之NFS

    5) 在/etc/sysconfig/network-scripts/ifcfg-eth0中新增DNS地址;
    Linux自學筆記檔案共享之NFS

    6) 用此web伺服器就可以通過域名或者ip地址訪問安裝wordpress了。
    Linux自學筆記檔案共享之NFS

    7) 在此伺服器上發一條動態;
    Linux自學筆記檔案共享之NFS
  5. 搭建web伺服器2(以下操作在192.168.19.130上進行)

    搭建的具體過程跟上面一樣,建虛擬主機時ip地址改成192.168.19.130即可;

    當我們使用此臺伺服器訪問www.claude666.com 或ip地址時。同時可以看到在192.168.19.134伺服器上發步的動態。

    以上就是本次示例的全部過程,兩臺web伺服器,利用dns伺服器解析通過mysql儲存結構化資料,nfs儲存非結構化資料,通過nfs共享,訪問應用,以達到負載均衡的效果。


本文轉自 claude_liu 51CTO部落格,原文連結:http://blog.51cto.com/claude666/2049872,如需轉載請自行聯絡原作者


相關文章