CentOS 6.X 上安裝配置 NFS 目錄共享

雨林君發表於2018-08-07

NFS 簡介

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

目前 NFS 主要有三個版本(NFSv2,NFSv3,NFSv4)。 NFSv2 和 NFSv3 除了 3 版本支援更多的新特性以外,最主要的區別應該就是 NFSv2 是使用 UDP 協議進行傳輸的,所以 NFSv2 的連線在複雜網路環境下可能沒有那麼可靠,而 NFSv3 同時支援 UDP 和 TCP 協議。而 NFSv4 則是在 NFSv3 的基礎上提升了效能,強制了安全策略,引入有狀態的協議等...

當 Client 端要掛載 NFS 共享卷的時候,會傳送 RPC 請求給服務端,而 NFS 服務端會在使用者驗證後將一個隨機的 Cookie 傳送至客戶端,以便客戶端使用這個 Cookie 來認證那些要訪問的共享卷。 NFS 的驗證支援內建的 IP/主機許可權分配,同時也被 tcp wrappers 所限制。

NFS 架構圖

上面這段話以及架構圖都是我從網上找的,主要的作用大概就是撐個場子這樣,你懂的。如果你只想快速地搭建一個 CentOS 上的 NFS 環境,跳過這段 ...

一、環境

1 軟體環境

Windows 10 x64

VMWare 12 x64

CentOS 6.7 x64 * 3

nfs-utils

nfs-utils-lib

rpcblind
複製程式碼

2 伺服器規劃

IP OS Function Modlue Shared Folder Mount Folder
192.168.174.200 CentOS 6.7 x64 NFS Server /data/shared
192.168.174.201 CentOS 6.7 x64 NFS Client /data/shared
192.168.174.202 CentOS 6.7 x64 NFS Client /data/shared

注:

  • NFS Client 的數量可以根據實際情況自行調增更多。

二、NFS Server 環境準備

1 建立共享目錄

登入連線到規劃的 NFS Server 節點,使用 root 使用者執行如下命令建立共享目錄

[root@hadoop1 ~]# mkdir -p /data/shared
複製程式碼

注:

  • 建立的共享目錄的位置根據實際情況而定。比如,如果你的伺服器上專門掛載了一塊用於存放資料的大容量磁碟,該磁碟掛載到了 /data1 目錄,那麼你可以將共享目錄建立在 /data1 下面(/data1/shared)

  • 這個共享目錄是實際存放資料檔案的位置,其他的 NFS Client 訪問該位置獲取共享的檔案資訊。

2 給共享目錄讀寫許可權

root 使用者執行如下命令

[root@hadoop1 data]# cd /data

[root@hadoop1 data]# pwd

/data

[root@hadoop1 data]# chmod -R 777 shared

[root@hadoop1 data]# ll -d shared

drwxrwxrwx. 2 root root 4096 Aug  6 06:18 shared
複製程式碼

三、安裝與配置 NFS Server

可以根據伺服器的配置以及具體的業務需求選取一臺伺服器作為 NFS Server,NFS Server 是用作檔案物理儲存的節點。因此,要考慮的是 NFS Server 伺服器的磁碟資源是否滿足需求。此處我選取 192.168.174.200 作為 NFS Server。SSH 連線到 192.168.174.200 伺服器過程省略...

1 檢查伺服器是否已經安裝有 nfs-utils

[root@hadoop1 ~]# rpm -qa | grep nfs-utils

[root@hadoop1 ~]#
複製程式碼

如果已經安裝了 nfs-utils 及 nfs-utils-lib 包,可以直接跳過第 2 步

2 安裝 nfs-utils

root 使用者執行如下命令安裝 nfs-utils

[root@hadoop1 ~]# yum install -y nfs-utils
複製程式碼

注:

  • 執行如上命令會安裝 nfs-utils.x86_64 1:1.2.3-78.el6 包以及其依賴的包(版本可能不同)
