nfs原理
什么是nfs?
network file system 網(wǎng)絡(luò)文件系統(tǒng) nfs共享存儲(chǔ)
nfs能干什么?
nfs 能為 不同主機(jī)系統(tǒng)之間 實(shí)現(xiàn) 文件的共享
為什么要使用nfs?
在集群架構(gòu)中使用
nfs能解決什么問(wèn)題命浴?
1.解決多臺(tái)機(jī)器靜態(tài)資源一致性問(wèn)題
2.解決多態(tài)機(jī)器資源共享
3.解決磁盤(pán)空間浪費(fèi)的問(wèn)題
使用nfs的注意事項(xiàng)?
1.添加共享存儲(chǔ),只會(huì)帶來(lái)網(wǎng)站的訪問(wèn)延時(shí)和消耗,并不會(huì)增加網(wǎng)站訪問(wèn)的速度.
2.CDN---->聽(tīng)聽(tīng)就行( )
1.購(gòu)買廠商CDN ---> 用戶請(qǐng)求img--->CDN--->負(fù)載均衡-->Web-->存儲(chǔ)-->CDN緩存該圖片
2.所有的web都是用共享存儲(chǔ),圖片此時(shí)一致, 只需要將圖片定期的推送至CDN
nfs實(shí)現(xiàn)的原理解析?
本地文件操作方式
1.當(dāng)用戶執(zhí)行mkdir命令露泊,BashShell無(wú)法完成該命令操作骄酗,會(huì)將其翻譯給內(nèi)核智润。
2.Kernel內(nèi)核解析完成后會(huì)驅(qū)動(dòng)對(duì)應(yīng)的磁盤(pán)設(shè)備,完成創(chuàng)建目錄的操作贤徒。
NFS實(shí)現(xiàn)原理
1.NFS客戶端執(zhí)行增芹壕、刪等操作,客戶端會(huì)使用不同的函數(shù)對(duì)該操作進(jìn)行封裝接奈。(windows linux mac)
2.NFS客戶端會(huì)通過(guò)TCP/IP的方式傳遞給NFS服務(wù)端踢涌。(可靠)
3.NFS服務(wù)端接收到請(qǐng)求后,會(huì)先調(diào)用portmap進(jìn)程進(jìn)行端口映射序宦。
4.nfsd進(jìn)程用于判斷NFS客戶端是否擁有權(quán)限連接NFS服務(wù)端睁壁。
5.Rpc.mount進(jìn)程判斷客戶端是否有對(duì)應(yīng)的權(quán)限進(jìn)行驗(yàn)證。讀 寫(xiě)
6.idmap進(jìn)程實(shí)現(xiàn)用戶映射和壓縮互捌。
7.最后NFS服務(wù)端會(huì)將客戶端的函數(shù)轉(zhuǎn)換為本地能執(zhí)行的命令潘明,然后將命令傳遞至內(nèi)核,由內(nèi)核驅(qū)動(dòng)硬件秕噪。
注意: rpc是一個(gè)遠(yuǎn)程過(guò)程調(diào)用钳降,那么使用nfs必須有rpcbind服務(wù)
安裝、配置腌巾、nfs服務(wù)
安裝
[root@nfs ~]# yum install nfs-utils -y
配置
1.共享什么目錄?
2.共享給誰(shuí)使用?
3.共享后目錄,客戶端擁有什么權(quán)限?
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw)
根據(jù)配置進(jìn)行初始化環(huán)境
[root@nfs ~]# mkdir /data
[root@nfs ~]# chown -R nfsnobody.nfsnobody /data/
啟動(dòng)
[root@nfs ~]# systemctl enable nfs
[root@nfs ~]# systemctl start nfs
客戶端測(cè)試
[root@backup ~]# yum install nfs-utils -y
[root@backup ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
掛載遠(yuǎn)程172.16.1.31的/data至本地的/mnt目錄
[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt
nfs相關(guān)的配置參數(shù)
nfs共享參數(shù) | 參數(shù)作用 |
---|---|
rw | 讀寫(xiě)權(quán)限 (最多) |
ro | 只讀權(quán)限 (只希望看,不希望寫(xiě)) |
root_squash | 當(dāng)NFS客戶端以root管理員訪問(wèn)時(shí)遂填,映射為NFS服務(wù)器的匿名用戶nfsnobody(不常用) |
no_root_squash | 當(dāng)NFS客戶端以root管理員訪問(wèn)時(shí),映射為NFS服務(wù)器的root管理員(不常用) |
no_all_squash | 無(wú)論NFS客戶端使用什么賬戶訪問(wèn)澈蝙,都不進(jìn)行用戶壓縮 ( 后面講云計(jì)算課程會(huì)用上 ) |
all_squash | 無(wú)論NFS客戶端使用什么賬戶訪問(wèn)吓坚,均映射為NFS服務(wù)器的匿名用戶(常用) |
sync* | 同時(shí)將數(shù)據(jù)寫(xiě)入到內(nèi)存與硬盤(pán)中,保證不丟失數(shù)據(jù) |
async | 優(yōu)先將數(shù)據(jù)保存到內(nèi)存灯荧,然后再寫(xiě)入硬盤(pán)礁击;這樣效率更高,但可能會(huì)丟失數(shù)據(jù) |
anonuid* | 配置all_squash使用,指定NFS的用戶UID,必須存在系統(tǒng) |
anongid* | 配置all_squash使用,指定NFS的用戶UID,必須存在系統(tǒng) |
練習(xí)
1.在NFS服務(wù)端(A)上共享/data/w(可寫(xiě)) 及/data/r(只讀)
2.在NFS客戶端(B/C)上進(jìn)行掛載
服務(wù)段配置文件
[root@nfs r]# cat /etc/exports
/date/w 172.16.1.0/24(rw,all_squash,anonuid=666,anongid=666)
/date/r 172.16.1.0/24(ro,all_squash,anonuid=666,anongid=666)