Linux下NFS配置及遠程掛載

NFS配置及遠程掛載html

NFS簡介
  NFS是Network File System的簡寫,即網絡文件系統。NFS最先是由 Sun Microsystems 公司開發,並於1984年推出。NFS 是一種可分散式的網絡文件系統,能夠經過網絡(一個局域網)使不一樣的機器、不一樣的操做系統,可以共享目錄和文件,使客戶端能經過網絡訪問並分享文件到位於服務端的磁盤中。NFS的客戶端(通常爲應用服務器,例如web)能夠經過掛載(mount)的方式將NFS服務器共享的數據目錄掛載到NFS客戶端本地系統中(就是某一個關在點下),從客戶端本地看,NFS服務器端共享目錄就好像是客戶端本身的磁盤分區或者目錄同樣,而實際上倒是遠端的NFS服務器的目錄。
  NFS網絡文件系統很像Windows系統的網絡共享、安全功能、網絡驅動器映射,這也和linux的samba服務相似,只不過通常狀況下,Windows網絡共享服務或samba服務用戶辦公局域網共享,而互聯網中小型網站集羣架構後端經常使用NFS進行數據共享,如果大型網站,那麼有可能還會用到更復雜的分佈式文件系統Moosefs(mfs)、GlusterFS。NFS在文件傳送或信息傳送過程當中依賴於RPC協議。RPC負責負責信息的傳輸。
linux

1、環境和需求
環境:CentOS 7.5 ,安裝過程當中software selection選擇Minimal install;
軟件版本:nfs-utils-1.3.0-0.54.el7.x86_64
web

共三臺主機,每臺主機各掛接有一個4TB數據盤,掛載點在/data1;
主機名:HOST1,IP:192.168.1.11
主機名:HOST2,IP:192.168.1.12
主機名:HOST3,IP:192.168.1.13後端

需求:解決多臺服務器之間數據盤的內容相互共享安全

2、服務器校準時間
服務器

一、登錄到服務器後,用命令查看當前時區:
date -R
命令執行結果以下:
Fri, 02 Mar 2019 14:19:41 +0800網絡

 

若是顯示是+0800,就是北京時間;架構

 

二、更改時區的辦法。若是不是北京時間,則用如下方法修改成北京時區:(若是不是root用戶,則加上sudo)
先把時區文件備份,命令執行以下:
mv /etc/localtime /etc/localtime.oldapp

 

將正確的時區文件連接過來:
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtimessh

 

再用命令查看當前時區:
date -R

3 、若是ntp服務並未安裝,則先安裝後再執行上述命令:
yum install -y ntp

四、開啓ntp同步命令:
systemctl enable ntpd
systemctl start ntpd

 

五、容許同步硬件時間:
在/etc/sysconfig/ntpd最後一行加
SYNC_HWCLOCK=yes

 

3、服務器的NFS服務端配置

一、檢查nfs軟件是否安裝

sudo rpm -qa | grep nfs-utils
sudo rpm -qa | grep rpcbind

安裝nfs組件,已安裝的跳過;服務端和客戶端須要的環境同樣

sudo yum -y install nfs-utils
sudo yum -y install rpcbind

二、根據須要修改NFS的配置文件 /etc/exports (默認是空文件),此處要注意三臺服務器開放的ip限制有區別,除了exports文件外,其餘配置徹底同樣;

 sudo vi /etc/exports
 #主機HOST1增長如下一行內容
 /data1 192.168.1.12(rw,sync) 192.168.1.13(rw,sync)

sudo vi /etc/exports 
#主機HOST2增長如下一行內容 /data1 192.168.1.11(rw,sync) 192.168.1.13(rw,sync) #主機HOST3增長如下一行內容 /data1 192.168.1.11(rw,sync) 192.168.1.12(rw,sync)

三、配置端口

