1. 程式人生 > >1.NFS服務配置

1.NFS服務配置

NFS介紹 NFS服務端配置 NFS客戶端配置

[toc]

NFS服務配置

一、NFS介紹

1.1 NFS文件系統

什麽是文件系統,NFS文件系統又是什麽?
簡單的說,文件系統就是通過軟件對磁盤上的數據進行組織和管理的一種機制,對其的一種封裝或透視。

NFS,Network File System。顧名思義,網絡文件系統,即通過網絡,對在不同主機上的文件進行共享。

1.2 NFS起源與應用場景

NFS最早由Sun公司開發,分2,3,4三個版本,2和3由Sun起草開發,4.0開始Netapp公司參與並主導開發,最新為4.1版本,更新比較慢其實4.1是從2010年就開始使用了。

NFS數據傳輸基於RPC協議,RPC為Remote Procedure Call的簡寫。

NFS應用場景是:A,B,C三臺機器上需要保證被訪問到的文件是一樣的,A共享數據出來,B和C分別去掛載A共享的數據目錄,從而B和C訪問到的數據和A上的一致
技術分享圖片

1.3 NFS架構

為什麽需要使用NFS呢?
在生產環境,我們很少使用單機部署應用,因為單機存在單點故障,一旦宕機,將無法為前端業務提供服務,這是客戶無法容忍的。現在提倡的高可用及7*24服務,是我們追求的目標。 對於一些小的應用,雙機成為了主流。我們來看一種簡單集群場景, 應用分別部署在A及B上, 前端通過F5或著web服務器訪問應用。如下圖:

技術分享圖片

那麽當客戶端發出一個請求時,F5根據一定的機制進行轉發,有可能有A服務器進行響應,也有可能

由B服務器進行響應。 而在web應用中上傳一些靜態文件是很常見的一種功能,如圖片。假設用戶在某一時間,上傳了一張照片到A服務器上,那麽下次訪問時,被F5路由到了B服務器上,由於B服務器上並沒有存儲上傳的照片,所以將造成用戶無法看到自己上傳的照片。

那麽很容易想到,是不是可以把文件上傳到一個公用的服務器上呢? 這樣不管訪問的是A還是B,讀、取文件都只存在一份。答案是肯定的,這個公用的服務器我們也稱之為文件服務器。上面的架構就演變成了下面的架構:
技術分享圖片

NFS提供了一種機制,可以讓A、B訪問C中的一個共享目錄,就像是操作本地文件一樣。

註:此處當然也可以通過sftp或ftp進行文件上傳和下載。

1.4 NFS的原理:

技術分享圖片

首先:NFS包括兩部分,服務端及客戶端

由於NFS服務功能很多,會有很多端口,這些端口還有可能不固定,那麽客戶端就無法與服務器進行通信,因為程序間通信必須通過端口(tcp/udp都是端到端通信),那麽就需要一個中間的橋接機制,RPC進程即充當這樣一個角色,RPC的端口是一定的(111),當NFS啟動時,會向RPC進行註冊, 那麽客戶端PRC就能與服務器RPC進行通信, 從而進行文件的傳輸。

當客戶端用戶打開一個文件或目錄時,內核會判斷,該文件是本地文件還是遠程共享目錄文件,如果是遠程文件則通過RPC進程訪問遠程NFS服務端的共享目錄,如果是本地文件,則直接打開。
為了更好的並發,RPC進程及NFS進程都有多個。

二、服務端配置NFS

2.1 需求:兩臺機器。xavi001為服務器(192.168.72.130),xavi002為客戶端進行測試(192.168.72.133):

2.2 在服務端和測試段都安裝上rpcbind

# yum install -y nfs-utils      //yum工具安裝nfs-utils時會一並安裝recbind

小技巧關於安裝包印象整體安裝進度時,可以把相關安裝源禁掉

以下以epel為例

[root@xavi ~]# cd /etc/yum.repos.d/
[root@xavi yum.repos.d]# ls
CentOS7-Base-163.repo  CentOS-fasttrack.repo  CentOS-Vault.repo
CentOS-CR.repo         CentOS-Media.repo      epel.repo
CentOS-Debuginfo.repo  CentOS-Sources.repo    epel-testing.repo
[root@xavi yum.repos.d]# mv epel.repo epel.repo.1
  • 將安裝的epel文件move到另外地方,這樣禁止好,可以加快安裝進程。

2.3 編輯配置文件

[root@xavi ~]# vim /etc/exports 

/home/nfstestdir 192.168.72.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)

小括號內的權限選項含義:

rw: 讀寫

ro: 只讀

sync: 同步模式,內存數據實時寫入磁盤

async :非同步模式

no_root_squash: 客戶端掛載NFS共享目錄後,root用戶不受約束,權限很大

root_squash: 與上面選項相對,客戶端上的root用戶收到約束,被限定成某個普通用戶

all_squash:
客戶端上所有用戶在使用NFS共享目錄時都被限定為一個普通用戶

anonuid/anongid: 和上面幾個選項搭配使用,定義被限定用戶的uid和gid

2.4 創建目錄並修改權限,方便後面測試

[root@xavi ~]# chmod 777 /home/nfstestdir/

2.5 查看rpc服務是否啟動

