原文內容來自於LZ(樓主)的印象筆記,如出現排版異常或圖片丟失等問題,可查看當前鏈接:https://app.yinxiang.com/shard/s17/nl/19391737/ad99ab1d-1040-45e0-aaf6-f5d69c247862
問題:
1、如何使A服務器的某個目錄掛載到B服務器的某個目錄下,使其達到B服務下的目錄文件一旦變更,可以實時的在A服務的目錄下體現出來;
Lnux的解決方式
1、首先將B服務器的該目錄,設置為共享文件夾(只有將其設置為共享文件夾后才能再另外的機器上進行該目錄的遠程連接訪問,共享文件夾這個概念與windows 很有相似之處)
2、A服務器則通過 mount 的方式,指定對應的遠程主機所拋出來的共享文件夾進行連接
linux如何實現共享文件夾的效果呢?
1、A服務器新創建的文件夾遠程掛載到B服務器的某個 10G以上大小內容的文件夾下后,實際情況下A服務器的磁盤並沒有因為掛載了10G的遠程文件,而被消耗掉10G的磁盤空間,這說明實際情況下的掛載,並非將遠程服務的文件實時Copy到目標文件夾中,當然這也不符合共享文件夾的特征;
那么既然是已經掛載了遠程目錄后,此時A服務訪問自身文件夾時,是如何實時展示B服務的文件夾內容的呢? 原因是,
A服務每次對於自身掛載文件夾的訪問,實際上都是發送了一次新的RPC請求,請求目標服務器,將其對應的目錄數據實時返回到A服務器的文件展示當中
;
(Linux中存在這樣一個應用即:Network File System 即 NFS 網絡文件系統,一種使用於分散式文件系統的協定,讓應用程序在客戶端通過網絡訪問位於磁盤中的數據,是在類Unix系統間實現對應的磁盤文件共享的一種方法,)
NFS於RPC的關系:
NFS在文件傳送或信息傳送過程中依賴於RPC協議。RPC,遠程過程調用 (Remote Procedure Call) 是能使客戶端執行其他系統中程序的一種機制。
NFS本身是沒有提供信息傳輸的協議和功能的,但NFS卻能讓我們通過網絡進行資料的分享,這是因為NFS使用了一些其它的傳輸協議
。
而這些傳輸協議用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程序。或者說NFS也是一個RPC SERVER
。
所以只要用到NFS的地方都要啟動RPC服務,
不論是NFS SERVER或者NFS CLIENT
。
這樣SERVER和CLIENT才能通過RPC來實現PROGRAM PORT的對應
。可以這么理解RPC和NFS的關系:NFS是一個文件系統,而RPC是負責負責信息的傳輸。
所以,如果要實現共享文件夾的效果,那么首先需要安裝NFS,但由於NFS是依賴於RPC協議來進行的協議傳輸,所以,此時需同時安裝,NFS 和 RPC 兩個應用程序;
安裝NFS和RPC(安裝nfs-utils,rpcbind)
yum -y install nfs-utils rpcbind
設置共享目錄
NFS的配置文件為/etc/exports,文件內容默認為空(無任何共享)。在exports文件中設置共享資源時,
記錄格式為 "目錄位置 客戶機地址(權限選項)" 其中客戶機地址於權限列表的括號() 中間不能有空格;
如下 例子則表示:將 /app 目錄文件夾共享到 172.16.8.97的服務網段使用,且允許讀寫操作
vim /etc/exports
/app 172.16.8.97(rw,sync,no_root_squash)
客戶機地址 可以是 : 主機名、IP地址、網段地址、或者"*、?"通配符;
權限選項:rw表示允許讀寫(ro為只讀)
sync表示同步寫
no_root_squash表示當前客戶機以root身份訪問時,賦予本地root權限(默認是root_squash,將作為nfsnobody用戶降權對待) (NFS 服務器共享目錄用戶的屬性,如果用戶是 root,那么對於這個共享目錄來說就具有 root 的權限。)
給多個地址授權
/app 172.16.8.97(rw,sync,no_root_squash) 172.16.8.98(rw,sync,no_root_squash)
給某個網段內所有IP授權
/app 172.16.8.*(rw,sync,no_root_squash)
啟動NFS服務
配置完上述的目錄文件配置后,則啟動NFS服務;
先啟動 RPC服務,再啟動 NFS 服務
service rpcbind start
service nfs start
啟動完對應的rpcbind和nfs后,可以使用ps查看下對應的進程信息
[root@xiaoi-3614 sysconfig]# ps -ef|grep rpcbind
root 4552 1765 0 18:34 pts/1 00:00:00 grep --color=auto rpcbind
rpc 31396 1 0 16:58 ? 00:00:00 /sbin/rpcbind -w
[root@xiaoi-3614 sysconfig]# ps -ef|grep nfs
root 4565 1765 0 18:34 pts/1 00:00:00 grep --color=auto nfs
root 32210 2 0 17:11 ? 00:00:00 [nfsd4_callbacks]
root 32216 2 0 17:11 ? 00:00:00 [nfsd]
root 32217 2 0 17:11 ? 00:00:00 [nfsd]
root 32218 2 0 17:11 ? 00:00:00 [nfsd]
root 32219 2 0 17:11 ? 00:00:00 [nfsd]
root 32220 2 0 17:11 ? 00:00:00 [nfsd]
root 32221 2 0 17:11 ? 00:00:00 [nfsd]
root 32222 2 0 17:11 ? 00:00:00 [nfsd]
root 32223 2 0 17:11 ? 00:00:00 [nfsd]
查看所指定IP機器,當前已發布的NFS共享目錄
[root@xiaoi-3614 sysconfig]# showmount -e 172.16.36.14
Export list for 172.16.36.14:
/app 172.16.8.97
當服務機器已經按照上述配置部署完以后,則此時便可以直接在A服務器上,進行目錄的掛載操作
1、由於上面也已經提到過目錄的掛載於共享是基於RPC協議進行的具體NFS的實現,所以,此處A服務器作為掛載方,也應同時具備,RPC的應用功能,所以也應同時安裝對應的 rpcbind 服務插件
此處安裝rpcbind依賴,由於LZ此處A服務上,已經具備了rpcbind依賴,所以,此處並沒有進行安裝,(安裝rpcbind時,最好也可以直接把 nfs-utils 同步安裝下,后續再次作為共享方時,則也會方便很多)
yum -y install rpcbind
執行mount命令,手動掛載NFS共享目錄
使用mount命令,此處表示將IP為:172.16.36.14所共享的app目錄,掛載到當前服務的 /app/ftdq_kbase/mnt 目錄下
mount 172.16.36.14:/app /app/ftdq_kbase/mnt
修改本地 /etc/fstab文件,實現目錄的自動加載(具體fstab的配置方式,可以 百科一下 )
[root@NFSClient ~]# vim /etc/fstab
...... //部分內容省略
1.1.1.1:/www /var/www/html nfs defaults,_netdev 0 0
查看當前服務器所有的目錄掛載點:
[root@xiaoi2017-897 dev]# df -ah
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 91G 33G 54G 38% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devpts 0 0 0 - /dev/pts
tmpfs 16G 0 16G 0% /dev/shm
/dev/sda1 190M 38M 142M 22% /boot
none 0 0 0 - /proc/sys/fs/binfmt_misc
sunrpc 0 0 0 - /var/lib/nfs/rpc_pipefs
-- 此處便是上述所掛載的遠程目錄
172.16.36.14:/app 50G 26G 25G 51% /app/ftdq_kbase/mnt
參考鏈接:
yum 安裝及rpm常用命令
mount 參數詳情