nfs-utils-lib.x86_64 0:1.1.5-13.el6

keyutils.x86_64 0:1.4-5.el6

libgssglue.x86_64 0:0.1-11.el6

libtirpc.x86_64 0:0.2.1-15.el6

rpcbind.x86_64 0:0.2.0-16.el6
...
複製程式碼
  • rpcbind 是用於埠對映的包,在 CentOS 5 上對應的是 portmap。

3 配置 NFS Server

NFS 的配置檔案位於 /etc/exports,在 CentOS 6.7 中,/etc/exports 檔案已經存在,內容為空。因此,我這兒使用 root 使用者直接編輯此檔案配置即可(如果沒有此檔案,可以直接建立此檔案即可 touch /etc/exports 或者 vim /etc/exports)。

[root@hadoop1 ~]# vim /etc/exports
複製程式碼

在檔案中新增如下內容:

/data/shared 192.168.174.201(rw,sync,all_squash)
/data/shared192.168.174.202(rw,sync,all_squash)
複製程式碼

注:

  • /data/shared192.168.174.201(rw,sync,all_squash) 表示 NFS Server 上的共享目錄 /data/shared 允許來自 192.168.174.201 伺服器上的所有使用者(all_squash)的讀寫(rw)操作許可權。且資料檔案採用同步(sync)方式進行共享

  • 上面的檔案也可以配置成一行 /data/shared192.168.174.*(rw,sync,all_squash) ,表示允許 192.168.174 這個網段的所有機器的訪問

  • 配置檔案中的內容格式如下,'()' 中的選項列表之間沒有空格

<輸出目錄> [客戶端1 選項(訪問許可權,同步方式,使用者對映)] [客戶端2 選項(訪問許可權,同步方式,使用者對映)]

  • 具體的配置詳解不在此列出了,可以參考 CentOS 官網的解釋 https://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-nfs-server-config-exports.html

4 NFS Server 防火牆配置

root 使用者執行如下命令編輯 iptables 檔案

[root@hadoop1 shared]# vim /etc/sysconfig/iptables
複製程式碼

新增如下內容,並儲存退出

### rpcbind
-A INPUT -p udp -m multiport --dports 111,875,892,2049,10053,32769 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m multiport --dports 111,875,892,2049,10053,32803 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT  -p udp -m multiport --sports 111,875,892,2049,10053,32769 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT  -p tcp -m multiport --sports 111,875,892,2049,10053,32803 -m state --state ESTABLISHED -j ACCEPT
複製程式碼

如下示例:

防火牆配置

注:

  • 如果 NFS Server 沒有開啟防火牆服務,則可以跳過此步驟。

  • 由於 rpcbind 即對映了 tcp 埠,也對映了 udp 埠,因此需要配置 tcp/udp

  • 上面配置的這些埠都是 nfs server 服務預設監聽的埠,預設的配置在 /etc/sysconfig/nfs 檔案中可以檢視到

5 啟動 nfs

在啟動 nfs 之前必須先啟動 rpcbind,root 使用者執行如下命令啟動 rpcbind

[root@hadoop1 data]# service rpcbind start

Starting rpcbind:                                          [  OK  ]
複製程式碼

root 使用者執行如下命令啟動 nfs

