NFS文件存儲


NFS文件存儲

NFS操作與部署

1. 安裝 epel 庫

yum upgrade -y  
yum -y install epel-release

2. 配置防火牆

firewall-cmd --add-service=nfs --permanent --zone=public
firewall-cmd --add-service=mountd --permanent --zone=public
firewall-cmd --add-service=rpc-bind --permanent --zone=public
firewall-cmd --reload

生產環境應該使用更嚴格的方式

3. 安裝 nfs-server

yum -y install nfs-utils rpcbind
systemctl enable rpcbind nfs-server nfs-lock nfs-idmap
systemctl start rpcbind nfs-server nfs-lock nfs-idmap

4. 創建 NFS 共享目錄

mkdir /data

此共享目錄存放 jumpserver 的錄像及任務結果

5. 設置 NFS 訪問權限

vi /etc/exports
/data 192.168.100.*(rw,sync,no_root_squash)

/data 是剛才創建的將被共享的目錄, 192.168.100.* 表示整個 192.168.100.* 的資產都有括號里面的權限
也可以寫具體的授權對象 /data 192.168.100.30(rw,sync,no_root_squash) 192.168.100.31(rw,sync,no_root_squash)

6. 使 exports 生效

exportfs -a

ubuntu安裝nfs服務

1、安裝nfs服務

不是root管理員運行

sudo apt install nfs-kernel-server

2、修改配置文件

vim /etc/export 
/work 172.21.137.*(rw,sync,no_subtree_check,no_root_squash)

3、新建work共享目錄

sudo /work
sudo chmod 755 /work -R 

4、啟動nfs服務

sudo service nfs-kernel-server start

5、檢查nfs狀態並設置開機啟動

sudo nfsstat

sudo apt-get install sysv-rc-conf
sudo sysv-rc-conf

5、nfs常用工具

#顯示已經mount到本機nfs目錄的客戶端機器。

sudo showmount -e localhost

#將配置文件中的目錄全部重新export一次!無需重啟服務。

sudo exportfs -rv
#查看NFS的運行狀態

sudo nfsstat
#查看rpc執行信息,可以用於檢測rpc運行情況

sudo rpcinfo


#查看網絡端口,NFS默認是使用111端口。

sudo netstat -tu -4

NFS-Client

6、安裝NFS客戶端

sudo apt install nfs-common

7、查看NFS服務器共享目錄

rdadmin@RD-NFS-01-VT:/work$ sudo showmount -e 172.21.137.23
Export list for 172.21.137.23:
/work 172.21.137.*

8、掛載nfs服務

mkdir /{data_new,data_final,data} -pv

mount -t nfs -o soft,,timeo=10 172.21.137.23:/work /work

9、查看掛載

mount | grep nfs

rsize和wsize:
文件傳輸尺寸設定:V3沒有限定傳輸尺寸,V2最多只能設定為8k,可以使用-rsize and -wsize 來進行設定。這兩個參數的設定對於NFS的執行效能有較大的影響
bg:在執行mount時如果無法順利mount上時,系統會將mount的操作轉移到后台並繼續嘗試mount,直到mount成功為止。(通常在設定/etc/fstab文件時都應該使用bg,以避免可能的mount不上而影響啟動速度)
fg:和bg正好相反,是默認的參數
nfsvers=n:設定要使用的NFS版本,默認是使用2,這個選項的設定還要取決於server端是否支持NFS VER 3
mountport:設定mount的端口
port:根據server端export出的端口設定,例如如果server使用5555端口輸出NFS,那客戶端就需要使用這個參數進行同樣的設定
timeo=n:設置超時時間,當數據傳輸遇到問題時,會根據這個參數嘗試進行重新傳輸。默認值是7/10妙(0.7秒)。如果網絡連接不是很穩定的話就要加大這個數值,並且推薦使用HARD MOUNT方式,同時***也加上INTR參數,這樣你就可以終止任何掛起的文件訪問。
intr 允許通知中斷一個NFS調用。當服務器沒有應答需要放棄的時候有用處。
udp:使用udp作為nfs的傳輸協議(NFS V2只支持UDP)
tcp:使用tcp作為nfs的傳輸協議
df -h

10、設置自動掛載

不要放入/etc/fatab做開機啟動,因為fstab啟動較早,那個時候網絡服務還未啟動,掛載會失敗

vim /etc/rc.local
mount -t nfs -o soft,,timeo=10 172.21.137.23:/work /work
chmod +x /etc/rc.loacl

NFS優化

1、查看掛載配置

cat /var/lib/nfs/etab	查看NFS服務器端配置參數的細節
cat /proc/mounts		查看客戶端mount的掛載參數細節

2、NFS客戶端對mount掛載說明

fg/bg		默認[fg],在客戶端執行掛載時,可以選擇在前台(fg)執行還是在后台(bg)執行
soft/hart	默認[hart]當網絡和server出問題時,soft參數會在超時后停止掛載,hard參數會一直掛載直到成功(但可能造成客戶端無響應,常配合intr參數使用)
intr		當hard掛載資源timeout后,若使用intr參數可在超時后終端掛載,防止NFS鎖死
resize/wsize	讀出和寫入的區塊大小,影響客戶端與服務器段傳輸數據的緩沖存儲量
proto=tcp	默認[tcp]傳輸使用的協議,跨internet建議tcp有較好的糾錯能力,內網建議用udp提高性能