默認設置中 nfs 端口是2049,portmapper 的端口是111,mountd 端口是20048,status 和 nlockmgr 是隨機端口。如需進行防火牆開放端口的設置,修改以下,不然跳過:
修改 /etc/sysconfig/nfs 文件

sudo vi /etc/sysconfig/nfs
#增長端口配置以下一行,對應 rpc.statd 服務,顯示status
STATD_PORT=2050

因 nfslock 服務會自動開啓 rpc.statd,無需作設置;在rpcinfo -p 映射中,rpc.statd 對應 status ,後續再次修改端口後重啓服務使配置生效的

sudo systemctl restart nfs-lock

修改 /etc/modprobe.d/lockd.conf 文件。Network Lock Manager (NLM),對應是 nlockmgr

sudo vi /etc/modprobe.d/lockd.conf 
#增長端口配置以下兩行
options lockd nlm_tcpport=2051
options lockd nlm_udpport=2051

四、開啓NFS服務,設置服務開機自啓動,按順序先 rpcbind 後 nfs

sudo systemctl start rpcbind.service
sudo systemctl start nfs.service
sudo systemctl enable rpcbind.service
sudo systemctl enable nfs.service

sudo systemctl start rpcbind nfs-server
sudo systemctl enable rpcbind nfs-server

查看共享是否成功

showmount -e localhost

或用exportfs -arv命令,從新使配置文件生效,並顯示生效內容 

sudo exportfs -arv

 查看服務對應端口的命令

rpcinfo -p

五、防火牆設置
查看防火牆是否在運行

sudo firewall-cmd --state

顯示 running 則加上放行規則,不然跳過

sudo firewall-cmd --permanent --add-port=111/tcp
sudo firewall-cmd --permanent --add-port=111/udp
sudo firewall-cmd --permanent --add-port=2049-2051/tcp
sudo firewall-cmd --permanent --add-port=2049-2051/udp
sudo firewall-cmd --permanent --add-port=20048/tcp
sudo firewall-cmd --permanent --add-port=20048/udp
sudo firewall-cmd --reload

待驗證

sudo firewall-cmd --add-service=nfs --permanent
sudo firewall-cmd --reload

 

4、服務器的NFS客戶端配置

一、建立掛載目錄(三臺客戶端各有不一樣)

#HOST1的掛載目錄
sudo ln -s /data1 /data1_11
sudo mkdir /data1_12
sudo mkdir /data1_13

#HOST2的掛載目錄
sudo ln -s /data1 /data1_12
sudo mkdir /data1_11
sudo mkdir /data1_13

#HOST3的掛載目錄
sudo ln -s /data1 /data1_13
sudo mkdir /data1_11
sudo mkdir /data1_12

二、客戶端遠程目錄的掛載,將掛載配置寫入fstab文件(三臺客戶端各有不一樣)

sudo vi /etc/fstab

#HOST1的fstab文件加上
192.168.1.12:/data1  /data1_12                  nfs     defaults     0 0
192.168.1.13:/data1  /data1_13                  nfs     defaults     0 0

#HOST2的fstab文件加上
192.168.1.11:/data1  /data1_11                  nfs     defaults     0 0
192.168.1.13:/data1  /data1_13                  nfs     defaults     0 0

#HOST3的fstab文件加上
192.168.1.11:/data1  /data1_11                  nfs     defaults     0 0
192.168.1.12:/data1  /data1_12                  nfs     defaults     0 0

三、在客戶端分別執行,讓修改fstab後的掛載生效,

sudo mount -a

至此,NFS配置已經完成,如打開共享目錄寫入報錯 Permission denied ,請根據需求和安全原則修正對應源目錄寫入的權限(詳見下面補充說明)


5、其餘補充說明(安裝過程或完成後檢測用到的命令、知識點)

一、NFS服務須要安裝的軟件包

nfs-utils:nfs服務的主程序,包括rpc.nfsd、rpc.mountd兩個daemons和相關的文檔說明及執行命令文件等
rpcbind:rpc主程序,安裝 nfs-utils 時會自動按依賴安裝上,無需另外安裝

