架構期day4-NFS服務

秋風、亦冷發表於2020-11-23

NFS 服務

一、NFS介紹

1.使用NFS解決了什麼

1.為了實現檔案共享
2.為了多臺伺服器之間資料一致

2.NFS 原理

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-IqxLSIzl-1606091099401)(C:\Users\秋風、亦冷\AppData\Roaming\Typora\typora-user-images\image-20201120193301212.png)]

二、NFS實踐

1.環境準備

主機IP角色
web01172.16.1.7NFS客戶端
nfs172.16.1.31NFS服務端

2.服務端(172.16.1.31)

1)關閉防火牆和selinux

2)安裝NFS和rpcbind

[root@nfs ~]# yum install -y nfs-utils rpcbind

#注意:
Centos6 需要安裝rpcbind
Centos7 預設已經安裝好了rpcbind,並且預設是開機自啟動

3)配置NFS

#NFS預設的配置檔案是
[root@nfs ~]# ll /etc/exports
-rw-r--r--. 1 root root 0 Jun  7  2013 /etc/exports

#配置NFS
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
語法/data172.16.1.0/24(rw,sync,all_squash)
含義NFS服務端共享的目錄NFS允許連線的客戶端IP允許操作的許可權

4)建立共享目錄

[root@nfs ~]# mkdir /data

5)啟動服務

#Centos7啟動
[root@nfs ~]# systemctl start rpcbind nfs

#Centos6啟動,一定要先啟動rpcbind在啟動nfs
[root@nfs ~]# /etc/init.d/rpcbind start
[root@nfs ~]# /etc/init.d/nfs start

[root@nfs ~]# service rpcbind start
[root@nfs ~]# service nfs start
 
#驗證啟動
[root@nfs ~]# netstat -lntp | grep rpc
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      5824/rpcbind
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      10187/rpc.mountd
tcp        0      0 0.0.0.0:49150           0.0.0.0:*               LISTEN      10149/rpc.statd 
tcp6       0      0 :::111                  :::*                    LISTEN      5824/rpcbind
tcp6       0      0 :::20048                :::*                    LISTEN      10187/rpc.mountd
tcp6       0      0 :::46384                :::*                    LISTEN      10149/rpc.statd

6)驗證NFS配置

[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)

3.客戶端操作(172.16.1.7)

1)關閉防火牆和selinux

2)安裝服務

[root@web01 ~]# yum install -y rpcbind nfs-utils

3)檢視掛載點

[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

4)掛載

[root@web01 ~]# mount -t nfs 172.16.1.31:/data /backup/

#驗證掛載
[root@web01 ~]# df -h
Filesystem         Size  Used Avail Use% Mounted on
/dev/sda3           18G  1.6G   17G   9% /
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/sda1         1014M  127M  888M  13% /boot
tmpfs               98M     0   98M   0% /run/user/0
172.16.1.31:/data   18G  1.6G   17G   9% /backup

5)寫入資料進行測試

#第一次寫入測試
[root@web01 ~]# cd /backup/
[root@web01 backup]# touch 123.txt
touch: cannot touch ‘123.txt’: Permission denied    #沒有許可權

#授權目錄
[root@nfs ~]# chown -R nfsnobody.nfsnobody /data/

#再次建立測試
[root@web01 backup]# touch 123.txt
[root@web01 backup]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Nov 20 09:26 123.txt

#服務端檢視
[root@nfs ~]# ll /data/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Nov 20 09:26 123.txt

三、NFS掛載與解除安裝

NFS客戶端的配置步驟也十分簡單。先使用showmount命令,查詢NFS伺服器的遠端共享資訊,其輸出格式為“共享的目錄名稱 允許使用客戶端地址(許可權)”。

NFS掛載:客戶端的目錄僅僅是服務端共享目錄的一個入口,可以簡單理解為軟連線,真正的資料全都是儲存在服務端的目錄,客戶端寫入的資料也是在服務端儲存的

1.注意事項

