網絡綜合架構-NFS存儲服務及部署

歡迎你們訪問個人博客:blog.54newpower.topweb

NFS存儲服務及部署

NFS存儲服務簡介:

NFS=Network File System=網絡文件系統。
主要功能是經過網絡(通常是局域網)讓不一樣的主機系統之間能夠共享文件或目錄。
NFS客戶端(通常爲應用服務器,例如web)能夠經過掛載(mount)的方式將NFS服務器端共享的數據目錄掛載到NFS客戶端本地系統中(就是某一個掛載點下)。從客戶端本地看,NFS服務器端共享的目錄就好像是客戶端本身的磁盤分區或者目錄同樣,而實際上倒是遠端的NFS服務器的目錄。
NFS屬於本地文件存儲服務。
NFS主要用於存儲web服務器上用戶上傳的數據信息(圖片 附件 頭像 視頻 音頻)。shell

NFS優缺點:

優勢:

  1. 實現數據的共享存儲
  2. 便於數據操做管理
  3. 節省購買服務器磁盤開銷

缺點:

  • 沒有認證功能 分佈式存儲/ftp/samba
  • 沒法支持高併發存儲 日PV 2000萬
  • 沒法實現高可用 分佈式存儲/keepalived

NFS工做方式:

  1. 在nfs服務端建立共享目錄vim

  2. 經過mount 網絡掛載,將NFS服務端共享目錄掛載到NFS客戶端本地目錄上。centos

  3. NFS客戶端掛載目錄上建立、刪除、查看數據操做,等價於在服務端進行建立、刪除、查看數據操做。

NFS的兩個重要服務

因爲NFS服務啓動產生的進程服務端口號都是隨機的,所以NFS的各項功能都須要向RPC服務(rpcbind服務)註冊,因此只有RPC服務才能獲取到NFS服務的各項功能對應的端口號(port number)、PID、NFS在主機所監聽的IP等信息,而NFS客戶端也只能經過向RPC服務詢問才能找到正確的端。也就是說,NFS須要有RPC服務的協助才能成功對外提供服務。說白了,PRC至關與一箇中介,NFS至關與是房東,當有新的租房信息發佈時,房東會告訴中介,房客通常是聯繫中介來租房的。安全

NFS工做原理

服務端:服務器

  1. 啓動rpc服務,開啓111端口
  2. 啓動nfs服務
  3. 實現nfs服務進程和端口好的註冊
    ps:產看nfs服務的註冊信息
    rpcinfo -p 172.16.1.31
    [root@web01 /mnt]#rpcinfo -p 172.16.1.31
    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
    100024    1   udp  43152  status
    100024    1   tcp  60675  status
    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
    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  40594  nlockmgr
    100021    3   udp  40594  nlockmgr
    100021    4   udp  40594  nlockmgr
    100021    1   tcp  41770  nlockmgr
    100021    3   tcp  41770  nlockmgr
    100021    4   tcp  41770  nlockmgr

    客戶端:網絡

  4. 創建TCP網絡鏈接
  5. 客戶端執行掛載命令,進行遠程掛載
  6. 能夠實現數據遠程傳輸存儲

NFS服務的安裝與部署

服務端的配置

檢查軟件是否安裝

rpm -qa|grep -E "nfs|rpc"
yum install -y nfs-utils rpcbind
rpm -qa nfs-utils 
rpm -qa rpcbind

注意:nfs和rpc的軟件名併發

編寫配置文件

vim /etc/exports
#輸入如下內容
/data   172.16.1.0/24(rw,sync)
#/data 共享目錄
#容許存儲數據網段信息
#rw 讀寫
#rsync同步存儲數據

建立共享目錄並受權

mkdir /data
chown nfsnobody.nfsnobody /data
ls -ld /data

啓動服務

先啓動rpc服務app

