NFS存儲服務及部署

1 NFS簡介

1.1 什麼是NFS

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

1.2 NFS存儲服務價值

(1)能夠實現數據統一共享存儲
(2)節省架構服務運營成本
node

1.3 NFS存儲服務的優缺點

優勢:配置 安裝簡單
缺點:沒有認證功能        分佈式存儲/ftp/samba
         沒法支持高併發存儲  日PV 2000萬
   沒法實現高可用      分佈式存儲/keepalived
mysql

1.4 實現Windows與linux文件數據共享

(1)FTP服務部署
(2)samba服務部署(可讓Windows與linux同時訪問)
linux

1.5 NFS網絡文件共享系統由來

111.png
能夠實現數據共享,數據統一一致,節省架構服務運營成本
web

1.6 NFS網絡文件系統工做方式(存儲原理)

(1)在nfs服務端建立共享目錄
(2)經過mount 網絡掛載,將NFS服務端共享目錄掛載到NFS客戶端本地目錄上。
(3)NFS客戶端掛載目錄上建立、刪除、查看數據操做,等價於在服務端進行建立、刪除、查看數據操做。
1.png
sql

1.7 NFS存儲文件系統中兩個重要服務

1 RPC服務    2 NFS服務
vim

1.7.1 RPC服務工做原理

nfs1.pngnfs2.png

由於NFS的各項功能都須要向RPC服務(rpcbind服務)註冊,因此只有RPC服務才能獲取到NFS服務的各項功能對應的端口號(port number)、PID、NFS在主機所監聽的IP等信息,而NFS客戶端也只能經過向RPC服務詢問才能找到正確的端□。也就是說,NFS須要有RPC服務的協助才能成功對外提供服務。
windows

1.7.2 NFS工做流程

NFS流程圖.jpg

1.7.3 NFS詳細訪問流程


當訪問程序經過NFS客戶端向NFS服務器存取文件時,其請求數據流程大體以下:
(1)首先用戶訪間網站程序,由程序在NFS客戶端上發出存取NFS文件的請求,這時NFS客戶端(即執行程序的服務器)的RPC服務(rpcbind服務)就會經過網絡向NFS服務器端的RPC服務(rpcbind服務)的111端口發出NFS文件存取功能的詢間請求.
(2)NFS服務器端的RPC服務(rpcbind服務)找到對應的已註冊的NFS端口後,通知NFS客戶端的RPC服務。l
(3)此時NFS客戶端獲取到正確的端口,並與NFS daemon聯機存取數據
(4)NFS客戶端把數據存取成功後,返回給前端訪間程序,告知用戶存取結果,做爲網站用戶,就完成了一次存取操做。
後端

2 NFS存儲服務部署

RPC 遠程過程調用程序。先啓動PRC服務,而後在啓動NFS。
centos

2.1 服務端部署 

2.1.1 安裝軟件程序

yum install -y nfs-utils rpcbind
rpm -qa nfs-utils 
rpm -qa rpcbind

2.1.2 編寫配置文件

vim /etc/exports    #進入配置文件
/data 172.16.1.0/24(rw,sync)    #寫入命令
# /data 能夠進行共享存儲目錄
# 172.16.1.0/24(rw,sync)    容許存儲數據網段信息(存儲目錄權限配置 存儲數據方式配置)

sync=同步方式存儲數據:用戶有數據存儲  ----  存儲服務器(磁盤中)           存儲安全性高
async=異步方式存儲數據:用戶有數據存儲  ----  內存 --- 存儲服務器(磁盤中)  存儲效率高

2.1.3 建立目錄,對目錄進行受權

mkdir /data
chown nfsnobody.nfsnobody /data

2.1.4 啓動服務程序

systemctl start rpcbind
systemctl reload rpcbind    #重啓rpcbind  平滑重啓
systemctl enable rpcbind
systemctl start nfs
systemctl reload nfs            #重啓nfs
systemctl enable nfs
### restart:將全部鏈接會話都會直接斷開
### reload:  只會將沒有數據傳輸連接斷開,從新創建鏈接,讓用戶訪問感覺更好

2.2 客戶端部署

2.2.1 安裝相關軟件

yum install -y nfs-utils

2.2.2 進行存儲目錄掛載

mount -t nfs  172.16.1.31:/data  /mnt

2.2.3 進行測試

客戶端建立文件:
[root@web01 mnt]#ls
[root@web01 mnt]#touch test.txt
[root@web01 mnt]#ls
test.txt
服務端同步文件:
[root@nfs01 data]#ls
[root@nfs01 data]#ls
test.txt
服務端與客戶端文件同步,則測試成功。

