NFS服務部署


2020年9月15號,13時14分(這個時間秒啊!)
弱者廢話連篇,強者無序多言,嘿嘿!!!
下面一起學習nfs網絡存儲部署,有些寫得不好請多多指出
博客同步:www.xiaoxuanzi.top

1.NFS儲存服務

1.1 概念說明

NFS是Network File System的縮寫中文意思是網絡文件共享系統,它的主要功能是通過網絡(一般是同域網)讓不同的主機系統之間可以共享文件或目錄。

NFS客戶端(-般為應用服務器,例如web)可以通過掛載(mount) 的方式將NFS服務器端共享的數據目錄掛載到NFS客戶端本地系統中(就是某一個掛載點下)。從客戶端本地看,NFS服務器端共享的目錄就好像是客戶端自己的磁盤分區或者目錄- -樣,而實際上卻是遠端的NFS服務器的目錄。

存儲服務的種類:

用於中小型企業存儲作用:實現數據共享存儲

  1. FTP存儲服務:文件傳輸協議

運維人員01需要管理服務器01和服務器02,運維人員02需要管理服務器03和服務器04,假設運維人員01需要管理服務器03,怎么辦?

在公司部署FTP共享儲存服務器,把可以共享數據放在共享存儲服務器,方便公司人員管理查看。

案例:中小型充值公司(游戲幣,QQ幣,話費)→ 每日財務對賬信息存儲數據庫服務器 → 每月財務信息文件上傳FTP服務器 → 合作公司(移動,騰訊)可以查賬

  1. Samba存儲服務:實現Linux和Windows之間數據傳輸存儲(Linux部署Samba)

  2. 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)

  1. 特殊情況 (讓部分人員不能操作存儲目錄 可以看目錄中的數據)

​ /data 10.0.0.0/24(ro,sync)

  1. 修改默認的匿名用戶

​ /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 表示強制進行卸載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM