1. 程式人生 > >NFS服務配置

NFS服務配置

情況 多臺 程序 con 開放 portmap 同步 rsize 包括

NFS:Network file system,網絡文件系統.由sun公司1984年推出,用來在網絡中的多臺計算機間實現資源共享(包括象文件或cd-rom).設計的目的是:實現在不同系統間交互使用,所以它的通信協議采用與主機和操作系統無關的技術
NFS Server可以看作是File Server,它可以讓你的PC通過網絡將遠端得NFS SERVER共享出來的檔案MOUNT到自己的系統中,在CLIENT看來使用NFS的遠端文件就象是在使用本地文件一樣.

一 服務端配置文檔
$ cat /etc/exports

/data/storage/bbs 10.10.100.0/24(rw,sync)

格式如下
#[共享目錄] 主機/網絡 []()多個

1 共享目錄屬性
ll /data/storage/bbs/ | awk ‘/^d/ {print $1,$2,$3,$4}‘

drwxr-xr-x 6 www www
drwxr-xr-x 13 www www
drwxr-xr-x 2 www www
drwx------ 4 www www
drwxr-xr-x 10 www www
drwxr-xr-x 11 www www
drwxr-xr-x 313 www www
drwxr-xr-x 241 www www
drwxr-xr-x 276 www www
drwxr-xr-x 9 www www
drwxr-xr-x 121 www www
註意:文件夾屬主屬組與權限,與客戶端相同

2 授權的主機或網絡

可以使用完整的IP 或者是網絡,例如10.10.100.10 或10.10.100.0/24 ,也可以使用主機名稱,
但這個主機名稱必須要在/etc/hosts 內,或者使用DNS 找到該名稱
3 權限詳解
參數值 內容說明

ro | rw
該目錄分享的權限是可讀寫(read-write) 或只讀(read-only),但最終能不能讀寫,還是與檔案系統的rwx 及身份有關。
sync | async sync
代表資料會同步寫入到內存與磁盤中,async 則代表資料會先暫存於內存當中,而非直接寫入磁盤!
no_root_squash | root_squash | all_squash
用戶端使用NFS系統的帳號若為root 時,系統該如何判斷這個帳號的身份?預設的情況下,

用戶端root 的身份會由root_squash 的設定壓縮成nfsnobody, 如此對伺服器的系統會較有保障。
但如果你想要開放用戶端使用root 身份來操作伺服器的檔案系統,那麽這裏就得要開no_root_squash 才行,
all_squash 不論登入NFS 的使用者身份為何,他的身份都會被壓縮成為匿名使用者,通常也就是nobody(nfsnobody)
anonuid | anongid
anon 意指anonymous (匿名者) 前面關於*_squash 提到的匿名使用者的UID 設定值,通常為nobody(nfsnobody),
但是你可以自行設定這個UID 的值!當然,這個UID 必需要存在於你的/etc/passwd 當中! anonuid 指的是UID 而anongid 則是群組的GID。
註意:若是多個權限,則以逗號 "," 分開

4 啟動nfs

$ /etc/init.d/nfs start
$ /etc/init.d/nfslock start
5 驗證 nfs 服務器
$ netstat -antulp | grep -E ‘2049|rpc‘

tcp 0 0 0.0.0.0:896 0.0.0.0: LISTEN 15980/rpc.rquotad
tcp 0 0 0.0.0.0:2049 0.0.0.0:
LISTEN -
tcp 0 0 0.0.0.0:910 0.0.0.0: LISTEN 15995/rpc.mountd
tcp 0 0 0.0.0.0:628 0.0.0.0:
LISTEN 16134/rpc.statd
tcp 0 0 10.0.100.71:2049 10.0.100.82:680 ESTABLISHED -
tcp 0 0 192.168.57.71:2049 192.168.57.92:982 ESTABLISHED -
udp 0 0 0.0.0.0:2049 0.0.0.0: -
udp 0 0 0.0.0.0:907 0.0.0.0:
15995/rpc.mountd
udp 0 0 0.0.0.0:622 0.0.0.0: 16134/rpc.statd
udp 0 0 0.0.0.0:625 0.0.0.0:
16134/rpc.statd
udp 0 0 0.0.0.0:893 0.0.0.0:* 15980/rpc.rquotad
註意:2049為nfs監聽端口

二 客戶端

0 啟動rpcbind/portmap 服務

/etc/init.d/rpcbind #rhel6.x
/etc/init.d/portmap #rhe5.x

1 掛載nfs服務器

mount -t nfs -o nosuid,noexec,nodev,rw -o bg,soft,rsize=32768,wsize=32768 10.10.100.77:/data/storage/bbs/ /storage/

2 客戶端掛載參數
參數 意義