3 存儲服務配置文件編寫格式

3.1 配置文件exports參數

ro 只讀配置,使存儲目錄權限位只讀,使開發人員只能看
rw 讀寫權限
sync 同步存儲數據
async 異步存儲數據
all_squash 不論什麼用戶包括root,都映射爲指定nfsnobody用戶
no_all_squash  對普通用戶不作映射,無權限。root用戶映射爲nfsnobody
root_squash  將root用戶映射爲指定nfsnobody用戶,普通用戶無權限
no_root_squash 將root用戶不作映射,普通用戶無權限
anonuid 指定uid,指定映射成什麼用戶
anongid 指定gid,指定映射成什麼用戶

在企業中,通常選用no_all_squash,root_squash。

3.1.1 all_squash映射實踐

第一步:服務端修改服務配置文件

vim /etc/exports
/data  172.16.1.0/24(rw,sync,all_squash)
systemctl reload nfs

第二步:客戶端上傳數據測試

[root@web01 mnt]#touch test.txt
[root@web01 mnt]#ll test.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 16 20:57 test.txt

3.1.2 no_all_squash映射實踐

第一步:服務端修改服務配置文件

vim /etc/exports
/data  172.16.1.0/24(rw,sync,no_all_squash)
systemctl reload nfs

第二步:客戶端上傳數據測試

[root@web01 mnt]# touch aaa.txt
[root@web01 mnt]# ll
-rw-rw-r-- 1     1017     1017  0 Jul 16 12:08 aaa.txt
### 用戶傳輸數據身份沒有變化,看用戶uid信息

3.1.3 root_squash映射實踐

第一步:服務端修改服務配置文件

vim /etc/exports
/data  172.16.1.0/24(rw,sync,root_squash)
systemctl reload nfs

第二步:客戶端上傳數據測試

[root@web01 mnt]# touch bbb.txt
[root@web01 mnt]# ll
-rw-r--r-- 1 nfsnobody nfsnobody  0 Jul 16 12:19 bbb.txt
### root用戶會映射爲指定的nfsnobody用戶

3.1.4 no_root_squash映射實踐

第一步:服務端修改服務配置文件

vim /etc/exports
/data  172.16.1.0/24(rw,sync,no_root_squash)
systemctl reload nfs

第二步:客戶端上傳數據測試

[root@web01 mnt]# touch ccc.txt
[root@web01 mnt]# ll
-rw-r--r-- 1 root      root       0 Jul 16 12:22 ccc.txt
### 將root用戶不作映射

3.2 NFS客戶端映射原理圖

3_看圖王.png

3.2.1 映射原理練習題

要求服務端:
/data/w   可讀可寫權限,全部用戶都作映射,  採用同步傳輸數據
/data/r   只能讀取數據,只有root用戶組映射,採用異步傳輸數據
要求客戶端:
backup   /data/w  --掛載點 /data/w   能夠存儲數據  
web01    /data/r  --掛載點 /data/r   不能存儲數據
解決服務端:
(1)編寫配置文件

vi /etc/exports
/data/w  172.16.1.0/24(rw,sync,all_squash)
/data/r  172.16.1.0/24(ro,async,root_squash)

(2)建立共享存儲目錄

web01:
mkdir /data/r
chown nfsnobody.nfsnobody /data/r
backup:
mkdir /data/w
chown nfsnobody.nfsnobody /data/w

(3)重啓存儲服務

systemctl reload nfs

解決客戶端:
(1)建立掛載點目錄

web01:mkdir /data/r
backup:mkdir /data/w

(2)進行掛載

web01
mount -t nfs 172.16.1.31:/data/r  /data/r
backup
mount -t nfs 172.16.1.31:/data/w  /data/w

(3)驗證成功

[root@web01 r]#touch hh.txt
touch: cannot touch ‘hh.txt’: Read-only file system ### 只讀權限,因此出現這種狀況纔是正常
[root@backup w]#touch kk.txt        ### 讀寫權限,因此能建立
[root@backup w]#ls
kk.txt

3.3 影響NFS服務存儲權限緣由

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

4 NFS掛載常見問題

4.1 異常問題一

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

4.2 異常問題二

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

4.3 異常問題三

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

4.4 異常問題四

服務端採用restart狀況,會有一個90s延遲;形成客戶端掛載好共享目錄,90s內沒法存儲數據
出現緣由:
cat /etc/sysconfig/nfs|grep 90
#NFSD_V4_GRACE=90
#NFSD_V4_LEASE=90

4.5 NFS存儲排錯原理

