1. 程式人生 > >NFS服務器

NFS服務器

lis lock chm 之前 root could 軟件 uname 平滑

一、NFS是個啥,工作機制

它的主要功能是通過網絡讓不同的機器系統之間可以彼此共享文件和目錄。NFS服務器可以允許NFS客戶端將遠端NFS服務器端的共享目錄掛載到本地的NFS客戶端中。在本地的NFS客戶端的機器看來,NFS服務器端共享的目錄就好像自己的磁盤分區和目錄一樣。一般客戶端掛載到本地目錄的名字可以隨便,但為方便管理,我們要和服務器端一樣比較好。

NFS一般用來存儲共享視頻,圖片等靜態數據。

NFS是通過網絡來進行服務端和客戶端之間的數據傳輸。兩者之間要傳輸數據就要有想對應的網絡端口來進行傳輸。NFS服務器到底使用什麽網絡端口來傳輸數據的,NFS服務器端其實是隨機選擇端口來進行數據傳輸。那NFS客戶端又是如何知道NFS服務器端到底使用的是哪個端口呢?其實NFS服務器時通過遠程過程調用(remote procedure call 簡稱RPC)協議

/服務來實現的。也就是說RPC服務會統一管理NFS的端口,客戶端和服務端通過RPC來先溝通NFS使用了哪些端口,之後再利用這些端口(小於1024)來進行數據的傳輸。

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]
/* */ ~]# uname -r 3.10.0-327.el7.x86_64 [[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服務器