suid | nosuid
如果掛載的partition 上面有任何SUID 的binary 程式時, 你只要使用nosuid 就能夠取消SUID 的功能
rw | ro
你可以指定該檔案系統是只讀(ro) 或可讀寫!伺服器可以提供給你可讀寫,用戶端可以僅允許只讀的參數設定值
dev | nodev
是否??保留裝置檔案的特殊功能
exec | noexec
是否具有執行binary file 的權限
user | nouser
是否允許使用者進行檔案的掛載與卸載功能
fg |bg
當執行掛載時,該掛載的行為會在前臺(fg) 還是在後臺(bg) 執行;若在前臺執行時,則mount 會持續嘗試掛載,直到成功或time out 為止,若為後臺執行, 則mount 會在背持續多次進行mount ,而不會影響到前景的程序操作。
soft | hard
如果是hard 的情況,則當兩者之間有任何一部主機離線,則RPC 會持續的呼叫,直到對方恢復連線為止。如果是soft 的話,那RPC 會在time out 後重復呼叫,而非持續呼叫, 因此系統的延遲會比較不這麽明顯。
intr
當你使用上頭提到的hard 方式掛載時,若加上intr 這個參數, 則當RPC 持續呼叫中,該次的呼叫是可以被中斷的(interrupted)。
rsize | wsize
讀出(rsize)與寫入(wsize)的區塊大小(block size)。這個設定值可以影響用戶端與NFS服器端傳輸資料的緩沖記憶容量。
3 client端 系統中的www用戶

www:x:5000:5000::/home/www:/sbin/nologin
4 apache 用戶與組

<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
User www
Group www
</IfModule>
</IfModule>
5 clinet端 掛載點屬性
ll /storage/ | awk ‘/^d/ {print $1,$2,$3,$4}‘

drwxr-xr-x 6 www www
drwxr-xr-x 13 www www
drwxr-xr-x 2 www www
drwx------ 4 www www
drwxr-xr-x 10 www www
drwxr-xr-x 11 www www
drwxr-xr-x 313 www www
drwxr-xr-x 241 www www
drwxr-xr-x 276 www www
drwxr-xr-x 9 www www
drwxr-xr-x 121 www www
註意:文件夾屬主屬組與權限,與服務端相同

三 維護 NFS
1 nfs 使用的協議與端口

grep -E ‘^nfs.*nfsd$‘ /etc/services
nfs 2049/tcp nfsd
nfs 2049/udp nfsd
2 RPC 使用的端口

grep -E ‘portmap‘ /etc/services
sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP
sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP
註意:
RPC 是固定使用port 111 來監聽端口
RPC 服務的功能就是在指定NFS 服務所對應的port number ,並且反回給用戶端,讓用戶端可以連結到正確的端口上去。
RPC 是如何知道每個NFS 的端口?這是因為當伺服器在啟動NFS 時會隨機取用數個端口,並主動的向RPC 註冊,因此RPC 可以知道每個端口對應的NFS。

3 命令

服務端重新掛載nfs
exportfs -arv
服務端卸載全部nfs
exportfs -auv
服務端|客戶端 顯示nfs共享目錄
showmount -e [ip]

擴展
NFS 的長連接

顯示NFS 共享目錄
$ showmount -e
Export list for one.test.com:
/data/iso 10.0.100.0/24,192.168.57.0/24
/data/htdocs/8080 10.0.100.0/24,192.168.6.0/24

査看與NFS綁定的連接
$ netstat -antulp | grep 2049
tcp 0 0 0.0.0.0:2049 0.0.0.0: LISTEN -
tcp 0 0 192.168.57.71:2049 192.168.57.92:984 ESTABLISHED -
udp 0 0 0.0.0.0:2049 0.0.0.0:
-

當客戶端掛載NFS 後,客戶端就與服務端保持連接狀態"ESTABLISHED",如果幾百個NFS客戶端,
嘿嘿 不過如果在掛載時使用bg參數使用後臺,則會在沒有數據時釋放連接。

#update 20120716 結合nfs client 與 web 服務器

//統一權限以www用戶與組為準

1 nfs server 共享目錄的權限 www

grep -i ‘www‘ /etc/passwd
www:x:501:501::/home/www:/sbin/nologin

ll /data/ | grep www
drwxr-xr-x 3 www www 4096 Jul 16 11:05 www

grep -i ‘www‘ /etc/exports
/data/www/bbs/ 10.0.100.0/24(rw,sync)

2 nfs client 端擁有相同的uid/gid (用戶與組)
grep -i ‘www‘ /etc/passwd
www:x:501:501::/home/www:/sbin/nologin

3 nfs client 端 web 服務器使用www用戶與組
//以nginx 為例
user www www;
#

chkconfig --list | grep -E ‘nfs|port|rpc.*3:on‘
nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
nfslock 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off

NFS服務配置