在安裝完 nfs-utils 後會自動建立 nfsnobody 用戶

[root@localhost ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)

二、查NFS服務是否在運行

sudo  systemctl status rpcbind
sudo systemctl status nfs

三、查看NFS版本

服務器端使用:nfsstat -s

客戶端使用:nfsstat -c

四、查看主機開放的端口
ss命令的使用見:http://www.javashuo.com/article/p-wfebcpvv-bz.html

[wangzhiping@localhost /]$ ss -lutp4
Netid  State      Recv-Q Send-Q           Local Address:Port                            Peer Address:Port                
udp    UNCONN     0      0                            *:mountd                                     *:*                    
udp    UNCONN     0      0                    127.0.0.1:703                                        *:*                    
udp    UNCONN     0      0                            *:856                                        *:*                    
udp    UNCONN     0      0                            *:nfs                                        *:*                    
udp    UNCONN     0      0                            *:av-emb-config                              *:*                    
udp    UNCONN     0      0                            *:epnsdp                                     *:*                    
udp    UNCONN     0      0                            *:sunrpc                                     *:*                    
tcp    LISTEN     0      64                           *:nfs                                        *:*                    
tcp    LISTEN     0      128                          *:av-emb-config                              *:*                    
tcp    LISTEN     0      64                           *:epnsdp                                     *:*                    
tcp    LISTEN     0      128                          *:sunrpc                                     *:*                    
tcp    LISTEN     0      128                          *:mountd                                     *:*                    
tcp    LISTEN     0      128                          *:ssh                                        *:*                    
tcp    LISTEN     0      100                  127.0.0.1:smtp                                       *:*                    
[wangzhiping@localhost /]$ ss -lutp4n
Netid  State      Recv-Q Send-Q             Local Address:Port                            Peer Address:Port              
udp    UNCONN     0      0                              *:20048                                      *:*                  
udp    UNCONN     0      0                      127.0.0.1:703                                        *:*                  
udp    UNCONN     0      0                              *:856                                        *:*                  
udp    UNCONN     0      0                              *:2049                                       *:*                  
udp    UNCONN     0      0                              *:2050                                       *:*                  
udp    UNCONN     0      0                              *:2051                                       *:*                  
udp    UNCONN     0      0                              *:111                                        *:*                  
tcp    LISTEN     0      64                             *:2049                                       *:*                  
tcp    LISTEN     0      128                            *:2050                                       *:*                  
tcp    LISTEN     0      64                             *:2051                                       *:*                  
tcp    LISTEN     0      128                            *:111                                        *:*                  
tcp    LISTEN     0      128                            *:20048                                      *:*                  
tcp    LISTEN     0      128                            *:22                                         *:*                  
tcp    LISTEN     0      100                    127.0.0.1:25                                         *:*       

五、查看 rpc 的端口映射

[nfs_user@localhost /]$ rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100024    1   udp   2050  status
    100024    1   tcp   2050  status
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp   2051  nlockmgr
    100021    3   udp   2051  nlockmgr
    100021    4   udp   2051  nlockmgr
    100021    1   tcp   2051  nlockmgr
    100021    3   tcp   2051  nlockmgr
    100021    4   tcp   2051  nlockmgr

六、NFS的經常使用目錄

 

文件目錄 用途
/etc/exports NFS服務的主要配置文件,系統並無默認值,是空文件,如這個文件不存在,須要本身建立
/usr/sbin/exportfs NFS服務的管理命令
/usr/sbin/showmount 客戶端的查看命令
/var/lib/nfs/etab 記錄NFS分享出來的目錄的完整權限設定值,即服務器配置的參數(包含默認的參數)
/var/lib/nfs/xtab 記錄曾經登陸過的客戶端信息