[root@xavi ~]# netstat -lntp  //111端口說明rpcbind已啟動
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1866/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1050/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1048/cupsd          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1693/master         
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::22                   :::*                    LISTEN      1050/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      1048/cupsd          
tcp6       0      0 ::1:25                  :::*                    LISTEN      1693/master   
[root@xavi ~]# ps aux |grep rpc  //rpcbind服務已啟動
root        385  0.0  0.0      0     0 ?        S<   10:00   0:00 [rpciod]
rpcuser    2657  0.0  0.0  44464  1824 ?        Ss   10:11   0:00 /usr/sbin/rpc.statd
rpc        2659  0.0  0.0  64964  1348 ?        Ss   10:11   0:00 /sbin/rpcbind -w
root       2660  0.0  0.0  42564   940 ?        Ss   10:11   0:00 /usr/sbin/rpc.mountd
root       2661  0.0  0.0  43812   536 ?        Ss   10:11   0:00 /usr/sbin/rpc.idmapd
root       2700  0.0  0.0 112684   976 pts/0    S+   10:12   0:00 grep --color=auto rpc

2.6 啟動NFS服務,這是rpc的相關聯的服務也會被啟動

[root@xavi ~]# systemctl start nfs
[root@xavi ~]# ps aux |grep nfs
root       2672  0.0  0.0      0     0 ?        S<   10:11   0:00 [nfsd4_callbacks]
root       2678  0.0  0.0      0     0 ?        S    10:11   0:00 [nfsd]
root       2679  0.0  0.0      0     0 ?        S    10:11   0:00 [nfsd]
root       2680  0.0  0.0      0     0 ?        S    10:11   0:00 [nfsd]
root       2681  0.0  0.0      0     0 ?        S    10:11   0:00 [nfsd]
root       2682  0.0  0.0      0     0 ?        S    10:11   0:00 [nfsd]
root       2683  0.0  0.0      0     0 ?        S    10:11   0:00 [nfsd]
root       2684  0.0  0.0      0     0 ?        S    10:11   0:00 [nfsd]
root       2685  0.0  0.0      0     0 ?        S    10:11   0:00 [nfsd]
root       2690  0.0  0.0 112680   976 pts/0    S+   10:11   0:00 grep --color=auto nfs
[root@xavi ~]# ps aux |grep rpc
root        385  0.0  0.0      0     0 ?        S<   10:00   0:00 [rpciod]
rpcuser    2657  0.0  0.0  44464  1824 ?        Ss   10:11   0:00 /usr/sbin/rpc.statd
rpc        2659  0.0  0.0  64964  1348 ?        Ss   10:11   0:00 /sbin/rpcbind -w
root       2660  0.0  0.0  42564   940 ?        Ss   10:11   0:00 /usr/sbin/rpc.mountd
root       2661  0.0  0.0  43812   536 ?        Ss   10:11   0:00 /usr/sbin/rpc.idmapd
root       2700  0.0  0.0 112684   976 pts/0    S+   10:12   0:00 grep --color=auto rpc

2.7 設置NFS開機啟動項

[root@xavi ~]# systemctl enable nfs      
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

三、NFS客戶端設置

上節內容中我們已經安裝好了nfs-utils包

3.1 shwomount查看服務端共享目錄

使用showmount -e IP可以查看NFS的共享情況

[root@xavi-002 ~]# showmount -e 192.168.72.130
Export list for 192.168.72.130:
/home/nfstestdir 192.168.241.0/24 //共享目錄為/home/nfstestdir,信任主機為192.168.241.0/24網段

共享目錄為/home/nfstestdir,信任主機為192.168.241.0/24網段

如果沒有出現共享目錄,有可能是服務端沒有開啟rpc服務,或者現在客戶端的防火墻沒有關閉,註意NFS是特殊的服務,必須關閉防火墻

[root@xavi ~]# setenforce 0
setenforce: SELinux is disabled
[root@xavi-002 ~]# getenforce
Disabled

3.2 在客戶端掛載NFS

[root@xavi-002 ~]# mount -t nfs 192.168.72.130:/home/nfstestdir /mnt/
[root@xavi-002 ~]# df -h
文件系統                         容量  已用  可用 已用% 掛載點
/dev/sda3                         17G  3.6G   13G   23% /
devtmpfs                         479M     0  479M    0% /dev
tmpfs                            489M     0  489M    0% /dev/shm
tmpfs                            489M  7.1M  482M    2% /run
tmpfs                            489M     0  489M    0% /sys/fs/cgroup
/dev/sda1                        197M  109M   88M   56% /boot
tmpfs                             98M     0   98M    0% /run/user/0
192.168.72.130:/home/nfstestdir   17G   10G  6.2G   63% /mnt

3.3 在增加的/mnt分區,就是NFS共享的目錄,在該目錄下創建測試文件:

[root@xavi-002 ~]# cd /mnt/
[root@xavi-002 mnt]# ls
[root@xavi-002 mnt]# touch xavilinux.123
[root@xavi-002 mnt]# ls -l
總用量 0
-rw-r--r-- 1 xavi xavi 0 3月  27 10:55 xavilinux.123
[root@xavi-002 mnt]# id xavi
uid=1000(xavi) gid=1000(xavi) 組=1000(xavi),10(wheel)

3.4 在服務端查看

[root@xavi ~]# ls -l /home/nfstestdir/
總用量 0
-rw-r--r-- 1 xavi xavi 0 3月  27 10:55 xavilinux.123
[root@xavi ~]# id xavi
uid=1000(xavi) gid=1000(xavi) 組=1000(xavi),1004(grptest1)

可以看到創建的新文件xavilinux.txt所有者和所屬組為xavi,其uid和gid都為1000.

1.NFS服務配置