[root@hadoop1 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 Client

使用 SSH 分別連線到 NFS Client 對應的兩個節點 192.168.174.201/202

1 安裝 nfs 包

使用 root 使用者分別在兩臺客戶端伺服器上執行如下命令安裝 nfs

[root@hadoop2 ~]# yum install -y nfs-utils
複製程式碼

注:

  • NFS 客戶端也要安裝 nfs-utils 包,不然掛載不了

2 建立本地掛載目錄

使用 root 使用者分別在兩臺客戶端伺服器上執行如下命令建立兩個本地目錄,用於將 NFS Server 上的共享目錄對映到本地目錄。

[root@hadoop3 ~]# mkdir -p /data/shared

[root@hadoop3 ~]# cd /data

[root@hadoop3 data]# pwd

/data

[root@hadoop3 data]# chmod -R 777 shared

[root@hadoop3 data]# ll -d shared/

drwxrwxrwx. 2 root root 4096 Aug  6 06:43 shared/
複製程式碼

注:

  • 上面命令我將 NFS 客戶端的本地目錄與 NFS Server 端的共享目錄建立在相同的路徑和相同的名稱,但其實此處可以與 NFS Server 端不兩隻,此處我只是為了便於我好記憶。

3 掛載 NFS Server 共享目錄到本地

[root@hadoop2 data] mount -t nfs 192.168.174.200:/data/shared /data/shared
複製程式碼

檢視掛載後的伺服器檔案系統

[root@hadoop2 ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda2              97G  4.3G   87G   5% /

tmpfs                 1.9G   72K  1.9G   1% /dev/shm

/dev/sda1             283M   41M  227M  16% /boot

192.168.174.200:/data/shared

                       97G   16G   76G  18% /data/shared
複製程式碼

可以看到多出了一個將 192.168.174.200:/data/shared 掛載到本地的 /data/shared 目錄的記錄

五、驗證

1 在 NFS Client 節點建立檔案

在 192.168.174.202 伺服器上執行如下命令

[root@hadoop3 data]# cd shared

[root@hadoop3 shared]# vim test.text
複製程式碼

輸入如下內容,儲存退出:

This is a test text!
複製程式碼

檢視 192.168.174.202 伺服器上的 /data/shared 目錄,有 test.text 檔案

[root@hadoop3 shared]# pwd

/data/shared

[root@hadoop3 shared]# ll

total 4

-rw-r--r--. 1 nfsnobody nfsnobody 21 Aug  6 09:38 test.text

[root@hadoop3 shared]# cat test.text

This is a test text!
複製程式碼

2 檢視另外兩個節點的目錄

登入 192.168.174.200/201 伺服器,檢視 /data/shared 目錄,可以看到兩個節點上都能訪問剛剛在 202 上建立的 test.text 檔案,如下所示:

200:

[root@hadoop1 shared]# pwd

/data/shared

[root@hadoop1 shared]# ll

total 4

-rw-r--r--. 1 nfsnobody nfsnobody 21 Aug  6 09:38 test.text
複製程式碼

201:

[root@hadoop2 shared]# pwd

/data/shared

[root@hadoop2 shared]# ll

total 4

-rw-r--r--. 1 nfsnobody nfsnobody 21 Aug  6 09:38 test.text
複製程式碼

3 在 NFS Client 上修改檔案內容

在 192.168.174.201 上修改檔案,並在檔案下方新增一行 Hello World 並儲存退出

[root@hadoop2 shared]# vim test.text

This is a test text!

Hello World
複製程式碼

4 檢視另外兩個節點的檔案內容

檢視 192.168.174.200/202 上的 /data/shared/test.text 檔案內容:

200:

[root@hadoop1 shared]# pwd

/data/shared

[root@hadoop1 shared]# cat test.text

This is a test text!

Hello World
複製程式碼

202:

[root@hadoop3 shared]# pwd

/data/shared

[root@hadoop3 shared]# cat test.text

This is a test text!

Hello World
複製程式碼

可以看到更改後的內容也同時在另外兩個節點上生效了。

至此,我們在 CentOS 6.X 上安裝配置 NFS 共享檔案目錄就完成了。

附錄:NFS 相關資料

下面是收集的一些 NFS 相關的資訊,如有興趣可自行查閱。

sourceforge 上的 Linux NFS 解釋: nfs.sourceforge.net/

Wikipedia 上關於 NFS 的解釋: en.wikipedia.org/wiki/Networ…

簡體中文版本 NFS 解釋: wiki.archlinux.org/index.php/N…

Linux.die nfs: linux.die.net/man/5/nfs

Freebsd nfs: www.freebsd.org/doc/handboo…

相關文章