NFS 服務
一、NFS介紹
1.使用NFS解決了什麼
1.為了實現檔案共享
2.為了多臺伺服器之間資料一致
2.NFS 原理
二、NFS實踐
1.環境準備
主機 | IP | 角色 |
---|
web01 | 172.16.1.7 | NFS客戶端 |
nfs | 172.16.1.31 | NFS服務端 |
2.服務端(172.16.1.31)
1)關閉防火牆和selinux
2)安裝NFS和rpcbind
[root@nfs ~]
Centos6 需要安裝rpcbind
Centos7 預設已經安裝好了rpcbind,並且預設是開機自啟動
3)配置NFS
[root@nfs ~]
-rw-r--r--. 1 root root 0 Jun 7 2013 /etc/exports
[root@nfs ~]
/data 172.16.1.0/24(rw,sync,all_squash)
語法 | /data | 172.16.1.0/24 | (rw,sync,all_squash) |
---|
含義 | NFS服務端共享的目錄 | NFS允許連線的客戶端IP | 允許操作的許可權 |
4)建立共享目錄
[root@nfs ~]
5)啟動服務
[root@nfs ~]
[root@nfs ~]
[root@nfs ~]
[root@nfs ~]
[root@nfs ~]
[root@nfs ~]
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 ~]
/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 ~]
3)檢視掛載點
[root@web01 ~]
Export list for 172.16.1.31:
/data 172.16.1.0/24
4)掛載
[root@web01 ~]
[root@web01 ~]
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 ~]
[root@web01 backup]
touch: cannot touch ‘123.txt’: Permission denied
[root@nfs ~]
[root@web01 backup]
[root@web01 backup]
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Nov 20 09:26 123.txt
[root@nfs ~]
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 ~]
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
[root@web01 ~]
172.16.1.31:/data 18G 1.6G 17G 9% /backup
3.解除安裝
[root@web01 ~]
[root@web01 ~]
[root@web01 ~]
4.開機掛載
[root@web01 ~]
172.16.1.31:/data /backup nfs defaults 0 0
[root@web01 ~]
四、NFS配置詳解
[root@nfs ~]
/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 | 身份 |
---|
web01 | 10.0.0.7 | NFS客戶端 |
web02 | 10.0.0.8 | NFS客戶端 |
nfs | 172.16.1.31 | NFS服務端 |
2.web端安裝http和php
[root@web01 ~]
[root@web02 ~]
3.上傳程式碼
[root@web01 ~]
[root@web01 ~]
-rw-r--r-- 1 root root 26995 Aug 23 10:35 kaoshi.zip
4.解壓程式碼
[root@web01 ~]
/var/www/html
[root@web01 ~]
5.啟動httpd
[root@web01 ~]
[root@web01 ~]
tcp6 0 0 :::80 :::* LISTEN 7530/httpd
[root@web01 ~]
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]
ls: cannot access /var/www/html/upload: No such file or directory
[root@web01 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]
[root@web02 html]
2.找到需要掛載的目錄
/var/www/html/upload
3.掛載
[root@web01 html]
[root@web02 html]
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 ~]
[root@web01 ~]
[root@web02 ~]
[root@web02 ~]
[root@nfs ~]
[root@nfs ~]
[root@backup ~]
[root@backup ~]
2.需要修改使用者的服務
httpd
nfs
rsync
3.修改httpd的使用者
[root@web01 ~]
/etc/httpd/conf/httpd.conf
[root@web01 ~]
User www
Group www
[root@web01 ~]
[root@web01 ~]
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 ~]
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@nfs ~]
[root@nfs ~]
[root@nfs ~]
/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 ~]
uid = www
gid = www
[root@backup ~]
[root@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掛載目錄下的內容