Linux運維第三階段(九)NFS
nfs
為方便文件有序管理,把磁盤disk空間在內核映射為一種軟件結構,通過文件系統FS管理工具(mke2fs)將磁盤格式為某分區格式(ext4),則disk被分為元數據區和數據區
對硬件操作只有內核,函數調用(或過程調用,內核輸出的函數read(),write())
一般講,本地應用程序application實現某個操作,都是本地調用(本地的兩個程序間或程序與內核間調用函數完成某種功能的過程)
centos手動分區,作為程序員開發某種能與其它模塊或其它組件交互的程序,只要其它組件提供了函數,就可與之交互,如shell中的函數就是本地過程調用(LPC,local procedure call)
程序員寫的程序需要在兩個主機間進行交互,完成程序協作,必須要完成在網絡上是如何通信的機制,以web服務為例:客戶端client本地程序所請求的內容在另一主機,瀏覽器browser初始化一個請求,自己定義向內核完成系統請求,由內核封裝請求報文轉給服務器端server-side,server-side通過內核中tcp/ip協議棧解碼將請求轉給httpd(http報文)
C/S,B/S,任何一個要通過網絡完成client和server協調的應用程序,client要能處理網絡請求的機制,server必須能提供解決網絡請求的機制(browser:http://IP:port/RESOURCES)
FS本身只是一個內核模塊,不具備網絡功能,之所以mkdir/touch能完成在遠端主機上操作,借助于其它網絡功能(RPC,remote procedure call)將兩個主機間建立起關聯關系,而client和server并不能意識到它是工作在網絡上的,整個過程隱藏于RPC背后的機制
client執行mkdir交至內核,內核發現要處理的設備并不是本地設備,于是將請求轉給本地RPC-client(stub存根調用),而RPC-client請求RPC-server,RPC-server在它的本地將請求(RPC
-client和RPC-server在中間協調工作)轉至相應程序,程序處理完又返回給RCP-server,若操作對象是FS,FS本身也需要某個程序監聽在某個套接字socket上
centos怎么分區?程序員在開發client和server應用程序時不用考慮網絡協議報文的封裝,RPC在底層已完成此功能
RPC只是個框架,是種編程技術(可理解為協議),為多個不想開發網絡功能的程序提供服務,簡化分布式應用程序的開發,僅負責幫助封裝網絡報文,linux提供RPC服務的程序是portmap(111/tcp,111/udp)
注:http服務的程序(httpd,nginx,lighttpd),ftp服務的程序(vsftpd)
兩種工作方式:
1、client(mkdir)-->RPC-client(stub)-->RPC-server-->portmap
2、client(mkdir)-->RPC-client(stub)-->RPC-server-->portmap
centos7手動分區方案、stub-->portmap(portmap會在RPC-server上注冊它的端口,RPC-server接受請求并初始化請求,初始化完成后stub直接與相應應用程序聯系完成數據傳輸,RPC僅完成初始化)
browser-->server(html格式)
NFS-client-->NFS-server
RPC:二進制格式;文本格式(XMLRPC,RPC基于http的實現,用http傳輸XML格式的報文,建立RPC數據交換通道,實現復雜)-->SOAP(simpleobject access protocol,輕量級的XMLRPC)
在本地主機兩個進程間通信或進程與內核間通信,通過進程間通信機制(IPC機制或系統調用(函數調用,本地函數調用));在同一OS內部兩個進程間數據交換,交換格式經內核協調后基于進程間通信就可完成數據交換(共享內存的進程間通信);兩個進程工作在不同主機上,內核借助于另一應用程序(RPC-client-->RPC-server)交至另一主機的進程對象,處理完返回(RPC-server-->RPC-client)
NFS(network file system,SUN開發,既是文件系統也是協議;NFSv1僅在SUN內部用,目前最新NFSv4(redhat6),NFSv3(redhat5);驗證機制簡單,僅IP驗證)
centos手動分區方案?NFS在用戶認證上的功能是薄弱的,NFS服務器僅根據IP來驗證,client向nfs-sever說他是誰那他就是誰,NFS僅用在linux間內網共享文件上,不建議在互聯網上使用
client-side的jerry(UID:510)在server-side上創建一文件,若server-side上并沒有jerry這個用戶,則文件的屬主顯示為jerry的UID號510;若server-side有jerry這個用戶且UID與client-side的UID相同,則文件屬主為jerry;若server-side端tom的UID與client-side jerry的UID相同,則文件屬主顯示為tom
#rpm?-ql? nfs-utils(有這個包就可配置為nfs-server)
/usr/sbin/{rpc.mountd,rpc.nfsd}(核心程序,rpc.mountd實現server-side認證,認證通過,client拿著mountd給它的令牌找nftd建立通信)
/etc/rc.d/init.d/{nfs,nfslock,rpc*}(每個主機所持有的鎖是在自己的內存中,是該主機內核所持有的鎖;若由多個主機訪問nfs-server,則由nfs服務提供鎖,分布式文件鎖)
#service?portmap? status(確定portmap是運行的)
centos分區方案?#service?nfs? start(nfs啟動會向portmap注冊使用一堆端口,quotad,daemon,mountd)
#netstat?-tunlp(111/tcp,111udp)
#rpcinfo?-p? localhost(本機RPC程序監聽的端口;其中nfsd注冊使用的端口號固定不變2049/tcp,2049/udp;mountd和quotad注冊的端口號每重啟服務都變,向RPC服務注冊,由portmap選取)
nfs三個進程:nfsd(主服務)、mountd(接受client掛載請求)、quotad(磁盤配額限定)
注:最好給mountd和quotad選取固定端口,否則若portmap隨機選取了80或3306,其它服務將不能啟動
#vim?/etc/sysconfig/nfs
centos磁盤分區?LOCKD_TCPPORT=
LOCKD_UDPPORT=
MOUNTD_PORT=
RQUOTAD_PORT=
#man?exports
#vim?/etc/exports
每一行包含一個共享出去的FS及哪些client能訪問該FS,例如:
/PATH/TO/SOME_DIR? CLIENT_LIST(指定目錄或分區??? 多個客戶端可用空格分開)
每個客戶端后必須跟一個小括號,里面定義了此客戶的訪問特性及訪問權限,例如:
/var/shared?? 172.16.0.0/16(ro,async)? 192.168.0.0/24(rw,sync)
FS導出屬性 :ro,rw,sync,async,root_squash,all_squash,anonuid,anongid
async(一般使用異步)
root_squash(映射root為匿名賬號,默認此項啟用,root在NFS中自動轉為anonymous,否則任何client端的root在服務器端導出的目錄下都有管理員權限)
all_squash(所有賬號都映射為匿名賬號,最安全)
anonuid=#,anongid=#(These? options?explicitly? set the uid and gid ofthe anonymous account.)
舉例:掛載的所有用戶都映射為指定設置
/var/shared??172.16.0.0/16(rw,all_squash,anonuid=510,anongid=510)
#showmount?-a ?NFS_SERVER(顯示服務器上所有導出的FS及客戶端的掛載記錄)
#showmount?-d? NFS_SERVER(服務器上導出的FS中被client掛載的記錄)
#showmount?-e? NFS_SERVER(查看指定服務器導出的各FS)
#mount?-t? nfs? NFS_SERVER:/PATH/TO/SOME_EXPORT? /PATH/TO/SOME_HERE(客戶端執行掛載)
#exportfs?-arv(此句表示重新輸出所有導出的目錄,此操作用于/etc/exports文件更改后不用重啟服務即可生效(防止已連接的client因重啟服務導致斷開);-a要與-r或-u同時使用,-a表示輸出或取消輸出所有導出的目錄,-r表示reexport重新輸出所有導出的目錄,-u表示unexport取消輸出導出的目錄,-v顯示詳細信息verbose)
#exportfs?-auv(此句表示取消導出所有目錄)
#vim?/etc/fstab
172.16.100.1:/var/shared?? /mnt/nfs ? ?nfs?? defaults,_rnetdev?? 0?? 0
注:_rnetdev表示開機自動掛載時,若能掛載上則掛載,否則跳過
==================================================================
nfs服務端可通過編輯/etc/exports導出共享的目錄,也可通過命令exportfs,如
[root@test-master ~]# man exportfs
NAME
exportfs - maintain table of exported NFS file systems
SYNOPSIS
/usr/sbin/exportfs [-avi] [-o options,..] [client:/path ..]
/usr/sbin/exportfs -r [-v]
/usr/sbin/exportfs [-av] -u [client:/path ..]
/usr/sbin/exportfs [-v]
/usr/sbin/exportfs -f
方法一:
[root@test-master ~]# exportfs -o rw,sync,all_squash,anonuid=65534,anongid=65534,mp,fsid=210.96.20.0/24:/drbd
方法二:
[root@test-master ~]# vim /etc/exports
/drbd??10.96.20.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534,mp,fsid=2)
[root@test-master ~]# exportfs -arv
exporting 10.96.20.0/24:/drbd
無論使用哪種方式都會將設置的內容保存到/var/lib/nfs/etab中,該文件被nfs client的rpc.mountd進程使用(rhel5中client掛載使用后的狀態在nfs server-side是保存在/var/lib/nfs/rmtab這個文件中,而到rhel6中此文件不再保存client狀態)
[root@test-master ~]# cat /var/lib/nfs/etab
/drbd 10.96.20.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,fsid=2,mountpoint,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,all_squash)
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态