大數(shù)據(jù)服務(wù)上云的思考">大數(shù)據(jù)服務(wù)上云的思考
1047
2025-03-31
簡(jiǎn)述
NFS會(huì)經(jīng)常用到,用于在網(wǎng)絡(luò)上共享存儲(chǔ)。這樣講,你對(duì)NFS可能不太了解,舉一個(gè)例子來(lái)說(shuō)明一下NFS是用來(lái)做什么的。假如有三臺(tái)機(jī)器A, B, C,它們需要訪問(wèn)同一個(gè)目錄,目錄中都是圖片,傳統(tǒng)的做法是把這些圖片分別放到A, B, C. 但是使用NFS只需要放到A上,然后A共享給B和C即可。訪問(wèn)的時(shí)候,B和C是通過(guò)網(wǎng)絡(luò)的方式去訪問(wèn)A上的那個(gè)目錄的。
工作原理
nfs是基于rpc來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)文件系統(tǒng)共享的
RPC工作機(jī)制
RPC(Remote Procedure Call Protocol),遠(yuǎn)程過(guò)程調(diào)用協(xié)議,它是一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。
RPC協(xié)議假定某些傳輸協(xié)議的存在,如TCP或UDP,為通信程序之間攜帶信息數(shù)據(jù)。在OSI網(wǎng)絡(luò)通信模型中,RPC跨越了傳輸層和應(yīng)用層。
RPC采用客戶機(jī)/服務(wù)器模式。請(qǐng)求程序就是一個(gè)客戶機(jī),而服務(wù)提供程序就是一個(gè)服務(wù)器。
客戶端程序發(fā)起一個(gè)RPC系統(tǒng)調(diào)用基于TCP協(xié)議發(fā)送給另一臺(tái)主機(jī)(服務(wù)端)
服務(wù)端監(jiān)聽(tīng)在某個(gè)套接字上,當(dāng)收到客戶端的系統(tǒng)調(diào)用請(qǐng)求以后,將收到的請(qǐng)求和其所傳遞的參數(shù)通過(guò)本地的系統(tǒng)調(diào)用執(zhí)行一遍,并將結(jié)果返回給本地的服務(wù)進(jìn)程
服務(wù)端的服務(wù)進(jìn)程收到返回的執(zhí)行結(jié)果后將其封裝成響應(yīng)報(bào)文,再通過(guò)rpc協(xié)議返回給客戶端
客戶端調(diào)用進(jìn)程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行
NFS 工作機(jī)制
NFS服務(wù)器端運(yùn)行著四個(gè)進(jìn)程: nfsd mountd idmapd portmapper idmapd //實(shí)現(xiàn)用戶帳號(hào)的集中映射,把所有的帳號(hào)都映射為NFSNOBODY,但是在訪問(wèn)時(shí)卻能以本地用戶的身份去訪問(wèn) mountd //用于驗(yàn)證客戶端是否在允許訪問(wèn)此NFS文件系統(tǒng)的客戶端列表中,在則允許訪問(wèn)(發(fā)放一個(gè)令牌,持令牌去找nfsd),否則拒絕訪問(wèn) //mountd的服務(wù)端口是隨機(jī)的,由rpc服務(wù)(portmapper)提供隨機(jī)端口號(hào) nfsd //nfs的守護(hù)進(jìn)程,監(jiān)聽(tīng)在2049/tcp和2049/udp端口上 //不負(fù)責(zé)文件存儲(chǔ)(由NFS服務(wù)器本地內(nèi)核負(fù)責(zé)調(diào)度存儲(chǔ)),用于理解客戶端發(fā)起的rpc請(qǐng)求,并將其轉(zhuǎn)交給本地內(nèi)核,而后存儲(chǔ)在指定的文件系統(tǒng)上
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
應(yīng)用環(huán)境
nfs有很多實(shí)際應(yīng)用場(chǎng)景,以下是一些常用的場(chǎng)景:
多個(gè)機(jī)器共享一臺(tái)CDROM或其他設(shè)備。這對(duì)于在多臺(tái)機(jī)器中安裝軟件來(lái)說(shuō)更加便宜與方便
在大型網(wǎng)絡(luò)中,配置一臺(tái)中心NFS服務(wù)器用來(lái)放置所有用戶的home目錄可能會(huì)帶來(lái)便利。這些目錄能被輸出到網(wǎng)絡(luò)以便用戶不管在哪臺(tái)工作站上登錄,總能得到相同的home目錄
不同客戶端可在NFS上觀看影視文件,節(jié)省本地空間
在客戶端完成的工作數(shù)據(jù),可以備份保存到NFS服務(wù)器上用戶自己的路徑
服務(wù)端配置NFS
CentOS上使用NFS服務(wù),需要安裝兩個(gè)包(nfs-utils和rpcbind), 不過(guò)當(dāng)使用yum安裝nfs-utils時(shí)會(huì)把rpcbind一起安裝上:
[root@localhost ~]# yum install -y nfs-utils
1
在之前的CentOS版本中,是需要安裝portmap包的,從CentOS6開(kāi)始,就改為rpmbind了。NFS配置起來(lái)還是蠻簡(jiǎn)單的,只需要編輯配置文件/etc/exports即可。下面阿銘就先創(chuàng)建一個(gè)簡(jiǎn)單的NFS服務(wù)器。
首先是修改配置文件,默認(rèn)該文件為空,現(xiàn)在編輯它:
[root@localhost ~]# vim /etc/exports
1
寫(xiě)入如下內(nèi)容:
/home/ 192.168.137.0/24(rw,sync,all_squash,anonuid=501,anongid=501)
1
這個(gè)配置文件就這樣簡(jiǎn)單一行。共分為三部分,第一部分就是本地要共享出去的目錄,第二部分為允許訪問(wèn)的主機(jī)(可以是一個(gè)IP也可以是一個(gè)IP段)第三部分就是小括號(hào)里面的,為一些權(quán)限選項(xiàng)。
rw :讀寫(xiě); ro :只讀; sync :同步模式,內(nèi)存中數(shù)據(jù)時(shí)時(shí)寫(xiě)入磁盤(pán); async :不同步,把內(nèi)存中數(shù)據(jù)定期寫(xiě)入磁盤(pán)中; no_root_squash :加上這個(gè)選項(xiàng)后,root用戶就會(huì)對(duì)共享的目錄擁有至高的權(quán)限控制,就像是對(duì)本機(jī)的目錄操作一樣。不安全,不建議使用; root_squash:和上面的選項(xiàng)對(duì)應(yīng),root用戶對(duì)共享目錄的權(quán)限不高,只有普通用戶的權(quán)限,即限制了root; all_squash:不管使用NFS的用戶是誰(shuí),他的身份都會(huì)被限定成為一個(gè)指定的普通用戶身份; anonuid/anongid :要和root_squash 以及all_squash一同使用,用于指定使用NFS的用戶限定后的uid和gid,前提是本機(jī)的/etc/passwd中存在這個(gè)uid和gid。 介紹了上面的相關(guān)的權(quán)限選項(xiàng)后,再來(lái)分析一下剛剛配置的那個(gè)/etc/exports文件。其中要共享的目錄為/home,信任的主機(jī)為192.168.137.0/24這個(gè)網(wǎng)段,權(quán)限為讀寫(xiě),同步,限定所有使用者,并且限定的uid和gid都為501。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
編輯好配置文件后,就該啟動(dòng)NFS服務(wù)了:
[root@localhost ~]# /etc/init.d/rpcbind start; /etc/init.d/nfs start
1
在啟動(dòng)nfs服務(wù)之前,需要先啟動(dòng)rpcbind服務(wù),之前CentOS老版本中并不是rpcbind, 而是叫做portmap.
客戶端上掛載nfs
客戶端在掛載NFS之前,我們需要先看一看服務(wù)端都共享了哪些目錄,這需要使用showmount命令,但是這個(gè)命令是nfs-utils這個(gè)包所帶的,所以同樣需要安裝nfs-utils:
[root@localhost ~]# yum install -y nfs-utils
1
現(xiàn)在可以看看服務(wù)器端都共享了哪些目錄了:
[root@localhost ~]# showmount -e 192.168.137.10 Export list for 192.168.137.10: /home 192.168.137.0/24
1
2
3
可以看到剛才我們?cè)诜?wù)端配置的nfs共享信息。 showmount -e 加IP就可以查看NFS的共享情況,上例中,就可以看到192.168.137.10的共享目錄為/home,信任主機(jī)為192.168.137.0/24這個(gè)網(wǎng)段。
下面在客戶端上掛載服務(wù)端的nfs:
[root@localhost ~]# mount -t nfs 192.168.137.10:/home/ /mnt/ [root@localhost ~]# df -h 文件系統(tǒng) 容量 已用 可用 已用%% 掛載點(diǎn) /dev/sda3 14G 6.4G 6.7G 50% / tmpfs 160M 0 160M 0% /dev/shm /dev/sda1 97M 27M 66M 29% /boot /dev/sdb5 989M 19M 920M 3% /home 192.168.137.10:/home/ 989M 19M 920M 3% /mnt
1
2
3
4
5
6
7
8
9
用 df -h 命令可以看到多出來(lái)一個(gè)/mnt分區(qū),它就是NFS共享的目錄了。
在這一章節(jié)里,使用的命令不多,另外還有一個(gè)常用的命令那就是exportfs,它的常用選項(xiàng)為[-aruv].
-a :全部掛載或者卸載;
-r :重新掛載;
-u :卸載某一個(gè)目錄;
-v :顯示共享的目錄;
使用exportfs命令,當(dāng)改變/etc/exports配置文件后,不用重啟nfs服務(wù)直接用這個(gè)exportfs即可。接下來(lái)阿銘做一個(gè)實(shí)驗(yàn),先改一下服務(wù)端的配置文件:
[root@localhost ~]# vim /etc/exports
1
增加一行:
/tmp/ 192.168.137.0/24(rw,sync,no_root_squash)
1
然后服務(wù)端上執(zhí)行命令:
[root@localhost ~]# exportfs -arv exporting 192.168.137.0/24:/tmp exporting 192.168.137.0/24:/home
1
2
3
在之前的命令中用到了mount命令來(lái)掛載nfs,其實(shí)mount這個(gè)nfs服務(wù)還是有些說(shuō)法的。首先是用-t nfs 來(lái)指定掛載的類型為nfs。另外在使用nfs時(shí),常用一個(gè)選項(xiàng)就是 -o nolock 了,即在掛載nfs服務(wù)時(shí),不加鎖。 在客戶端上執(zhí)行:
[root@localhost ~]# mkdir /test [root@localhost ~]# mount -t nfs -o nolock 192.168.137.10:/tmp/ /test/
1
2
我們還可以把要掛載的nfs目錄寫(xiě)到client上的/etc/fstab文件中,掛載時(shí)只需要執(zhí)行 mount -a 即可。在 /etc/fstab里加一行:
192.168.137.10:/tmp/ /test nfs nolock 0 0
1
因?yàn)閯倓倰燧d過(guò),所以先卸載:
[root@localhost ~]# umount /test/
1
然后執(zhí)行:
[root@localhost ~]# mount -a
1
RPC TCP/IP
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。