一、基礎概念
- NFS是一種網路檔案系統,實現資料一致性,檔案共享
- NFS將硬碟進行共享,共享的目錄;兩臺伺服器的前提下不同使用者如何實現上傳訪問到靜態圖片/影片都能看到相同的資料則使用NFS
- 其實現在很多企業都會有一個CDN分散式檔案快取,這個快取可以實現將靜態圖片/影片上傳到CDN分散式檔案快取(要錢),好處是:客戶端反應賊快(看)但是如果NFS掛了就只能看,不能上傳
- 本地掛載:mount /dev/sdb/ /mnt
- NFS掛載:mount -t nfs 10.0.0.31:/data /mnt # data是掛載點目錄 /mnt是掛載點
- 我們的底層邏輯是:IP+埠 #這樣的方式實現通訊的
二、微型架構圖:
1、架構詳解
1.1、無CDN分散式檔案快取
- 使用者訪問域名透過LB的DR模式(負載均衡)訪問到後臺真實伺服器
- 如果我們第一次透過web01將影片圖片上傳之後,因為DR模式的緣故第二次會訪問的是web02,那麼這個時候會發現圖片消失
- 這時候我們可以採用將web01和web02的影片和圖片資料夾同步到NFS共享儲存伺服器中
- 那麼無論當我們第幾次訪問web01/web02訪問到的靜態資源圖片都在NFS共享儲存伺服器中
1.2、有CDN分散式檔案快取
- 購買CDN分散式快取之後,我們可以將NFS共享儲存檔案中內容推到CDN分散式檔案快取中並設定圖片的快取時間
- 這樣的優勢就是,使用者在訪問的時候先去訪問CDN分散式檔案快取再透過LB負載均衡的模型去訪問真實伺服器
- 也就是說你先拿到圖片後拿到真實伺服器中的內容
三、NFS配置詳解:
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
nfs共享引數 |
引數作用 |
rw |
讀寫許可權 |
ro |
只讀許可權 |
all_squash |
無論NFS客戶端使用什麼賬號訪問,均對映為NFS服務端的匿名使用者 |
no_all_squash |
無論NFS客戶端使用什麼賬號訪問,都不進行壓縮 |
sync |
同時將資料寫入到記憶體與硬碟中,保證不丟失資料 |
async |
優先將資料儲存到記憶體,然後再寫入磁碟;這樣更高效,但可能會丟失資料 |
anonuid |
配置all_squash使用,指定NFS的使用者UID,必須存在系統 |
anongid |
配置all_squash使用,指定NFS的使用者UID,必須存在系統 |
四、NFS服務部署:
1.安裝服務
[root@nfs ~]# yum -y install nfs-utils
2.配置服務
[root@nfs ~]# vim /etc/exports
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
3.啟動服務
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl enable nfs
檢查埠 111
[root@nfs ~]# netstat -tnulp
4.檢查配置檔案是否正確
/var/lib/nfs/etab 如果有內容說明配置正確,如果為空說明配置錯誤
[root@nfs ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)
5.根據配置檔案建立必要資料
[root@nfs ~]# mkdir /data
[root@nfs ~]# ll /data
total 0
修改目錄屬主屬組
[root@nfs ~]# grep 65534 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@nfs ~]# ll -d /data/
drwxr-xr-x. 2 root root 6 Nov 6 12:06 /data/
[root@nfs ~]# chown nfsnobody.nfsnobody /data
[root@nfs ~]# ll -d /data
drwxr-xr-x. 2 nfsnobody nfsnobody 6 Nov 6 12:06 /data
客戶端使用:
1.安裝nfs-utils(只安裝不執行)
[root@web01 ~]# yum -y install nfs-utils
2.檢視服務端共享的目錄
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
3.掛載遠端檔案系統nfs
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 14M 473M 3% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda3 18G 2.3G 16G 13% /
/dev/sda1 197M 110M 88M 56% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/data 18G 2.3G 16G 13% /mnt
進入/mnt測試寫入
[root@web01 ~]# cd /mnt/
total 0
[root@web01 mnt]# touch 1.txt
[root@web01 mnt]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 5 10:48 1.txt
NFS引數: 指定匿名壓縮使用者為uid和gid為666
[root@nfs ~]# groupadd -g666 www
[root@nfs ~]# useradd -u666 -g666 -M -s /sbin/nologin www
修改nfs配置
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
修改目錄屬主屬組
[root@nfs ~]# chown www.www /data
[root@nfs ~]# ll -d /data
drwxr-xr-x. 2 www www 6 Dec 5 10:54 /data
檢視記憶體的對映
[root@web01 ~]# cat /proc/mounts
如果掛載夯住使用-f
[root@web01 ~]# umount -f /mnt
五、小結:
1、NFS儲存優點:
- NFS檔案簡單易用、方便部署、資料可靠、服務穩定、滿足中小企業需求
- NFS檔案系統記憶體放資料都在檔案系統之上,所有資料都是能看到的
2、NFS儲存侷限
- 存在單點故障,如果構建高可用維護麻煩 web->nfs0->backup
- NFS資料明文,並不多資料做任何校驗
- 客戶端掛載NFS伺服器沒有密碼驗證,安全性一般(內網使用)
3、NFS應用建議
- 生產場景將靜態資料儘可能往前端推,減少後端儲存壓力
- 必須將儲存裡的靜態資源透過CDN快取 jpg\png\mp4\avi\cdd\js
- 如果沒有快取或架構本身歷史遺留問題太大,在多儲存也無用