1.爲何用共享存儲 2.存儲有哪些工具 3.共享存儲應用場景有哪些 4.部署nfs共享存儲 5.客戶端嘗試鏈接共享存儲 什麼是NFS? NFS 是 Network File System 的縮寫及網絡文件系統。 NFS 主要功能是經過局域網絡讓不一樣的主機系統之間能夠共享文件或目錄。 NFS 系統和 Windows 網絡共享、網絡驅動器相似, 只不過 windows 用於局域網, NFS 用於企業集羣架構中, 若是是大型網站, 會用到更復雜的分佈式文件系統 FastDFS,glusterfs,HDFS 那麼咱們爲何要使用數據存儲共享服務? 1.實現多臺服務器之間數據共享 2.實現多臺服務器之間數據一致
NFS工做原理 1.用戶進程訪問 NFS 客戶端,使用不一樣的函數對數據進行處理 2.NFS 客戶端經過 TCP/IP 的方式傳遞給 NFS 服務端 3.NFS 服務端接收到請求後,會先調用 portmap 進程進行端口映射。 4.nfsd 進程用於判斷 NFS 客戶端是否擁有權限鏈接 NFS 服務端。 5.Rpc.mount 進程判斷客戶端是否有對應的權限進行驗證。 6.idmap 進程實現用戶映射和壓縮 7.最後 NFS 服務端會將對應請求的函數轉換爲本地能識別的命令,傳遞至內核,由內核驅動硬件。 注意: rpc 是一個遠程過程調用,那麼使用 nfs 必須有 rpc 服務
yum install nfs-utils -y
nfs 服務程序的配置文件爲/etc/exports,須要嚴格按照共享目錄的路徑 容許訪問的 NFS 客戶端(共享權限參數)格式書寫,定義要共享的目錄與相應的權限,具體書寫方式以下圖所示
配置文件參數解釋:css
執行 man exports 命令,而後切換到文件結尾,能夠快速查看以下樣例格式: nfs共享參數 參數做用 rw 讀寫權限 ro 只讀權限 root_squash 當 NFS 客戶端以 root 管理員訪問時,映射爲 NFS 服務器的匿名用戶(不經常使用) no_root_squash 當 NFS 客戶端以 root 管理員訪問時,映射爲 NFS 服務器的 root 管理員(不經常使用) all_squash 不管 NFS 客戶端使用什麼帳戶訪問,均映射爲 NFS 服務器的匿名用戶(經常使用) no_all_squash 不管 NFS 客戶端使用什麼帳戶訪問,都不進行壓縮 sync 同時將數據寫入到內存與硬盤中,保證不丟失數據 async 優先將數據保存到內存,而後再寫入硬盤;這樣效率更高,但可能會丟失數據 anonuid 配置 all_squash 使用,指定 NFS 的用戶 UID,必須存在系統 anongid 配置 all_squash 使用,指定 NFS 的用戶 UID,必須存在系統
寫入配置文件:注意!IP地址和後面的小括號沒有空格html
cat > /etc/exports <<EOF /data 172.16.1.0/24(rw,sync,all_squash) EOF
[root@nfs01 ~]# mkdir /data -p [root@nfs01 ~]# chown -R nfsnobody:nfsnobody /data/
[root@nfs01 ~]# systemctl start nfs-server.service
[root@nfs01 ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24
在使用 NFS 服務進行文件共享以前,須要使用 RPC(Remote Procedure Call 遠程過程調用服務將 NFS 服務器的IP 地址和端口號信息發送給客戶端。所以,在啓動 NFS 服務以前,須要先重啓並啓用 rpcbind 服務程序,同時都加入開機自啓動前端
[root@nfs01 ~]# systemctl enable rpcbind nfs-server [root@nfs01 ~]# systemctl restart rpcbind nfs-server
客戶端安裝nfs服務十分簡單,只須要安裝nfs軟件包便可web
[root@backup ~]# yum install nfs-utils rpcbind -y
安裝完成後只須要啓動rpcbind,不須要啓動nfsvim
[root@backup ~]# systemctl restart rpcbind
使用showmount命令查看nfs共享信息查詢 NFS 服務器的遠程共享信息,其輸出格式爲「共享的目錄名稱 容許使用客戶端地址」。windows
[root@backup ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24
掛載命令: 建立掛載目錄
在 NFS 客戶端建立一個掛載目錄, 使用 mount 命令並結合-t 參數, 指定要掛載的文件系統的類型, 並在命令後面寫上服務器的 IP 地址, 以及服務器上的共享目錄, 最後須要寫上要掛載到本地系統(客戶端)的目錄後端
[root@backup ~]# mkdir /data -p [root@backup ~]# mount -t nfs 172.16.1.31:/data /data
查看是否掛載成功:緩存
[root@backup ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda3 18G 1.9G 17G 11% / devtmpfs 480M 0 480M 0% /dev tmpfs 489M 0 489M 0% /dev/shm tmpfs 489M 32M 458M 7% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda1 1014M 110M 905M 11% /boot tmpfs 98M 0 98M 0% /run/user/0 172.16.1.31:/data 18G 1.9G 17G 11% /data
測試寫入數據是否正常安全
[root@backup ~]# echo "mzk" > /data/mzk.txt [root@backup ~]# cat /data/mzk.txt mzk
寫入開機自動掛載bash
[root@backup ~]# vim /etc/fstab [root@backup ~]# tail -1 /etc/fstab 172.16.1.31:/data /data nfs defaults 0 0 [root@backup ~]# mount -a [root@backup ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda3 18G 1.9G 17G 11% / devtmpfs 480M 0 480M 0% /dev tmpfs 489M 0 489M 0% /dev/shm tmpfs 489M 32M 458M 7% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda1 1014M 110M 905M 11% /boot tmpfs 98M 0 98M 0% /run/user/0 172.16.1.31:/data 18G 1.9G 17G 11% /data
卸載命令:注意!卸載的時候若是提示」umount.nfs: /nfsdir: device is busy」先切換到其餘目錄再卸載
[root@backup ~]# umount /data/
強制卸載命令:
[root@backup ~]# umount -rl /data/
服務端配置:
[root@nfs01 ~]# cat /etc/exports /data 172.16.1.0/24(ro,sync,all_squash) [root@nfs01 ~]# systemctl restart nfs-server.service [root@nfs01 ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24
客戶端掛載:
[root@backup ~]# mount -t nfs 172.16.1.31:/data /data [root@backup ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda3 18G 1.9G 17G 11% / devtmpfs 480M 0 480M 0% /dev tmpfs 489M 0 489M 0% /dev/shm tmpfs 489M 38M 452M 8% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda1 1014M 110M 905M 11% /boot tmpfs 98M 0 98M 0% /run/user/0 172.16.1.31:/data 18G 1.9G 17G 11% /data
測試讀取:
[root@backup ~]# cat /data/mzk.txt mzk
寫入測試:
[root@backup ~]# echo "backup" > /data/mzk.txt -bash: /data/mzk.txt: 權限不夠
服務端配置:
[root@nfs01 ~]# cat /etc/exports /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
服務端建立用戶及受權:
[root@nfs01 ~]# useradd -s /sbin/nologin -M -u 666 -g 666 www [root@nfs01 ~]# id www uid=666(www) gid=666(www) 組=666(www)
重啓NFS服務:
[root@nfs01 ~]# systemctl restart nfs-server.service
更改目錄受權:
[root@nfs01 ~]# chown -R www:www /data/ [root@nfs01 ~]# ls -ld /data/ drwxr-xr-x 2 www www 35 7月 17 19:50 /data/
客戶端操做:
[root@backup ~]# mount -t nfs 172.16.1.31:/data /data [root@backup ~]# ls -ld /data/ drwxr-xr-x 2 666 666 35 7月 17 19:50 /data/ [root@backup ~]# ll /data/ 總用量 4 -rw-r--r-- 1 666 666 0 7月 17 19:50 123 -rw-r--r-- 1 666 666 9 7月 17 19:46 mzk.txt [root@backup ~]# echo "mzk" > /data/mzk.txt [root@backup ~]# cat /data/mzk.txt mzk
咱們會發現依然能夠寫入,可是爲了不這種狀況發生,建議客戶端也建立相同uid gid的用戶
[root@backup ~]# groupadd -g 666 www [root@backup ~]# useradd -s /sbin/nologin -M -u 666 -g 666 www [root@backup ~]# id www uid=666(www) gid=666(www) 組=666(www) [root@backup ~]# ls -ld /data/ drwxr-xr-x 2 www www 35 7月 17 19:50 /data/ [root@backup ~]# ll /data/ 總用量 4 -rw-r--r-- 1 www www 0 7月 17 19:50 123 -rw-r--r-- 1 www www 10 7月 17 21:31 mzk.txt
firewall-cmd --add-service=nfs --permanent firewall-cmd --add-service=mountd --permanent firewall-cmd --add-service=rpc-bind --permanent firewall-cmd --reload
參考博客
https://www.cnblogs.com/xiangsikai/p/10297233.html
啓動NFS會開啓以下端口:
1)portmapper 端口:111 udp/tcp;
2)nfs/nfs_acl 端口:2049 udp/tcp;
3)mountd 端口:"32768--65535" udp/tcp
4)nlockmgr 端口:"32768--65535" udp/tcp
系統 RPC服務在 nfs服務啓動時默認會給 mountd 和 nlockmgr 動態選取一個隨機端口來進行通信。
[root@nfs01 /opt/sersync]# rpcinfo -p 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 100024 1 udp 43177 status 100024 1 tcp 36750 status 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 nfs_acl 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 3 udp 2049 nfs_acl 100021 1 udp 41388 nlockmgr 100021 3 udp 41388 nlockmgr 100021 4 udp 41388 nlockmgr 100021 1 tcp 43678 nlockmgr 100021 3 tcp 43678 nlockmgr 100021 4 tcp 43678 nlockmgr
[root@nfs01 ~]# vim /etc/sysconfig/nfs [root@nfs01 ~]# tail -5 /etc/sysconfig/nfs RQUOTAD_PORT=4001 LOCKD_TCPPORT=4002 LOCKD_UDPPORT=4002 MOUNTD_PORT=4003 STATD_PORT=4004
[root@nfs01 ~]# systemctl restart rpcbind.service nfs-server.service
[root@nfs01 ~]# rpcinfo -p 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 100024 1 udp 43177 status 100024 1 tcp 36750 status 100005 1 udp 4003 mountd 100005 1 tcp 4003 mountd 100005 2 udp 4003 mountd 100005 2 tcp 4003 mountd 100005 3 udp 4003 mountd 100005 3 tcp 4003 mountd 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 nfs_acl 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 3 udp 2049 nfs_acl 100021 1 udp 4002 nlockmgr 100021 3 udp 4002 nlockmgr 100021 4 udp 4002 nlockmgr 100021 1 tcp 4002 nlockmgr 100021 3 tcp 4002 nlockmgr 100021 4 tcp 4002 nlockmgr
-A INPUT -p tcp -m tcp --dport 111 -j ACCEPT -A INPUT -p udp -m udp --dport 111 -j ACCEPT -A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT -A INPUT -p udp -m udp --dport 2049 -j ACCEPT -A INPUT -p tcp -m tcp --dport 4001:4004 -j ACCEPT -A INPUT -p udp -m udp --dport 4001:4004 -j ACCEPT
iptables-save iptables -nL
若是設置了開機自啓動,可是系統啓動的時候NFS並無提供服務,就會致使開機自檢的時候卡在掛在那一步
開機啓動時添加rd.break ctrl+x mount -o remount,rw /sysroot/ chroot /sysroot/
NFS 存儲優勢 1.NFS 文件系統簡單易用、方便部署、數據可靠、服務穩定、知足中小企業需求。 2.NFS 文件系統內存放的數據都在文件系統之上,全部數據都是能看得見 NFS 存儲侷限 1.存在單點故障, 若是構建高可用維護麻煩 web->nfs()->backup 2.NFS 數據明文, 並不對數據作任何校驗。 3.客戶端掛載 NFS 服務沒有密碼驗證, 安全性通常(內網使用) NFS 應用建議 1.生產場景應將靜態數據儘量往前端推, 減小後端存儲壓力 2.必須將存儲裏的靜態資源經過 CDN 緩存 jpg\png\mp4\avi\css\js 3.若是沒有緩存或架構自己歷史遺留問題太大, 在多存儲也無用