NFS服務器
一、NFS是個啥,工作機制
它的主要功能是通過網絡讓不同的機器系統之間可以彼此共享文件和目錄。NFS服務器可以允許NFS客戶端將遠端NFS服務器端的共享目錄掛載到本地的NFS客戶端中。在本地的NFS客戶端的機器看來,NFS服務器端共享的目錄就好像自己的磁盤分區和目錄一樣。一般客戶端掛載到本地目錄的名字可以隨便,但為方便管理,我們要和服務器端一樣比較好。
NFS一般用來存儲共享視頻,圖片等靜態數據。
NFS是通過網絡來進行服務端和客戶端之間的數據傳輸。兩者之間要傳輸數據就要有想對應的網絡端口來進行傳輸。NFS服務器到底使用什麽網絡端口來傳輸數據的,NFS服務器端其實是隨機選擇端口來進行數據傳輸。那NFS客戶端又是如何知道NFS服務器端到底使用的是哪個端口呢?其實NFS服務器時通過遠程過程調用(remote procedure call 簡稱RPC)協議
RPC管理服務端的NFS端口分配,客戶端要傳數據,那客戶端的RPC會先跟服務端的RPC去要服務器的端口,要到端口後再建立連接,然後傳輸數據。
提示:在啟動NFS SERVER之前,首先要啟動RPC服務,否則NFS SERVER就無法向RPC服務區註冊,另外,如果RPC服務重新啟動,原來已經註冊好的NFS端口數據就會全部丟失。因此此時RPC服務管理的NFS程序也要重新啟動以重新向RPC註冊。特別註意:一般修改NFS配置文檔後,是不需要重啟NFS的,直接在命令執行/etc/init.d/nfs reload或exportfs –rv即可使修改的/etc/exports生效。
《客戶端NFS和服務端NFS通訊過程》
1)首先服務器端啟動RPC服務,並開啟111端口
2)啟動NFS服務,並向RPC註冊端口信息
3)客戶端啟動RPC,向服務端的RPC服務請求服務端的NFS端口
4)服務端的RPC服務反饋NFS端口信息給客戶端。
5)客戶端通過獲取的NFS端口來建立和服務端的NFS連接並進行數據的傳輸。
二、NFS部署
1、查看系統版本等參數,服務器版本
[[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [[email protected]
2、兩個安裝NFS服務軟件包的方法
1)[[email protected] ~]# yum groupinstall "NFS file server" -y 2)yum install -y nfs-utils rpcbind
3、啟動NFS服務(server端)
1)先啟用rpc服務 [[email protected] ~]# /etc/init.d/rpcbind start Starting rpcbind: [ OK ] 2)查看服務端的開啟的中間服務 [[email protected] ~]# rpcinfo -p 127.0.0.1 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 3)啟動NFS服務,如果直接啟動NFS服務會失敗。 [[email protected] ~]# /etc/init.d/nfs start Starting NFS services: [ OK ] Starting NFS mountd: rpc.mountd: svc_tli_create: could not open connection for udp6 rpc.mountd: svc_tli_create: could not open connection for tcp6 rpc.mountd: svc_tli_create: could not open connection for udp6 rpc.mountd: svc_tli_create: could not open connection for tcp6 rpc.mountd: svc_tli_create: could not open connection for udp6 rpc.mountd: svc_tli_create: could not open connection for tcp6 [ OK ] Starting NFS daemon: rpc.nfsd: address family inet6 not supported by protocol TCP [ OK ] Starting RPC idmapd: [ OK ] 4)當開啟NFS服務的時候再查看服務端的開啟的中間服務,會發現多了很多服務和端口 [[email protected] ~]# rpcinfo -p 127.0.0.1 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 100005 1 udp 46787 mountd 100005 1 tcp 48141 mountd 100005 2 udp 51029 mountd 100005 2 tcp 34046 mountd 100005 3 udp 54267 mountd 100005 3 tcp 33692 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 49372 nlockmgr 100021 3 udp 49372 nlockmgr 100021 4 udp 49372 nlockmgr 100021 1 tcp 33433 nlockmgr 100021 3 tcp 33433 nlockmgr 100021 4 tcp 33433 nlockmgr [[email protected] ~]# 5)設置開機啟動 [[email protected] ~]# chkconfig rpcbind on [[email protected] ~]# chkconfig nfs on
4、client端只需要啟動RPC服務
[[email protected] ~]# /etc/init.d/rpcbind start [[email protected] ~]# /etc/init.d/rpcbind status rpcbind (pid 18859) is running... [[email protected] ~]# chkconfig rpcbind on
5、NFS的配置文件,在server上
1)[[email protected] ~]# cat /etc/exports ##test for rpc and nfs /data 192.168.222.0/24(rw,sync) 如果這邊是ro,就是read only 依次是,共享/data目錄,僅僅192.168.222.0/24此網段的主機可以訪問,,具有讀寫權限,將buffer中數據庫同步到硬盤上也就是不在內存之中 2)平滑重啟 /etc/init.d/nfs reload 如果此時正在使用,那就繼續使用,如果沒有使用的就不可以使用了 3)查看是否可以共享(服務端檢查) showmount -e localhost (NFS服務器) [[email protected] ~]# showmount -e 127.0.0.1 Export list for 127.0.0.1: /data 10.0.0.0/24 (客戶端) showmount -e 服務端的ip地址(服務端檢查) [[email protected] ~]# showmount -e 192.168.222.140 Export list for 192.168.222.140: /data 192.168.222.0/24
6、在客戶端掛在共享的目錄,/data是共享目錄,/mnt是掛在在本地的目錄,這個是臨時掛在,重啟之後就沒了,然後要在/etc/fstab下面掛載或者在rc.local裏面開機啟動執行
[[email protected] ~]# mount -t nfs 192.168.222.140:/data /mnt [[email protected] ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_weiwei-lv_root 18G 5.1G 12G 31% / tmpfs 932M 80K 932M 1% /dev/shm /dev/sda1 477M 43M 410M 10% /boot /dev/sr0 1.9G 1.9G 0 100% /media/CentOS-6.7-x86_64-LiveDVD 192.168.222.140:/data 17G 2.4G 14G 16% /mnt [[email protected] ~]# [[email protected] ~]# cd /mnt [[email protected] mnt]# ls a.txt [[email protected] mnt]# cat a.txt niamadafjoiewfwe [[email protected] mnt]# ###掛載,兩種方式 /etc/fstab 192.168.222.140:/data /mnt ext4 defaults 0 0 /etc/rc.local mount -t nfs 192.168.222.140:/data /mnt
7、此時讀是同步了,但是如果我想寫卻出現了問題
[[email protected] mnt]# touch b.txt touch: cannot touch `b.txt‘: Permission denied [[email protected] mnt]# 此時就要去服務器上去看看共享目錄的其他用戶的權限,此時的用戶是nfsnobody [[email protected] /]# ls -l data total 4 -rw-r--r--. 1 root root 17 Aug 14 07:00 a.txt [[email protected] /]# chmod -R 777 data 此時就可以了 查看其他用戶 [[email protected] ~]# cat /var/lib/nfs/etab /data 192.168.222.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash) nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
可以參考:http://atong.blog.51cto.com/2393905/1343950
NFS服務器