RPC服務知識概念介紹說明,以及RPC服務存在價值
前端NFS服務工做原理講解
linuxNFS共享文件系統使用原理講解web
NFS服務配罝文件exports編寫格式說明vim
NFS(Network File System)即網絡文件系統centos
它的主要功能是經過網絡(通常是局域網)讓不一樣的主機系統之間能夠共享文件或目錄。安全
分佈式文件系統Moosefs(mfs)\glusterFS服務器
nfs屬於本地文件存儲服務網絡
缺點一:架構
winndows上沒法使用併發
缺點二:
在高併發場景,以及存儲量比較高的場景,對數據安全性要求比較高場景
須要採用分佈式儲存(mfs FastDFS)
分佈式文件系統:沒法在服務器中看到真實的文件信息
a.ftp(ftp服務部署) b.samba服務
主要用於存儲web服務器上用戶上傳的數據信息,圖片 附件 頭像 視頻 音頻
實現數據共享,數據統一一致
軟件實現:
本地文件系統NFS 分佈式文件系統 mfs
硬件實現:
IBM (服務器 小型機 大型機 存儲 DS V7000 V5000) oracle EMC = 去IOE
在nfs服務端建立共享目錄
經過mount 網路掛載,將NFS客戶端本地目錄掛載到NFS服務端共享目錄上
NFS客戶端掛載目錄上建立、刪除、查看數據操做,等價於在服務端進行的建立、刪除、查看數據操做
如圖10-5所示,在 NFS服務器端設置好一個共享目錄 /video後,其餘有權限訪問 NFS服務器端的客戶端均可以將這個共享目錄 /video掛載到客戶端本地的某個掛載點(其實就是一個目錄,這個掛載點目錄能夠本身隨意指定),圖10-5中的兩個 NFS客戶端本地的掛載點分別爲/ v/video和/video ,不一樣客戶端的掛載點能夠不相同。
客戶端正確掛載完畢後,就能夠經過 NFS客戶端的掛載點所在的/v/video或 /video目錄查看
到 NFS服務器端 /video共享出來的目錄下的全部數據。在客戶端上查看時 ,NFS服務器端的 /video目錄就至關於客戶端本地的磁盤分區或目錄,幾乎感受不到使用上的區別,根據 NFS服務器端授予 的 NFS共享權限以及共享目錄的本地系統權限,只要在指定的 NFS客戶端操做掛載/ v/video或/video的目錄,就能夠將數據輕鬆地存取到NFS服務器端上的/video目錄中了。
RPC服務 NFS服務
當訪問程序經過NFS客戶端向NFS服務器存取文件時,其請求數據流程大體以下:
01.首先用戶訪間網站程序,由程序在NFS客戶端上發出存取NFS文件的請求,這時NFS客戶端(即執行程序的服務器)的RPC服務(rpcbind服務)就會經過網絡向NFS服務器端的RPC服務(rpcbind服務)的111端口發出NFS文件存取功能的詢間請求. 02.NFS服務器端的RPC服務(rpcbind服務)找到對應的已註冊的NFS端口後,通知NFS客戶端的RPC服務(rpcbind服務)。 03.此時NFS客戶端獲取到正確的端口,並與NFS daemon聯機存取數據 04.NFS客戶端把數據存取成功後,返回給前端訪間程序,告知用戶存取結果,做爲網站用戶,就完成了一次存取操做。
由於NFS的各項功能都須要向RPC服務(rpcbind服務)註冊,因此只有RPC服務才能獲取到NFS服務的各項功能對應的端口號(port number)、PID、NFS在主機所監聽的IP等信息,而NFS客戶端也只能經過向RPC服務詢問才能找到正確的端□。也就是說,NFS須要有RPC服務的協助才能成功對外提供服務。從上面的描述,咱們不難推斷,不管是NFS客戶端仍是NFS服務器端,當要使用NFS時,都須要首先啓動RPC服務,NFS服務必須在RPC服務啓動以後啓動,客戶端無需啓動NFS服務,但須要啓動RPC服務。
NFS服務器部署角色IP
服務器系統 |
角色 |
IP |
CentOS release 6.9 (Final) |
NFS服務器端(NFS-Sever) |
10.0.0.31 |
CentOS release 6.9 (Final) |
NFS客戶端1(NFS-Client1) |
10.0.0.8 |
CentOS release 6.9 (Final) |
NFS客戶端2(NFS-Client2) |
10.0.0.41 |
rpm -qa|grep nfs
rpm -qa|grep rpc
安裝rpcbind nfs-utils服務程序,並進行驗證安裝是否成功
yum install -y nfs-utils rpcbind
rpm -qa nfs-utils rpcbind
nfs配置文件默認存在/etc/exports
vim /etc/exports #share /data by clsn for share at 20170220 /data 172.16.1.0/24(rw,sync)
/etc/exports文件說明:
第一部分:/data --指定共享目錄信息
第二部分:172.16.1.0/24 --指定了一個網段信息,表示容許指定的網段主機掛載到我本地的共享目錄上
第三部分:(rw,sync) --表示定義共享參數信息,
rw 表示讀寫,對共享目錄設置的權限
sync 同步,數據會先寫入到NFS服務器內存中,會馬上同步到磁盤裏面==直接存儲硬盤中
mkdir /data -p
chown -R nfsnobody.nfsnobody /data
說明:
NFS共享目錄管理用戶爲nfsnobody,此用戶不用建立,安裝nfs軟件時會自動建立
首先,啓動rpc服務
/etc/init.d/rpcbind start
其次,啓動nfs服務
/etc/init.d/nfs start
rpcbind服務啓動信息查看
[root@nfs01 ~]# ps -ef|grep rpcbind rpc 4050 1 0 10:55 ? 00:00:00 rpcbind root 4054 3878 0 10:55 pts/1 00:00:00 grep --color=auto rpcbind [root@nfs01 ~]# netstat -lntup|grep 111 tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 4050/rpcbind tcp 0 0 :::111 :::* LISTEN 4050/rpcbind udp 0 0 0.0.0.0:111 0.0.0.0:* 4050/rpcbind udp 0 0 :::111 :::* 4050/rpcbind [root@nfs01 ~]# 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
nfs啓動後查看信息
[root@nfs01 ~]# 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 100024 1 udp 28467 status 100024 1 tcp 56269 status 100011 1 udp 875 rquotad 100011 2 udp 875 rquotad 100011 1 tcp 875 rquotad 100011 2 tcp 875 rquotad 100005 1 udp 32886 mountd 100005 1 tcp 6154 mountd 100005 2 udp 38339 mountd 100005 2 tcp 60288 mountd 100005 3 udp 49824 mountd 100005 3 tcp 24427 mountd 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 2 tcp 2049 nfs_acl 100227 3 tcp 2049 nfs_acl 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 2 udp 2049 nfs_acl 100227 3 udp 2049 nfs_acl 100021 1 udp 61803 nlockmgr 100021 3 udp 61803 nlockmgr 100021 4 udp 61803 nlockmgr 100021 1 tcp 6064 nlockmgr 100021 3 tcp 6064 nlockmgr 100021 4 tcp 6064 nlockmgr
[root@nfs01 ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24
[root@nfs01 ~]# cat /var/lib/nfs/etab /data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,all_squash)
yum install rpcbind nfs-utils -y
提示:
rpcbind和nfs軟件均可以不啓動
[root@nfs01 ~]# rpm -qf `which showmount` nfs-utils-1.2.3-75.el6.x86_64
說明:showmount使用,須要安裝nfs-utils軟件
mount -t nfs 172.16.1.31:/data /mnt
測試
[root@backup ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24 [root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt
說明: 若是nfs軟件不安裝
a 沒法使用showmount 命令
b 客戶端沒法識別nfs 文件系統類型
[root@backup ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 19G 1.5G 17G 9% / tmpfs 238M 0 238M 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot 172.16.1.31:/data 19G 1.5G 17G 9% /mnt
【測試】本地nfs客戶端 進行增刪改數據 等價於 nfs服務端共享目錄操做
[root@backup mnt]# echo "test123">test.txt [root@backup mnt]# ll test.txt -rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt [root@nfs01 data]# cat test.txt test123
rpcbind rpc啓動進程 主進程
rpc state 檢查數據存儲的一致性
rpc.rquotad 磁盤配額
rpc.mountd 權限管理驗證
nfsd NFS主進程
rpc.idmapd 用戶壓縮映射
服務或進程名 |
用途說明 |
portmapper |
rpcbind服務的進程(centos5.x 上爲 portmap軟件) |
rquotad |
磁盤配額進程 |
nfs、nfs_acl |
nfs服務進程 |
nfsd (rpc.nfsd ) |
rpc.nfsd的主要功能是管理NFS客戶端是否可以登入NFS服務器端主機,其中還包括含登入者的ID判別等。 |
mountd |
rpc.mountd的主要功能則是管理NFS文件系統。當NFS客戶端順利經過rpc.nfsd登入NFS服務器端主機時,在使用NFS服務器提供數據以前,它會去讀NFS的配置文件/etc/exports來比對NFS客戶端的權限,經過這一關以後,還要通過NFS服務器端本地文件系統使用權限(就是owner、group、other權限)等認證程序。若是都經過了,NFS客戶端就能夠取得使用NFS服務器端文件的權限。 注意:這個/etc/exports文件也是咱們用來管理NFS共享目錄的使用權限與安全設置的地方,特別強調,NFS自己設置的是網絡共享權限,整個共享目錄的權限還和目錄自身的系統權限有關。 |
rpc.lockd (非必要) |
用來鎖定文件,用於多客戶端同時寫入 |
rpc.statd (非必要) |
檢查文件的一致性,與rpc.lockd有關。c、d兩個服務雲要客戶端,服務器端同時開啓才能夠;rpc.statd監聽來自其餘主機重啓的通知,而且管理當本地系統重啓時主機列表。 |
rpc.idmapd |
表示用戶映射或用戶壓縮(重要) |
□ NFS共享目錄:
爲 NFS服務器端要共享的實際目錄,要用絕對路徑,如 (/data )。注意共享目錄的本地權限,若是須要讀寫共享,必定要讓本地目錄能夠被 NFS客戶端的用戶 (nfsnobody)讀寫。
□ NFS客戶端地址:
爲NFS服務器端受權的可訪問共享目錄的NFS客戶端地址,能夠爲單獨的IP地址或主機名、域名等,也能夠爲整個網段地址。還能夠用來匹配全部客戶端服務器,這裏所謂的客戶端通常來講是前端的業務的業務服務器,例如:web服務。
□權限參數集
對受權的NFS客戶端的訪問權限設置。
nfs權限(共享目錄\借給你手機)nfs配置的/ etc/exports /data 172.16.1.0/24(rw)
本地文件系統權限(\手機密碼不告訴你)掛載目錄的權限rwxr- xr-x root root/data
客戶端地址 |
具體地址 |
說 明 |
受權單一客戶端訪問NFS |
10.0.0.30 |
通常狀況,生產環境中此配置很少 |
受權整個網段可訪問NFS |
10.0.0.0/24 |
其中的24等同於255.255.255.0 ,指定網段爲生產環境中最多見的配置。配置簡單,維護方便 |
受權整個網段可訪問NFS |
10.0.0.* |
指定網段的另外寫法(不推薦使用) |
受權某個域名客戶端訪問 |
nfs.clsnedu.com |
此方法生產環境中通常狀況不經常使用 |
受權整個域名客戶端訪問 |
*.clsnedu.com |
此方法生產環境中通常狀況不經常使用 |
經常使用格式說明 |
要共享的目錄客戶端IP地址或IP段(參1,參2,) |
配罝例一 |
/data10.0.0.0/24(ro,sync) 說明:容許客戶端讀寫,而且數據同步寫入到服務器揣的磁盤裏 注意:24和"("之間不能有空格 |
配置例二 |
/data10.0.0.0/24(rw,sync/all_squash,anonuid=2000,anongid=2000) 說明:容許客戶揣讀寫,而且數據同步寫到服務器揣的磁盤裏,而且指走客戶端 的用戶UID和GID,早期生產環境的一種配罝,適合多客戶端共享一個NFS服務 單目錄,若是全部服務器的nfsnobody帳戶UID都是65534,則本例沒什麼必 要了.早期centos5.5的系統默認狀況下nfsnobody的UID不必定是65534, 此時若是這些服務器共享一個NFS目錄,就會出現訪問權限問題. |
配置例三 |
/home/clsn10.0.0.0/24(ro) 說明:只讀共享 用途:例如在生產環境中,開發人員有查看生產眼務器日誌的需求,但又不希罜 給開發生產服務器的權限,那麼就能夠給開發提供從某個測試服務器NFS客戶端 上查看某個生產服務器的日誌目錄(NFS共享)的權限,固然這不是惟一的方法, 例如能夠把程序記錄的日誌發送到測試服務器供開發查看或者經過收集日誌等其 它方式展示 |
客戶端(不管用什麼用戶訪問)---門---服務端(nfsnobody) rpc.idmapd
[root@nfs01 ~]# chkconfig rpcbind on [root@nfs01 ~]# chkconfig nfs on [root@nfs01 ~]# chkconfig |egrep "rpcbinf|nfs" nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off
EXAMPLE # sample /etc/exports file / master(rw) trusty(rw,no_root_squash) /projects proj*.local.domain(rw) /usr *.local.domain(ro) @trusted(rw) /home/joe pc001(rw,all_squash,anonuid=150,anongid=100) /pub *(ro,insecure,all_squash) /srv/www -sync,rw server @trusted @external(ro) /foo 2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw) /build buildhost[0-9].local.domain(rw)
NFS共享目錄 NFS客戶端地址1(參數1,參數2,...) 客戶端地址2(參數1,參數2,...)
或
NFS共享目錄 NFS客戶端地址1(參數1,參數2,...)
NFS共享目錄 NFS客戶端地址2(參數1,參數2,...)
注意:nfs服務默認沒有認證機制,安全性不如分佈式文件系統
只能經過控制配置文件中網絡地址信息,實現安全性
參數 |
說明 |
rw |
可讀寫的權限 |
ro |
只讀的權限 |
no_root_squash |
登入NFS主機,使用該共享目錄時至關於該目錄的擁有者,若是是root的話,那麼對於這個共享的目錄來講,他就具備root的權限,這個參數『極不安全』,不建議使用 |
root_squash |
登入NFS主機,使用該共享目錄時至關於該目錄的擁有者。可是若是是以root身份使用這個共享目錄的時候,那麼這個使用者(root)的權限將被壓縮成爲匿名使用者,即一般他的UID與GID都會變成nobody那個身份 |
all_squash |
不論登入NFS的使用者身份爲什麼,他的身份都會被壓縮成爲匿名使用者,一般也就是nobody |
anonuid |
能夠自行設定這個UID的值,這個UID必須要存在於你的/etc/passwd當中 |
anongid |
同anonuid,可是變成groupID就是了 |
sync |
資料同步寫入到內存與硬盤當中 |
async |
資料會先暫存於內存當中,而非直接寫入硬盤 |
insecure |
容許從這臺機器過來的非受權訪問 |
服務端修改配置
[root@nfs01 ~]# vim /etc/exports #share 20171013 hzs /data 172.16.1.0/24(rw,sync,all_squash) [root@nfs01 ~]# /etc/init.d/nfs reload
配置修改須要平滑重啓nfs 服務
reload 平滑重啓
用戶的訪問體驗更好
nfs客戶端進行測試
[root@backup mnt]# touch test.txt [root@backup mnt]# ll -rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt [root@backup ~]# su - clsn [clsn@backup ~]$ cd /mnt/ [clsn@backup mnt]$ touch clsn1.txt [clsn@backup mnt]$ ll -rw-rw-r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 clsn1.txt -rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt
說明:
不論登入NFS的使用者身份爲什麼,他的身份都會被壓縮成爲匿名使用者,一般也就是nobody
服務端修改配置
[root@nfs01 ~]# vim /etc/exports #share 20171013 hzs /data 172.16.1.0/24(rw,sync,no_all_squash,root_squash) [root@nfs01 ~]# /etc/init.d/nfs reload
客戶端卸載從新掛載(服務器配置修改後客戶端要從新掛載)
[root@backup ~]# umount /mnt/ [root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt
nfs客戶端測試結果:
[root@backup mnt]# touch test1.txt [root@backup mnt]# ll -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:37 test1.txt [root@backup mnt]# su - clsn [clsn@backup ~]$ cd /mnt/ [clsn@backup mnt]$ touch clsn1.txt touch: cannot touch `clsn1.txt': Permission denied [clsn@backup mnt]$ touch clsn2.txt touch: cannot touch `clsn2.txt': Permission denied # 服務端驗證: [root@nfs01 ~]# ll /data/ -rw-rw-r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 clsn1.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:37 test1.txt -rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt
說明:
no_all_squash,是全部用戶都不進行壓縮,因此clsn用戶對nfs的目錄沒有寫入的權限(與nfs服務器的共享目錄權限有關)。root用戶進行壓縮因此能夠寫入。
服務端修改配置
[root@nfs01 ~]# vim /etc/exports #share 20171013 hzs /data 172.16.1.0/24(rw,sync,no_root_squash) [root@nfs01 ~]# /etc/init.d/nfs reload
客戶端卸載從新掛載(服務器配置修改後客戶端要從新掛載)
[root@backup ~]# umount /mnt/ [root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt
nfs客戶端測試結果:
[root@backup mnt]# touch root.txt [root@backup mnt]# ll total 16 -rw-rw-r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 clsn1.txt -rw-r--r-- 1 root root 0 Oct 13 12:45 root.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:37 test1.txt -rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt
刪除測試
[root@backup mnt]# rm -rf ./* [root@backup mnt]# ll total 0
說明:
因爲對root用戶沒有進行壓縮,因此到達nfs服務器後依舊是root身份,root用戶默認對全部的文件都有權限,因此能夠寫入。(很危險)