1.掛載目錄後,原來檔案下的內容不會丟失,僅僅是被遮蓋住,取消掛載後仍然存在
2.取消掛載時不要在掛載的目錄下面操作,否則會提示忙碌,切換到其他目錄再進行解除安裝
3.掛載是如果在掛載的目錄下,還是可以看到掛載前目錄下的檔案,需要重新進入目錄才會顯示掛載後目錄的內容

2.掛載

1)客戶端安裝

1.rpcbind:
	為了連線服務端的程式
	
2.nfs-utils
	為了使用showmount命令

2)客戶端檢視掛載點

[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

3)掛載命令

[root@web01 ~]# mount -t nfs 172.16.1.31:/data /backup
mount 			#掛載命令
-t 				#指定掛載的檔案型別
nfs 			#nfs檔案型別
172.16.1.31		 #服務端的IP地址
:/data 			#服務端提供的可掛載目錄
/backup			#本地要掛載到服務端的目錄

#掛在後檢視掛載
[root@web01 ~]# df -h | grep /backup
172.16.1.31:/data   18G  1.6G   17G   9% /backup

3.解除安裝

#解除安裝的兩種方式
[root@web01 ~]# umount /backup 
[root@web01 ~]# umount 172.16.1.31:/data

#強制取消掛載
[root@web01 ~]# umount -lf /backup

4.開機掛載

#編輯fstab檔案
[root@web01 ~]# vim /etc/fstab
172.16.1.31:/data /backup nfs defaults 0 0

#驗證fstab是否寫正確
[root@web01 ~]# mount -a

四、NFS配置詳解

[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
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,必須存在系統 (常用)

五、NFS案例

1.環境準備

主機IP身份
web0110.0.0.7NFS客戶端
web0210.0.0.8NFS客戶端
nfs172.16.1.31NFS服務端

2.web端安裝http和php

[root@web01 ~]# yum install -y httpd php
[root@web02 ~]# yum install -y httpd php

3.上傳程式碼

[root@web01 ~]# rz
[root@web01 ~]# ll
-rw-r--r--  1 root root    26995 Aug 23 10:35 kaoshi.zip

4.解壓程式碼

#找到httpd服務的站點目錄
[root@web01 ~]# rpm -ql httpd | grep html
/var/www/html

#解壓程式碼至站點目錄
[root@web01 ~]# unzip kaoshi.zip -d /var/www/html/

5.啟動httpd

[root@web01 ~]# systemctl start httpd

#檢視啟動
[root@web01 ~]# netstat -lntp | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      7530/httpd         

[root@web01 ~]# ps -ef | grep httpd
root       7530      1  0 10:39 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     7531   7530  0 10:39 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     7532   7530  0 10:39 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     7533   7530  0 10:39 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     7534   7530  0 10:39 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     7535   7530  0 10:39 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root       7543   7262  0 10:40 pts/0    00:00:00 grep --color=auto httpd

6.訪問頁面測試

1)訪問

http://10.0.0.7/
http://10.0.0.8/

在這裡插入圖片描述

2)測試上傳作業

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

3)上傳檔案失敗

#顯示上傳檔案成功,但是伺服器上沒有檔案
[root@web01 html]# ll /var/www/html/upload
ls: cannot access /var/www/html/upload: No such file or directory
#為什麼找這個檔案,因為程式碼裡寫的上傳檔案地址就是這個目錄

#原因:程式碼不嚴謹,沒有判斷目錄許可權,目錄許可權不足,導致上傳失敗
#授權
[root@web01 html]# chown -R apache.apache /var/www/html/

#重新上傳成功

4)測試(沒有掛載)

在10.0.0.7伺服器上傳 1_test_nfs.gif
在10.0.0.8伺服器上傳 2_nfs.jpg

#訪問
http://10.0.0.7/upload/1_test_nfs.gif	 訪問成功
http://10.0.0.8/upload/1_test_nfs.gif	 訪問失敗
http://10.0.0.8/upload/2_nfs.jpg		訪問成功
http://10.0.0.7/upload/2_nfs.jpg		訪問失敗