systemctl start rpcbind.service 
systemctl enable rpcbind.service
systemctl status rpcbind.service 
systemctl is-enabled rpcbind.service
[root@nfs01 ~]#systemctl start rpcbind
[root@nfs01 ~]#systemctl enable rpcbind
[root@nfs01 ~]#systemctl status rpcbind
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2020-05-03 23:28:06 CST; 7h left
 Main PID: 964 (rpcbind)
   CGroup: /system.slice/rpcbind.service
           └─964 /sbin/rpcbind -w

May 03 23:28:05 nfs01 systemd[1]: Starting RPC bind service...
May 03 23:28:06 nfs01 systemd[1]: Started RPC bind service.
[root@nfs01 ~]#systemctl is-enabled rpcbind
enabled

再啓動nfs服務異步

systemctl start nfs
systemctl enable nfs
systemctl status nps
systemctl is-enabled nfs
[root@nfs01 ~]#systemctl start nfs
[root@nfs01 ~]#systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@nfs01 ~]#systemctl status nfs
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf
   Active: active (exited) since Sun 2020-05-03 15:45:02 CST; 19s ago
 Main PID: 1779 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

May 03 15:45:02 nfs01 systemd[1]: Starting NFS server and services...
May 03 15:45:02 nfs01 systemd[1]: Started NFS server and services.
[root@nfs01 ~]#systemctl is-enabled nfs
enabled

客戶端的配置

安裝nfs-utils,使客戶端能夠識別nfs掛載方式

yum install -y nfs-utils
rpm -qa|grep "nfs-utils"

實現遠程掛載共享目錄

mount -t nfs 172.16.1.31:/data  /mnt

nfs服務端詳細配置說明

實現多個網段主機能夠進行掛載

第一種方法:

/data   172.16.1.0/24(rw,sync) 10.0.0.0/24(rw,sync)

第二種方法:

/data   172.16.1.0/24(rw,sync) 
/data   10.0.0.0/24(rw,sync)

影響NFS 服務存儲權限的因素

(1)服務端配置文件參數 exports文件裏ro/rw參數
(2)服務端自己目錄權限
(3)服務端共享目錄權限存在繼承關係 例如:/data,/data/r
PS:建議設置共享目錄時,不要存在父級與子級關係
(4)客戶端掛載參數是否爲 ro

NFS服務配置參數

NFS配置參數權限
rw   -- 存儲目錄是否有讀寫權限
ro   -- 存儲目錄是否時只讀權限
sync   -- 同步方式存儲數據 直接將數據保存到磁盤(數據存儲安全)
async  -- 異步方式存儲數據 直接將數據保存到內存(提升數據存儲效率)
no_root_squash  -- 不要將root用戶身份進行轉換   
root_squash     -- 將root用戶身份進行轉換
all_squash      -- 將全部用戶身份都進行轉換 
no_all_squash   -- 不要將普通用戶身份進行轉換

企業互聯網公司如何配置NFS 各類squash參數

保證網站存儲服務器用戶數據安全性:
no_all_squash  須要進行配置   共享目錄權限爲www(確保客戶端用戶 服務端用戶 uid數值一致)
root_squash    須要進行配置   root---nfsnobody    data目錄---www

以上默認配置(不少服務默認配置都是從安全角度出發)

如何查看nfs默認配置
cat /var/lib/nfs/etab    --- 記錄nfs服務的默認配置記錄信息
[root@nfs01 ~]#cat /var/lib/nfs/etab
/data   172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
如何讓root用戶能夠操做管理www用戶管理的data目錄
anonuid=65534,anongid=65534    --- 能夠指定映射的用戶信息
#修改映射用戶:www=1002
/data   172.16.1.0/24(rw,sync,anonuid=1002,anongid=1002)