3、掛載模式建議

追求極致

mount -t nfs -o fg,hart,intr,resize=13107,wsize=131072 172.16.1.31:/date/ /mnt

簡單易用

mount -t nfs 172.16.1.31:/date/ /mnt
# 默認參數能滿足大部分需求

4、mount -o可以使用的參數說明()

ro/rw	 	■以只讀/讀寫方式掛載
dev/nodev	是否保留裝置文件的特殊功能,如分區和光驅的區別,建議一般nodev
sync/async	●直接同步寫入磁盤,還是異步先寫入內存再后續寫入硬盤
auto/noauto	允許/不允許以–a選項進行自動掛載
exec/noexec	●是否具有執行文件的權限,如果掛載的用途是數據存儲,建議noexec
suid/nosuid	●掛載的文件系統,是否取消suid這個權限
user/nouser	是否允許一般用戶的掛載與卸載功能
dirsync		●目錄更新時同步寫入磁盤
remount		嘗試重新掛載已經掛載了的文件系統
noatime		■訪問文件時不更新文件inode中的時間戳,高並發環境可提高性能
nodiratime	■同上,不更新目錄的訪問時間戳atime
defaults	使用所有選項的默認值(auto、nouser、rw、suid)
loop 	掛載“回旋設備”以及“ISO鏡像文件”

●表示安全優化參數,■表示性能優化參數,安全和性能是對立的

5 企業生產環境下NFS優化掛載3常見用法

1)默認掛載
mount -t nfs IP:目錄 /掛載點
# 其實centos的默認掛載性能已經非常不錯了
2)性能優化
# 減少更新訪問時間戳產生的磁盤I/O
mount -t nfs -o noatime,nodiratime IP:目錄 /掛載點
3)安全優化
# 進行執行和提權執行,防掛馬
mount -t nfs -o nosuid,noexec,nodev IP:目錄 /掛載點
4)安全和性能都優化
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 IP:目錄 /掛載點

注意:本地文件系統掛載時不能加odiratime選項,會報錯

6 NFS內核優化說明和建

/proc/sys/net/core/rmem_default	指定接收套接字的緩沖區默認大小(默:124928)
/proc/sys/net/core/rmem_max		指定接收套接字的緩沖區的最大值(默:124928)
/proc/sys/net/core/wmem_default	指定發送套接字的緩沖區默認大小(默:124928)
/proc/sys/net/core/wmem_max		指定發送套接字的緩沖區的最大值(默:124928)


vim 在/etc/sysctl.d/local.conf


fs.file-max = 51200

net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.netdev_max_backlog = 4096
net.core.somaxconn = 4096

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = hybla
sysctl --system

優化命令如下:

cat >>/etc/sysctl.conf<<EOF
net.core.wmem_dafault = 8388608
net.core.rmem_dafault = 8388608
net.core.wmem_max = 16777216
net.core.rmem_max = 16777216
EOF
sysctl -p

7 企業場景NFS共享存儲優化小結

  1. 硬件:SAS/SSD硬盤,組RAID10,網卡千兆,多塊網卡做bond

  2. NFS服務端配置優化:

    /目錄 ip網段(rw,sync,all_squash,anonuid=65535,anongid=65534)    
    
  3. NFS掛載客戶端優化:

    -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072
    
  4. NFS服務器內核優化:命令見上面,要執行sysctl -p使配置生效

  5. 大型網站可用分布式文件系統替換NFS,Moosefs(mfs)和FastDFS適合小文件系統,GlusterFS適合大文件系統

如果卸載的時候提示umount: /mnt: device is busy,需要退出掛載目錄再進行掛載,如果是NFS server宕機了,則需要強制卸載,執行命令umount -lf /mnt

8 NFS系統的優缺點總結

優點:

1)簡單,容易上手,容易掌握
2)數據直接可見,不想分布式文件系統數據不能直接看見
3)部署快速,維護簡單方便且可控(滿足要求的就是最好的)
4)可靠,數據可靠性高,經久耐用
5)服務非常穩定

缺點:

1)存在單點故障,可通過高負載和高可用方案彌補
2)大數據高並發下NFS效率和性能有限(但2千萬/日PV以下都行,滿足不了2千萬那是架構太差)
3)FS數據是明文的,NFS本身不對數據完整性進行驗證
4)多台客戶機掛載一個NFS服務器時,連接管理維護麻煩,NFS服務器端出問題后,所有客戶端都處於掛掉狀態
5)耦合度高,一直存在連接,涉及同步(實時等待)和異步(解耦)概念,網站要盡量降低耦合度

建議:

對大中型網站(2000萬/日PV以下)都有用武之地,在生產場景中,應該盡量多將數據訪問往前退,將靜態存儲里面的資源通過CDN或緩存服務器提供服務,如果沒有緩存服務或架構不好,存儲服務器再多也扛不住,用戶體驗會很差,即使使用分布式文件系統也一樣(CDN可以提供90-95%的數據訪問服務,內存服務器3%,剩余的才是文件服務器提供的)

參考1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM