NFS Network File System
用途:作為服務(wù)端向其他服務(wù)器提供共享目錄.
客戶(hù)端可以通過(guò)網(wǎng)絡(luò),將共享目錄掛載到本地文件系統(tǒng)上.
掛載方法 mount -t nfs 192.168.1.110:/data/share /mnt
掛載后查看本地基本掛載信息 df -h
這種網(wǎng)絡(luò)文件系統(tǒng)常用于中小企業(yè)(3000WPV),而大型企業(yè)可能會(huì)用到Moosefs(mfs),glusterfs,FastDFS.
而這些文件系統(tǒng)的主要功能為:存儲(chǔ)靜態(tài)資源文件,如圖片,附件,頭像
NFS服務(wù)有很多子服務(wù),有固定端口的2049 nfs,也有很多非固定端口的服務(wù),這些注冊(cè)信息被rpcbind
服務(wù)管理.所以,在運(yùn)行NFS服務(wù)之前,應(yīng)先開(kāi)啟rpcbind
服務(wù)供其注冊(cè),rpcbind
主服務(wù)端口為111!
為什么企業(yè)集群架構(gòu)需要共享存儲(chǔ)?
在Web服務(wù)器集群中,如果沒(méi)有共享存儲(chǔ),某一臺(tái)Web服務(wù)器上并沒(méi)有存儲(chǔ)其他Web服務(wù)器上的靜態(tài)資源時(shí),
會(huì)出現(xiàn)資源訪問(wèn)不到的情況,例如,用戶(hù)上傳到Web1一張圖片,而下次請(qǐng)求Web2訪問(wèn)圖片時(shí),Web2上并沒(méi)
有剛剛上傳的資源,所以訪問(wèn)不到資源.
解決方案:
1.Web服務(wù)器之間時(shí)時(shí)同步(浪費(fèi)帶寬,空間,資源)
2.共享存儲(chǔ)(最優(yōu)選擇)
NFS/rpcbind原理圖
安裝
規(guī)劃:
角色 | 名稱(chēng) | IP |
---|---|---|
服務(wù)端 | NFS_Server | * . * . * .1 |
客戶(hù)端 | LAMP_Server | * . * . * .2 |
客戶(hù)端 | LNMP_Server | * . * . * .3 |
批量查看環(huán)境:
cat /etc/redhat-release
//系統(tǒng)版本
uname -r
//內(nèi)核版本
uname -m
//操作系統(tǒng)位數(shù)
軟件列表:
nfs-utils:
NFS主程序
rpcbind
:RPC主程序
安裝方法:
yum install -y nfs-utils rpcbind
主客戶(hù)端均要安裝,按理來(lái)說(shuō)客戶(hù)端無(wú)需裝nfs-utils,但是客戶(hù)端會(huì)用到showmount命令.
啟動(dòng):
/etc/init.d/rpcbind start
//啟動(dòng)rpcbind
/etc/init.d/rpcbind status
//查看rpcbind狀態(tài)
lsof -i :111
//查看端口
netstat -lntup|grep rpcbind
//查看端口
rpcinfo -p localhost
//查看rpc注冊(cè)端口信息
/etc/init.d/nfs start
//啟動(dòng)nfs并向rpc注冊(cè)
/etc/init.d/rpcbind status
//查看rpcbind狀態(tài)
netstat -lnupt | grep 2049
//查看nfs端口信息
將/etc/init.d/rpcbind start
和/etc/init.d/nfs start
寫(xiě)入/etc/rc.loacl
做一個(gè)自啟動(dòng)
NFS服務(wù)進(jìn)程說(shuō)明
ps -ef | egrep "rpc|nfs"
rpc 6668 1 0 19:58 ? 00:00:00 rpcbind
root 6742 2 0 20:00 ? 00:00:00 [rpciod/0]
root 6751 1 0 20:00 ? 00:00:00 rpc.rquotad //磁盤(pán)配額進(jìn)程
root 6756 1 0 20:00 ? 00:00:00 rpc.mountd //權(quán)限管理驗(yàn)證
root 6763 2 0 20:00 ? 00:00:00 [nfsd4]
root 6764 2 0 20:00 ? 00:00:00 [nfsd4_callbacks]
root 6765 2 0 20:00 ? 00:00:00 [nfsd]
root 6766 2 0 20:00 ? 00:00:00 [nfsd]
root 6767 2 0 20:00 ? 00:00:00 [nfsd]
root 6768 2 0 20:00 ? 00:00:00 [nfsd]
root 6769 2 0 20:00 ? 00:00:00 [nfsd] //nfs主進(jìn)程,id身份判定
root 6770 2 0 20:00 ? 00:00:00 [nfsd]
root 6771 2 0 20:00 ? 00:00:00 [nfsd]
root 6772 2 0 20:00 ? 00:00:00 [nfsd]
root 6803 1 0 20:00 ? 00:00:00 rpc.idmapd
NFS配置文件
/etc/exports
格式:
共享目錄 + 主機(jī)名/地址/通配符 + (參數(shù))
# 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)
共享參數(shù)
rw 可讀寫(xiě)
ro 只讀
sync 同步寫(xiě)入磁盤(pán)(性能不好,但不丟數(shù)據(jù))
async 異步寫(xiě)入(性能好,斷電會(huì)丟數(shù)據(jù))
no_root_squash 客戶(hù)端為root,不會(huì)壓縮root為nfsnobody,權(quán)限太大,慎用
root_squash 客戶(hù)端為root時(shí)會(huì)壓縮root為nfsnobody
all_squash 客戶(hù)端為任何用戶(hù)都會(huì)壓縮為nfsnodoy用戶(hù)
anonuid=UID 壓縮為UID的用戶(hù)
anongid=GID 壓縮為GID的用戶(hù)
exportfs -rv
/etc/init.d/nfs reload
//兩個(gè)平緩加載重啟NFS的命令
showmount -e IPADDRESS
//查看某主機(jī)的共享目錄
mount -t nfs localhost:/data
//掛載共享目錄
mount
cat /proc/mounts
//查看掛載信息
cat /var/lib/nfs/etab
//顯示nfs共享參數(shù)
df -h
//查看掛載資源
默認(rèn)情況下,客戶(hù)端訪問(wèn)NFS文件系統(tǒng)時(shí),用戶(hù)被壓縮成默認(rèn)uid65534 nfsnobody的用戶(hù).
所以,需要將共享目錄的屬主數(shù)組改為nfsnobody.
常見(jiàn)故障排查
1.確認(rèn)服務(wù)是否啟動(dòng)
2.本地showmount一下,有可能防火墻擋住了
3.ping鏈路
4.服務(wù)啟動(dòng)順序 rpcbind-->nfs
5.共享目錄是否創(chuàng)建
6.如果文件無(wú)法創(chuàng)建,查看下nfs共享權(quán)限以及服務(wù)端本地權(quán)限.
7.注意.服務(wù)端掛掉,客戶(hù)端掛載會(huì)hang住.
客戶(hù)端掛載參數(shù)
fg/bg(默認(rèn)fg) 掛載時(shí)選擇前臺(tái)/后臺(tái)(掛載請(qǐng)求會(huì)一直持續(xù),后臺(tái)不會(huì)影響前臺(tái)操作)
soft/hard(默認(rèn)hard) soft掛載不上不再?lài)L試掛載,hard會(huì)持續(xù)嘗試掛載
intr hard方式在配合intr時(shí),超時(shí)可以將掛載程序中斷
rsize/wsize 讀寫(xiě)塊大小,用于提升性能!
proto=tcp/udp 協(xié)議,可靠/不可靠
async 異步操作寫(xiě)入磁盤(pán)
sync 同步寫(xiě)入磁盤(pán)
ro 只讀方式掛載
rw 讀寫(xiě)方式掛載
auto 能否通過(guò)mount -a 自動(dòng)掛載
default(rw,suid,dev,exec,auto,nouser,async) 默認(rèn)掛載參數(shù)
exec/noexec 文件系統(tǒng)中的二進(jìn)制程序能否執(zhí)行(安全優(yōu)化)
noatime 不更新inode,高并發(fā)最好選用這個(gè)參數(shù)
nodiratime 不更新dirinode,高并發(fā)使用
suid/nosuid 支持/不支持suid
remount 用于修復(fù)文件系統(tǒng)因fstab修改錯(cuò)誤無(wú)法啟動(dòng)故障,具體案例見(jiàn)下文
救援模式下,mount -o rw,remount / ,然后修改fstab
建議:默認(rèn)或以下掛載方式
mount -t nfs -o bg,hard,intr,rsize=131072,wsize=131072 IP_ADDR:/data
一個(gè)掛載案例
1. 重啟系統(tǒng)看是否可以自動(dòng)修復(fù)丧蘸。
2. 使用fsck -y /dev/sda1 進(jìn)行自動(dòng)修復(fù)。(用”-y”選項(xiàng)來(lái)執(zhí)行該命令對(duì)硬盤(pán)進(jìn)行檢查和修復(fù))
添加參數(shù):fsck -y -C -t ext3 /dev/sda1 (一般情況下修復(fù)完成后,所有文件移動(dòng)到 lost+found目錄,文件名會(huì)被改變)
(-C 顯示進(jìn)度條 -t 指定文件系統(tǒng)類(lèi)型 -y 默認(rèn)自動(dòng)yes修復(fù))
3. 如果fsck修復(fù)完成后科贬,啟動(dòng)系統(tǒng)依然自讀呐矾。
查看分區(qū)結(jié)構(gòu):
[root@localhost ~]# more /etc/fstab
[root@localhost ~]# more /proc/mounts
[root@localhost ~]# mount
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
查看ro掛載的分區(qū),如果發(fā)現(xiàn)有ro,就重新mount
umount /dev/sda1
mount /dev/sda1 /boot
如果發(fā)現(xiàn)有提示“device is busy”踱蛀,找到是什么進(jìn)程使得他busy
fuser -m /boot 將會(huì)顯示使用這個(gè)模塊的pid
fuser -mk /boot 將會(huì)直接kill那個(gè)pid
然后重新mount即可奠支。
4. 直接remount
[root@localhost ~]# mount -o rw,remount /dev/sda1
NFS優(yōu)化
安全掛載:mount -t nfs -o nosuid,noexec,nodev,rw IP_ADDR:/data /mnt
性能掛載:mount -t nfs -o noatime,nodiratime IP_ADDR:/data /mnt
安全+性能:mount -t nfs -o nosuid,nodev,noexec,rw,noatime,nodiratime IP_ADDR:/data /mnt
針對(duì)NFS對(duì)內(nèi)核進(jìn)行優(yōu)化
//調(diào)大套接字接受/發(fā)送緩沖區(qū)大小,來(lái)自官方
cat >>/etc/sysctl.conf<<EOF
net.core.wmem_default=8388608
net.core.rmem_default=8388608
net.core.rmem_max=16777216
net.core.wmem_max=16777216
NFS硬件選擇
SAS/SSD磁盤(pán)多塊,做raid0/10,網(wǎng)卡至少千兆,多塊bond.
強(qiáng)制卸載卸載不掉的文件系統(tǒng)
umount -lf