企業中如何編輯nfs配置文件

  1. 通用方法
    /data   172.16.1.0/24(rw,sync)
  2. 特殊狀況 (讓部分人員不能操做存儲目錄 能夠看目錄中的數據)
    /data   10.0.0.0/24(ro,sync)
  3. 修改默認的匿名用戶
    /data   10.0.0.0/24(ro,sync,anonuid=xxx,anongid=xxx)
    #注:服務端普通用戶的uid要與客戶端普通用戶的uid相同

    nfs服務問題:

    nfs服務器重啓,掛載後建立數據比較慢
    服務器重啓方式不正確
    服務重啓:
    restart 重啓服務 強制斷開全部鏈接 用戶感覺很差
    reload 重啓服務(平滑重啓) 強制斷開沒有數據傳輸的鏈接 提高用戶感覺

    nfs客戶端詳細配置說明

    掛載命令:

    mount -t nfs 172.16.1.31:/data  /mnt

    如何實現自動掛載:

  4. 利用rc.local
    echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
    #文件要有執行權限
  5. 利用fstab文件
    vim /etc/fstab
    172.16.1.31:/data /mnt nfs defaults 0 0
    #實現fstab文件掛載自動加載nfs存儲目錄 必須讓remote-fs.target服務開機自啓
    #centos7  必須啓動   remote-fs.target 
    #centos6  必須啓動   netfs

    客戶端如何卸載

umount -lf /mnt  
#-l  不退出掛載點目錄進行卸載  
#-f  強制進行卸載操做
#PS:需求問題:如何找到一臺服務器開機運行了哪些服務
ll /etc/systemd/system/multi-user.target.wants/

掛載參數

rw --- 實現掛載後掛載點目錄可讀可寫 (默認)
ro --- 實現掛載後掛載點目錄可讀可寫
suid --- 在共享目錄中可讓setuid權限位生效 (默認)
nosuid --- 在共享目錄中可讓setuid權限位失效 提供共享目錄的安全性
exec --- 共享目錄中的執行文件能夠直接執行
noexec --- 共享目錄中的執行文件能夠沒法直接執行 提供共享目錄的安全性
auto --- 能夠實現自動掛載 mount -a 實現加載fstab文件自動掛載
noauto --- 不能夠實現自動掛載
nouser --- 禁止普通用戶能夠卸載掛載點設定此文件系統是否容許讓普通用戶使用 mount 執行實現掛載,默認是不容許(nouser),僅有 root 能夠
user --- 容許普通用戶能夠卸載掛載點

掛載常見錯誤

ls: cannot open directory .: Stale file handle (文件句柄錯誤)
出現緣由: 當父級和子級目錄同時進行掛載時,一旦父級目錄取消共享,可是客戶端仍是處於掛載狀態
問題解決: 將和父級目錄有關的全部掛載點所有卸載,從新掛載

Cannot register service: RPC: Unable to receive;
出現緣由: 服務啓動順序不正確
問題解決: 關閉全部服務,按順序進行啓動

出現掛載卡死狀況
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
出現緣由: 服務端開啓防火牆,阻止客戶端訪問
問題解決: 關閉防火牆

NFS服務掛載不上排查方法:

服務端進行排查:

  1. 檢查nfs進程信息是否註冊
    rpcinfo -p localhost/172.16.1.31
    問題緣由:
    服務啓動順序不對,沒有啓動nfs服務
  2. 檢查有沒有可用存儲目錄
    showmount -e 172.16.1.31
    問題緣由:
    配置文件編寫有問題,重啓nfs服務
  3. 在服務端進行掛載測試
    是否可以在存儲目錄中建立或刪除數據

    客戶端測試:

  4. 檢查nfs進程信息是否註冊
    rpcinfo -p localhost/172.16.1.31
    問題緣由:
    服務啓動順序不對,沒有啓動nfs服務
  5. 檢查有沒有可用存儲目錄showmount -e 172.16.1.31問題緣由: 配置文件編寫有問題,重啓nfs服務網絡問題ping 172.16.1.31 telnet 172.16.1.31 111
相關文章
相關標籤/搜索