#在沒有掛載的情況下,檔案無法實現共享,在哪臺機器上傳就只能在哪臺機器訪問

7.掛載

1)web端掛載目錄

1.先同步多臺web的檔案
[root@web01 html]# rsync -avz upload/ 172.16.1.31:/data
[root@web02 html]# rsync -avz upload/ 172.16.1.31:/data

2.找到需要掛載的目錄
/var/www/html/upload #根據apache屬豬屬組來生成,需網頁上傳一個圖片檔案來自動生成,即客戶端訪問的地址10.0.0.7或10.0.0.8 ~~考試檔案上傳的頁面來進行上傳,上傳成功即可生成此目錄

3.掛載
[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/upload
[root@web02 html]# mount -t nfs 172.16.1.31:/data /var/www/html/upload

2)再次訪問測試(掛載後)

#訪問
http://10.0.0.7/upload/1_test_nfs.gif	 訪問成功
http://10.0.0.8/upload/1_test_nfs.gif	 訪問成功
http://10.0.0.8/upload/2_nfs.jpg		訪問成功
http://10.0.0.7/upload/2_nfs.jpg		訪問成功

六、統一使用者

1.伺服器建立統一使用者

[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -u 666 -g 666

[root@web02 ~]# groupadd www -g 666
[root@web02 ~]# useradd www -u 666 -g 666

[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666

[root@backup ~]# groupadd www -g 666
[root@backup ~]# useradd www -u 666 -g 666

2.需要修改使用者的服務

httpd
nfs
rsync

3.修改httpd的使用者

#找到配置檔案
[root@web01 ~]# rpm -qc httpd
/etc/httpd/conf/httpd.conf

#修改配置檔案
[root@web01 ~]# vim /etc/httpd/conf/httpd.conf
User www
Group www

#重啟服務
[root@web01 ~]# systemctl restart httpd

#確認啟動使用者
[root@web01 ~]# ps -ef | grep httpd
root       7768      1  1 11:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
www        7769   7768  0 11:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
www        7770   7768  0 11:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
www        7771   7768  0 11:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
www        7772   7768  0 11:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
www        7773   7768  0 11:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

4.修改nfs服務的使用者

[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

#授權/data目錄
[root@nfs ~]# chown -R www.www /data/

#重啟服務
[root@nfs ~]# systemctl restart nfs

#驗證啟動使用者
[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=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)

5.修改rsync使用者

#修改配置
[root@backup ~]# vim /etc/rsyncd.conf
uid = www
gid = www

#重啟服務
[root@backup ~]# systemctl restart rsyncd

#目錄重新授權
[root@backup ~]# chown -R www.www /backup/

6.測試架構

1.兩臺web伺服器
2.一臺nfs伺服器掛載web伺服器的檔案目錄
3.一臺backup伺服器實時同步nfs掛載目錄下的內容

七、NFS小結

1.NFS儲存優點

1.NFS檔案系統簡單易用、方便部署、資料可靠、服務穩定、滿足中小企業需求
2.NFS檔案系統記憶體放的資料都在檔案系統之上,所有資料都是能看得見

2.NFS儲存侷限

1.存在單點故障, 如果構建高可用維護麻煩  web -> nfs -> backup
2.NFS資料明文, 並不對資料做任何校驗
3.客戶端掛載NFS服務沒有密碼驗證, 安全性一般(內網使用)

3.NFS應用建議

1.生產場景應將靜態資料儘可能往前端推, 減少後端儲存壓力
2.必須將儲存裡的靜態資源通過CDN快取 jpg\png\mp4\avi\css\js
3.如果沒有快取或架構本身歷史遺留問題太大, 在多儲存也無用

作業:

0.恢復快照
1.兩臺web伺服器
2.一臺nfs伺服器掛載web伺服器的檔案目錄
3.一臺backup伺服器實時同步nfs掛載目錄下的內容

相關文章