NFS的配置文件:
/etc/exports:NFS配置文件
/var/lib/nfs/*tab:NFS服務器日誌放置路徑;etab記錄共享出來的目錄完整權限設置值;xtab記錄曾經鏈接到此NFS主機的相關客戶端數據

NFS的兩個命令:
/usr/sbin/exportfs:維護NFS共享資源;從新共享/etc/exports變動目錄或將NFS server共享目錄卸載或從新共享
/usr/sbin/showmount:在客戶端查看NFS服務器共享出來的目錄資源

七、NFS的主要配置文件 /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服務器也不檢查其父目錄的權限,這樣能夠提升效率;

例如

/ user01(rw) user02(rw,no_root_squash)

表示共享服務器上的根目錄(/)只有user01和user02兩臺主機能夠訪問,且有讀寫權限;user01主機用root用戶身份訪問時,將客戶機的root用戶映射成服務器上的匿名用戶(root_squash,該參數爲缺省參數),至關於在服務器使用nobody用戶訪問目錄;user02主機用root用戶身份訪問該共享目錄時,不映射root用戶(no_root_squash),即至關於在服務器上用root身份訪問該目錄。在配置文件中,使用了no_root_squash ,因此root用戶不受約束,在 user02 機器上到掛載點下,到共享目錄下,就能夠像在本地磁盤使用root用戶同樣,是不受限制的(一般狀況下,不限制root用戶的比較多,要注意安全問題)

/root/share/ 192.168.1.2(rw,insecure,sync,all_squash)

表示共享服務器上的/root/share/目錄只有192.168.1.2主機能夠訪問,且有讀寫權限;此主機用任何身份訪問時,將客戶機的用戶都映射成服務器上的匿名用戶(all_squash),至關於在服務器上用nobody用戶訪問該目錄(若客戶機要在該共享目錄上保存文件(即寫操做),則服務器上的nobody用戶對該目錄必須有寫的權限)

/home/ylw/ *.test.com (rw,insecure,sync,all_squash)

表示共享/home/ylw/目錄,*.test.com域中全部的主機均可以訪問該目錄,且有讀寫權限

/home/share/ .test.com (ro,sync,all_squash,anonuid=zh3,anongid=wa4)

表示共享目錄/home/share/,*.test.com域中的全部主機均可以訪問,但只有只讀的權限,全部用戶都映射成服務器上的uid爲zh三、gid爲wa4的用戶

八、exportfs命令詳解

  • exportfs命令和nfs-utils這個包一塊兒安裝的
  • 例子:
    • 假設在第一次配置 nfs 的共享目錄,以後須要新增、更改某些機器或共享的目錄;
    • 首先須要更改配置文件,而後重啓NFS服務,但若是遠程客戶端正在使用NFS服務,正在掛載着,若是你須要先中止nfs服務,那遠程的客戶端就會掛起,就會很大的影響,形成服務異常,進程異常,有很大可能致使系統壞掉
  • nfs服務不能隨便重啓,要重啓,就須要先去服務器上,把掛載的目錄卸載下來
    • 在卸載目錄的時候,如果在當前目錄下去卸載會提示 umount.nfs4: /mnt: device is busy
      • 方法一:退出該目錄後,再去卸載
      • 方法二:在目錄下卸載的時候,加 -l 選項,表示 lazy 懶惰的意思
    • 在卸載目錄後,在重啓nfs服務
  • 如果掛載了不少臺機器,那麼每臺機器都須要去卸載,就會很麻煩,下降了工做效率
    • 方法:使用exportfs命令,從新加載下

  • exportfs命令
    • -a 所有掛載或者所有卸載,所有掛載或卸載 /etc/exports中的內容 
    • -r 從新掛載,從新讀取/etc/exports 中的信息 ,並同步更新/etc/exports、/var/lib/nfs/xtab
    • -u 卸載某一個目錄,和-a一塊兒使用,是卸載全部/etc/exports文件中的目錄
    • -v 顯示共享目錄,在export的時候,將詳細的信息輸出到屏幕上。

例1、在NFS服務端上修改 /etc/exports ,增長某個共享目錄後

/share 192.168.10.0/24(rw,sync,root_squash)

用 exportfs 不用重啓nfs服務,使改動馬上生效

sudo exportfs -arv 

其餘例子
exportfs -au  #卸載全部共享目錄
exportfs -rv  #從新共享全部目錄並輸出詳細信息

九、showmount 命令用於查詢NFS服務器

Usage: showmount [-adehv]
        [--all] [--directories] [--exports]
        [--no-headers] [--help] [--version] [host] 
-a或--all
    以 host:dir 這樣的格式來顯示客戶主機名和掛載點目錄。
 -d或--directories
    僅顯示被客戶掛載的目錄名。
 -e或--exports
    顯示NFS服務器的輸出清單。
 -h或--help
    顯示幫助信息。
 -v或--version
    顯示版本信。
 --no-headers
    禁止輸出描述頭部信息。

顯示NFS客戶端信息
 # showmount

顯示指定NFS服務器鏈接NFS客戶端的信息
 # showmount 192.168.1.1  #此ip爲nfs服務器的

顯示輸出目錄列表
 # showmount -e

顯示指定NFS服務器輸出目錄列表(也稱爲共享目錄列表)
 # showmount -e 192.168.1.1

顯示被掛載的共享目錄
 # showmount -d  

顯示客戶端信息和共享目錄
 # showmount -a

顯示指定NFS服務器的客戶端信息和共享目錄
# showmount -a 192.168.1.1

十、關於權限的分析

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將被壓縮到所指定的用戶與組;

多個NFS客戶端訪問服務器的讀寫文件時必需要有的權限
  a、NFS服務器/etc/exports設置須要開放可寫入的權限,即服務端的共享權限
  b、NFS服務器實際要共享的NFS目錄權限具備可寫入w的權限,即服務端本地目錄的安全權限
  c、每臺服務器都對應存在和NFS默認配置UID的相同UID的帳戶nfsnodoby(確保全部全部客戶端的訪問權限統一,不然每臺機器都須要同時創建相同UID用戶,並覆蓋NFS的默認用戶配置)
只有知足上述三個條件,多個NFS客戶端才能具備查看、修改、刪除其餘任意NFS客戶端上傳文件的權限,這在大規模的集羣環境中最爲集羣共享存儲時尤其重要

十一、客戶端手動掛載

掛載命令 掛載的格式類型 NFS服務器提供的共享目錄 NFS客戶端的掛載點
mount -t nfs 172.16.1.31:/data /mnt (該目錄必須存在)


建立掛載點

sudo mkdir /data1_11

掛載NFS,默認狀況下只有 root 能夠去掛載,普通用戶能夠執行sudo

sudo mount -t nfs 192.168.1.11:/data1 /data1_11

掛載成功後,可用以下命令查看

sudo df -Th

如需卸載nfs,命令以下

sudo umount /data1_11

sudo umount 192.168.1.11:/data1


十二、配置掛載 autofs(待測試確認)

# yum -y install autofs
# vi /etc/auto.master
#添加一行
/-    /etc/auto.mount
# vi /etc/auto.mount
#添加一行
/data1 -fstype=nfs,rw  nfs.st.local:/data1_11

#啓動服務
# systemctl start autofs 
# systemctl enable autofs 

 

參考:

Red Hat Enterprise Linux fully supports NFS version 4.2 (NFSv4.2) since the Red Hat Enterprise Linux 7.4 release.Following are the features of NFSv4.2 in Red Hat Enterprise Linux 7.5
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/ch-nfs

https://blog.csdn.net/gx_1_11_real/article/details/82622391http://blog.51cto.com/lzhnb/2086392https://www.cnblogs.com/st-jun/p/7742560.htmlhttps://blog.csdn.net/wh211212/article/details/52954961

相關文章
相關標籤/搜索