2020年9月15號,13時14分(這個時間秒啊!)
弱者廢話連篇,強者無序多言,嘿嘿!!!
下面一起學習nfs網絡存儲部署,有些寫得不好請多多指出
博客同步:www.xiaoxuanzi.top
1.NFS儲存服務
1.1 概念說明
NFS是Network File System的縮寫中文意思是網絡文件共享系統,它的主要功能是通過網絡(一般是同域網)讓不同的主機系統之間可以共享文件或目錄。
NFS客戶端(-般為應用服務器,例如web)可以通過掛載(mount) 的方式將NFS服務器端共享的數據目錄掛載到NFS客戶端本地系統中(就是某一個掛載點下)。從客戶端本地看,NFS服務器端共享的目錄就好像是客戶端自己的磁盤分區或者目錄- -樣,而實際上卻是遠端的NFS服務器的目錄。
存儲服務的種類:
用於中小型企業存儲作用:實現數據共享存儲
- FTP存儲服務:文件傳輸協議
運維人員01需要管理服務器01和服務器02,運維人員02需要管理服務器03和服務器04,假設運維人員01需要管理服務器03,怎么辦?
在公司部署FTP共享儲存服務器,把可以共享數據放在共享存儲服務器,方便公司人員管理查看。
案例:中小型充值公司(游戲幣,QQ幣,話費)→ 每日財務對賬信息存儲數據庫服務器 → 每月財務信息文件上傳FTP服務器 → 合作公司(移動,騰訊)可以查賬
-
Samba存儲服務:實現Linux和Windows之間數據傳輸存儲(Linux部署Samba)
-
NFS存儲服務:實現Linux和Linux之間數據傳輸存儲
用於大型門戶企業(百度,新浪):利用分布式存儲
Moosefs(mfs) 比較落伍,初學學習比較簡單
GlusterFS
FastDFS 企業應用較
1.2 NFS儲存服務作用
1、實現企業架構數據的共享存儲
2、便有數據操作管理
3、節省服務器磁盤使用開銷
2.NFS儲存服務部署
2.1 RPC管理說明
RPC: 遠程過程調用服務程序--- 相當於租房的中介(網絡編程支持)
nfs服務啟動流程:
第一步:啟動RPC服務(中介)
第二步:啟動NFS服務進程(房源、房東),把NFS服務端口信息告知RPC服務進程管理
第三步:客戶端訪問RPC服務,詢問NFS服務端口信息
第四步:RPC服務返回客戶端信息(NFS服務端口)
第五步:客戶端根據端口訪問NFS服務器
2.2 NFS服務-rpc管理流程
. 因為NFS的各項功能都需要向RPC服務(rpcbind服務)注冊,所以只有RPC服務才能獲取到NFS服務的各項功能對應的端口號port、PID、NFS在主機所監聽的IP等信息,而NFS客戶端也只能通過向RPC服務詢問才能找到正確的端口。也就是說,NFS需要有RPC服務的協助才能成功對外提供服務。
2.3 NFS服務部署流程
NFS服務端部署
第一步:下載安裝NFS和rpc軟件
rpm -qa|grep -E "nfs|rpc"
yum install -y nfs-utils rpcbind
第二步:編寫nfs配置文件
# 1.查看nfs配置參數 man exports
exports - NFS server export table 翻譯:NFS服務配置導出表
# 2.編寫配置文件 /etc/exports
[root @nfs ~ ]# vim /etc/exports
/date 172.16.1.0/24(rw,sync)
配置文件格式:存儲目錄 網段白名單(參數1,參數2.....)
第一列:設置數據存儲目錄 /date
第二列:設置nfs服務網絡白名單(允許哪些網段主機可以連接存儲服務器進行數據存儲)
第三列:設置存儲目錄權限,目錄一些功能信息(說明:設置信息需要小括號中,緊跟第二列白名單)
第三步:創建存儲目錄,對目錄進行用戶授權(設置存儲目錄屬主屬組為nfsnobody)
# 設置存儲目錄屬主信息
mkdir -p /date && chown -R nfsnobody.nfsnobody /date
# 查看存儲目錄設置
[root @nfs ~ ]# ll /date -d
drwxr-xr-x 2 nfsnobody nfsnobody 6 Sep 30 12:36 /date
說明:nfsnobody是安裝nfs-utils服務軟件自動創建虛擬用戶,用於管理存儲目錄
第四步:啟動nfs服務
PS:nfs服務端口由rpc服務管理,啟動順序:先啟動rpc服務,再啟動nfs服務
# 啟動rpc服務
systemctl restart rpcbind.service
systemctl enable rpcbind.service
# 查看服務啟動端口
[root @nfs ~ ]# netstat -lntup| grep rpc
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 10662/rpcbind
tcp6 0 0 :::111 :::* LISTEN 10662/rpcbind
# 啟動nfs存儲服務
systemctl restart nfs PS:tab補全可以看到nfs一推服務,systemctl restart nfs可以一塊啟動
systemctl enable nfs
說明:nfs服務端口信息交給rpc服務管理,netstat命令沒法查看端口信息
NFS客戶端部署
實現遠程掛載共享存儲目錄
[root @backup ~ ]# mount -t nfs nfs:/date /mnt/nfs
mount: wrong fs type, bad option, bad superblock on nfs:/date,
錯誤原因:Linux系統本身不識別nfs文件系統,wrong file system type 無法識別文件類型
# 第一步:安裝nfs-utils軟件,讓Linux識別nfs文件系統
yum install -y nfs-utils
# 第二步:實現遠程掛載nfs共享存儲目錄
mount -t nfs 172.16.1.31:/date /mnt/nfs
參數說明:mount -t 指定掛載文件類型
NFS服務部署完畢,測試客戶端存儲數據
# 測試第一步:backup備份服務器在共享目錄創建一個文件
[root @backup ~ ]# touch /mnt/nfs/backup_date.txt
[root @backup ~ ]# ll /mnt/nfs/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep 2 10:09 backup_date.txt
# 測試第二步:web和nfs查看共享數據
[root @nfs ~ ]# ll /date
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep 2 10:07 backup_date.txt
[root @web01 ~ ]# ll /mnt/nfs/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep 2 10:09 backup_date.txt
# 測試第三步:web服務器修改backup_date.txt內容信息,在其他服務器查看
[root @web01 ~ ]# echo 123456 >/mnt/nfs/backup_date.txt
[root @nfs ~ ]# cat /date/backup_date.txt
123456
3. NFS服務工作原理
服務端工作原理
第一步:啟動PRC服務,開啟111服務端口
第二步:啟動NFS服務
第三步:實現NFS服務進程和端口號信息向RPC服務注冊
客戶端工作原理
第一步:客戶端和服務端建立TCP網絡連接
第二步:客戶端執行掛載命令,進行遠程掛載
第三步:實現數據遠程存儲共享目錄
補充:查看NFS服務開啟,服務進程和端口注冊RPC管理信息
# 停止NFS服務和RPC管理服務
[root @nfs ~ ]# systemctl stop nfs
[root @nfs ~ ]# systemctl stop rpcbind.service
Warning: Stopping rpcbind.service, but it can still be activated by:
rpcbind.socket
[root @nfs ~ ]# systemctl stop rpcbind.socket
# 重新啟動RCP服務,NFS服務沒有注冊端口。查看RPC本來端口信息
[root @nfs ~ ]# systemctl restart rpcbind.service
[root @nfs ~ ]# 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
說明:rpcinfo查看NFS和RPC服務端口信息 -p 指定查看主機信息(localhost表示查看本地主機RPC信息
# 啟動NFS服務,查看注冊端口信息
systemctl restart nfs
rpcinfo -p 172.16.1.31
注意:由於NFS服務端口是隨機的,當NFS服務重啟,部分服務端口信息會改變!!!
4. NFS配置文件說明
1. 配置文件格式
/etc/exports配置實現多個網段主機可以進行掛載
第一種方式:
/data 172.16.1.0/24(rw,sync) 10.0.0.0/24(rw,sync)
格式:NFS存儲目錄 NFS服務地址1(參數1,參數2...)NFS服務地址2(參數1,參數2...)
第一列:/data為要共享的NFS服務器端的目錄,注意,被共享的目錄一定要用絕對路徑
第二列:10.0.0.0/24表示允許NFS客戶端訪問共享目錄的網段范圍。24表示255.255.255.0
第三列:(rw,sync)中的rw表示允許讀寫,sync 表示數據同步寫入到NFS服務器端的硬盤中
第二種方法:
/data 172.16.1.0/24(rw,sync)
/data 10.0.0.0/24(rw,sync)
2. 共享目錄的權限問題
1)和存儲目錄的本身權限有關 (755 屬主:nfsnobody)
[root @backup ~ ]# ll /mnt/nfs -d
dr-x-w--w- 2 nfsnobody nfsnobody 47 Sep 2 11:01 /mnt/nfs
[root @backup ~ ]# touch /mnt/nfs/1.txt
touch: cannot touch ‘/mnt/nfs/1.txt’: Permission denied
說明:掛載存儲目錄權限不是755以上,提示沒有權限touch
2)和配置文件中的權限配置有關 rw/ro
# 修改nfs配置參數為 rw → ro ,設置只讀目錄數據
[root @nfs ~ ]# cat /etc/exports
/date 172.16.1.0/24(ro,sync)
[root @nfs ~ ]# systemctl restart nfs
# 設置ro參數,無法創建文件
[root @backup ~ ]# touch /mnt/nfs/1.txt
touch: cannot touch ‘/mnt/nfs/1.txt’: Read-only file system
3)和客戶端掛載命令的參數有關 ro/rw 等
3. NFS配置參數權限
rw 存儲目錄是否有讀寫權限
ro 存儲目錄是否時只讀權限
sync 同步方式存儲數據 直接將數據保存到磁盤(數據存儲安全)
async 異步方式存儲數據 直接將數據保存到內存(提高數據存儲效率)
no_root_squash 不要將root用戶身份進行轉換 (默認參數)
root_squash 將root用戶身份進行轉換
all_squash 將所有普通用戶身份都進行轉換
no_all_squash 不要將普通用戶身份進行轉換(默認參數)
操作演示一:all_squash參數功能
# nfs服務端修改配置文件參數
[root @nfs ~ ]# cat /etc/exports
/date 172.16.1.0/24(rw,sync,all_squash)
[root @nfs ~ ]# systemctl restart nfs
# 客戶端backup掛載存儲目錄,創建數據。(需要重新掛載共享目錄)
[root @backup ~ ]# mount -t nfs 172.16.1.31:/date /mnt/nfs
[root @backup ~ ]# su - xuan
[xuan @backup ~ ]$ touch /mnt/nfs/xuan_backup.txt
[xuan @backup ~ ]$ ll /mnt/nfs/xuan_backup.txt
-rw-rw-r-- 1 nfsnobody nfsnobody 0 Sep 3 08:55 /mnt/nfs/xuan_backup.txt
操作演示二:no_all_squash參數功能
# nfs服務端修改配置文件參數
[root @nfs ~ ]# cat /etc/exports
/date 172.16.1.0/24(rw,sync,no_all_squash)
# 客戶端操作,沒有權限創建。原因:no_all_squash取消其他用戶映射nfsnobody身份,以共享目錄其他身份權限操作
[xuan @backup ~ ]$ touch /mnt/nfs/xuan_backup_no_squash.txt
touch: cannot touch ‘/mnt/nfs/xuan_backup_no_squash.txt’: Permission denied
解決權限問題:
1.修改目錄屬主信息
2.修改目錄其他用戶權限
chmod o+w /date
操作演示三:root_squash參數功能
# nfs服務端修改配置文件參數
[root @nfs ~ ]# cat /etc/exports
/date 172.16.1.0/24(rw,sync,root_squash)
# 客戶端使用root用戶創建數據
[root @backup ~ ]# touch /mnt/nfs/root_date.txt
[root @backup ~ ]# ll /mnt/nfs/root_date.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep 3 09:21 /mnt/nfs/root_date.txt
4. 企業互聯網公司如何配置NFS 各種squash參數
保證存儲目錄數據的安全性
配置參數一:no_all_squash 禁止其他用戶訪問共享目錄,可以刪除數據或者存儲數據
說明1:當nfs存儲目錄配置all_squash參數,其他用戶會以nfsnobody身份訪問共享目錄,其他用戶可以進入共享目錄進行創建刪除數據操作
說明2:配置 no_all_squash 參數,其他用戶以共享目錄其他用戶身份權限操作
問題:配置no_all_squash,當web服務的站點用戶www如何存儲數據?
[root @nfs ~ ]# cat /etc/exports
/date 172.16.1.0/24(rw,sync,no_all_squash)
# 第一步: nfs服務器操作:創建www用戶,設置共享目錄/date屬主屬組信息
[root @nfs ~ ]# useradd www;echo 123456 |passwd --stdin www
[root @nfs ~ ]# id www
uid=2001(www) gid=2001(www) groups=2001(www)
[root @nfs ~ ]# chown -R www. /date
[root @nfs ~ ]# ll -d /date
drwxr-xr-x 2 www www 217 Sep 3 11:53 /date
# 第二步:web服務器(客戶端)以www用戶存儲數據
[root @web01 ~ ]# su - www
[root @web01 ~ ]# useradd www -u 1001
[www @web01 ~ ]$ touch /mnt/nfs/www_date.txt
說明:當讓www用戶可以管理共享目錄,方法是把共享存儲目錄修改屬主信息為www用戶,確保客戶端www用戶必須和服務端www用戶uid號碼一致,否則沒有權限操作目錄數據
配置參數二:root_squash
說明:當修改共享目錄屬主不是nfsnobody時,root用戶也不可以修改共享目錄數據。原因:root_squash默認把root用戶轉換為nfsnobody用戶
此時nfsnobody為共享目錄其他用戶身份操作,沒有權限修改數據
# 修改nfs配置文件,並且共享目錄不是nfsnobody
[root @nfs ~ ]# vim /etc/exports
/date 172.16.1.0/24(rw,sync,no_all_squash,root_squash)
# 客戶端以root用戶身份也無法操作
[root @web01 ~ ]# touch /mnt/nfs/root_date.txt
touch: cannot touch ‘/mnt/nfs/root_date.txt’: Permission denied
以上默認配置(很多服務默認配置都是從安全角度出發)
如何查看nfs默認配置 /val/lib/nfs/etab
[root @nfs ~ ]# cat /var/lib/nfs/etab
/var/lib/nfs/etab文件作用:只是記錄nfs服務默認配置信息,不會對nfs服務產生影響
nfs服務配置文件參數:no_all_squash,root_squash ,如何讓root用戶可以管理www屬主共享目錄?
root → root_squash → www → 管理/date
客戶端root用戶可以映射nfs服務端www = 1001管理數據
[root @nfs ~ ]# vim /etc/exports
/date 172.16.1.0/24(rw,sync,no_all_squash,root_squash,anonuid=1001,anongid=1001)
nfs配置參數:
anonuid = 65534 指定客戶端用戶映射服務端用戶uid號碼
anongid = 65534 指定客戶端用戶組映射服務端用戶組gid號碼
說明:65534用戶就是nfs服務創建的nfsnobody用戶,但是nfsnobody虛擬用戶,也有家目錄
[root @nfs ~ ]# grep 65534 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
5. 企業中如何編輯nfs配置文件
1. 通用方法 *****
/data 172.16.1.0/24(rw,sync)
- 特殊情況 (讓部分人員不能操作存儲目錄 可以看目錄中的數據)
/data 10.0.0.0/24(ro,sync)
- 修改默認的匿名用戶
/data 10.0.0.0/24(ro,sync,anonuid=xxx,anongid=xxx)
5. nfs服務問題
nfs服務器重啟,掛載后創建數據比較慢
原因:服務器重啟方式不正確
重啟方式一:restart 重啟服務 強制斷開所有連接 用戶感受不好
說明:當多台客戶端訪問服務端建立網絡連接時,其中倆台客戶端主機向服務端傳輸數據,服務端突然 restart 重啟服務,會把和服務端建立所有連接強制斷開,影響數據傳輸。 再次重新連接連接的冷卻時間為90秒(就是TCP的walk_time)
重啟方式二:reload 重啟服務(平滑重啟) 強制斷開沒有數據傳輸的連接 提升用戶感受
說明:reload 重啟服務,先會把沒有數據傳輸連接斷開,再等待數據傳輸完畢之后斷開連接
6. NFS客戶端配置詳細說明
客戶端掛載共享目錄
mount -t nfs 172.16.1.31:/date /mnt/nfs
參數說明:mount -t 指定掛載文件系統類型
# 實現開機自動掛載共享目錄
方法一:利用開機腳本 rc.local
echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
方法二. 利用fstab文件
vim /etc/fstab
172.16.1.31:/data /mnt nfs defaults 0 0
問題:編寫fstab文件,無法開機自動掛載網絡共享存儲目錄?
centos6:無法實現網路存儲服務自動掛載原因(依賴autofs服務)
centos6是串行啟動服務方式,按照服務啟動先后順序啟動對應服務程序,直到最后一個服務啟動完畢才算服務器服務開機啟動時間
順序依次啟動 network服務--- sshd服務--- crond服務--- rsync服務--- rpcbind服務--- nfs服務
實現開機掛載:
1.先加載fstab文件 ,加載最后一行共享目錄掛載時,主機的網絡服務還沒有啟動,導致無法掛載
2.啟動系統其它服務 network
3.啟動 aotufs服務
作用:開機啟動autofs服務,會重新加載fstab配置文件信息。實現開機可以掛載共享目錄
centos7:無法實現網路存儲服務自動掛載原因(依賴remote-fs.target服務)
centos7是並行啟動服務方法,把系統所有開機啟動服務一並進行啟動,開機啟動時間取決於最慢啟動服務數據
順序依次啟動
network服務
sshd服務
crond服務
rsync服務
實現開機掛載:需要開機啟動centos7特殊加載fstab服務 remote-fs.target
systemctl start remote-fs.target
systemctl enable remote-fs.target
客戶端mount命令參數
rw 實現掛載后掛載點目錄可讀可寫 (默認)
ro 實現掛載后掛載點目錄可讀可寫
suid 在共享目錄中可以讓setuid權限位生效 (默認)
nosuid 在共享目錄中可以讓setuid權限位失效 提供共享目錄的安全性
exec 共享目錄中的執行文件可以直接執行(默認)
noexec 共享目錄中的執行文件可以無法直接執行 提供共享目錄的安全性
auto 可以實現自動掛載 (默認) root用戶:mount -a 實現加載fstab文件自動掛載
noauto 不可以實現自動掛載
nouser 禁止普通用戶可以卸載掛載點(默認)
user 允許除了root的普通用戶可以卸載掛載點 選項隱含了 noexec, nosuid, nodev 選項,除非你特意進行了修改(比如:users,exec,dev,suid
users 允許任意用戶可以卸載掛載點
# 配置 user參數,普通用戶無法卸載??
[xuan @web01 ~ ]$ tail -1 /etc/fstab
172.16.1.31:/date /mnt/nfs nfs auto,user 0 0
[xuan @web01 ~ ]$ umount /mnt/nfs
umount: /mnt/nfs: umount failed: Operation not permitted
# 配置 users參數,可以實現普通用戶卸載
[xuan @web01 ~ ]$ tail -1 /etc/fstab
172.16.1.31:/date /mnt/nfs nfs auto,users 0 0
[xuan @web01 ~ ]$ umount /mnt/nfs
說明:配置參數users配合aotu實現普通用戶卸載共享目錄掛載
客戶端如何卸載
umount -lf /mnt/nfs 表示:強制卸載掛載點
參數說明:
umount -l 表示不退出掛載點目錄進行卸載
umount -f 表示強制進行卸載