4.5.1 檢查服務端服務是否啓動

4.5.2 檢查NFS服務是否向RPC服務註冊

 未註冊狀況

[root@nfs01 ~]# rpcinfo -p localhost
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

已經進行註冊

[root@nfs01 ~]# rpcinfo -p localhost
program vers proto   port  service     
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
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  60318  nlockmgr
100021    3   udp  60318  nlockmgr
100021    4   udp  60318  nlockmgr
100021    1   tcp  32828  nlockmgr
100021    3   tcp  32828  nlockmgr
100021    4   tcp  32828  nlockmgr

4.5.3 檢查NFS服務是否存在共享目錄

命令:showmount -e  172.16.1.31    NFS沒有安裝,不能使用showmount

[root@nfs01 data]#showmount -e  172.16.1.31
Export list for 172.16.1.31:
/data/r 172.16.1.0/24
/data/w 172.16.1.0/24

4.6 NFS服務相關重要文件命令

/etc/exports    #配置文件
/var/lib/nfs/etab   #記錄nfs服務默認配置參數信息
rpcinfo -p 172.16.1.31  #檢查nfs是否向rpc註冊
showmount -e 172.16.1.31    #檢查nfs服務是否存在共享目錄
/usr/sbin/exportfs  #能夠平滑重啓nfs服務,能夠臨時設置共享存儲目錄
平滑重啓服務:exportfs -rv
臨時建立目錄:exportfs -o rw,sync  192.168.232.0/24:/data01

4.7 NFS服務客戶端掛載

4.7.1 如何進行掛載

mount -t nfs 172.16.1.31:/data  /mnt

4.7.2 如何開機掛載

方法一:vi /etc/rc.local 
mount -t nfs 172.16.1.31:/data  /mnt
方法二:vi /etc/fstab文件
172.16.1.31:/data   /mnt    nfs  defaults   0 0

centos6  
啓動系統 -- 加載fstab -- 啓動network網絡服務 -- netfs(在系統啓動完畢以後,再次加載fstab)
centos7
啓動系統 -- 加載fstab -- 啓動network網絡服務 -- remote-fs.target(在系統啓動完畢以後,再次加載fstab)

4.7.3 啓動nfs服務客戶端很慢

出現緣由:在客戶端上配置自動nfs服務掛載   --- 耦合度過高
解決問題:
(1)取消自動掛載
(2)啓動順序 先開啓後端服務(nfs mysql backup 緩存服務)  在開啓前端服務(web服務 負載均衡服務)

4.7.4 掛載參數說明

rw 讓掛載點目錄具備可讀可寫權限   相反ro
suid=setuid 讓掛載點目錄中的文件特殊權限位生效    相反nosuid  安全
dev 讓掛載點目錄存儲設備文件保持屬性不變
exec 讓掛載點目錄中的執行文件能夠執行   相反noexec
auto(mount -a) 讓掛載點目錄實現快速自動掛載  相反noauto
nouser 讓普通用戶是否能夠卸載和掛載目錄   相反user
async 數據異步存儲概念,相反sync同步存儲
noatime 訪問文件時不更新文件的inode時間戳,高併發環境下,推薦顯示應用該選項,能夠提升系統I/O性能。性能優化
nodiratime 不更新文件系統上的directory inode時間戳,高併發環境,推薦顯式應用該選項,能夠提升系統I/O性能。性能優化
remount 在不進行卸載掛載點時,直接從新掛載修改掛載參數
文件系統只讀:mount -o remount,rw / 解決
rsize=262144 設置一個緩存區 262144字節  設置大小和內存有關  
用戶 (讀取) --- web01 /data  2M --- nfs /data 10M 壓力大   
wsize=262144 設置一個緩衝區 262144字節
用戶(存儲)  --- web01 /data 10M --- nfs /data 10M 壓力大
hard  當服務端處於關閉狀態,客戶端會處於一直掛載
soft  當服務端處於關閉狀態,不會一直掛載 
proto=tcp  掛載協議

客戶端重要文件:/proc/mounts  --- 查看到mount掛載命令默認參數信息
強行進行卸載:umount -lf

4 補充:下載軟件出現異常

(1)更新yum源
(2)利用rpm安裝軟件 得到rpcbind軟件包

vim /etc/yum.conf  
cachedir=/var/cache/yum/$basearch/$releasever   --- 下載軟件保存路徑
keepcache=1                                     --- 下載軟件保留下來,不要被刪除
rpm -ivh  rpcbind-0.2.0-47.el7.x86_64.rpm.rpm       --- 安裝rpcbind
相關文章
相關標籤/搜索