1. 程式人生 > 其它 >03 架構——檔案儲存NFS

03 架構——檔案儲存NFS

nfs服務

一、nfs服務介紹

1.什麼是nfs

共享儲存,檔案伺服器

2.基本概述

NFS是Network File System的縮寫及網路檔案系統。NFS的主要功能是通過區域網網路讓不同的主機系統之間可以共享檔案或目錄。
NFS系統和Windows網路共享、網路驅動器類似,只不過windows用於區域網,NFS用於企業叢集架構中,如果是大型網站,會用到更復雜的分散式檔案系統FastDFS,glusterfs,HDFS

3.為什麼使用NFS

1.實現多型伺服器之間資料共享
2.實現多型伺服器之間資料一致

二、NFS應用

1.沒有NFS時

1.A使用者上傳圖片經過負載均衡,負載均衡將上傳請求排程至WEB1伺服器上。
2.B使用者訪問A使用者上傳的圖片,此時B使用者被負載均衡排程至WEB2上,因為WEB2上沒有這張圖片,所以B使用者無法看到A使用者傳的圖片。

2.如果有NFS

1.A使用者上傳圖片無論被負載均衡排程至WEB1還是WEB2, 最終資料都被寫入至共享儲存
2.B使用者訪問A使用者上傳圖片時,無論排程至WEB1還是WEB2,最終都會上共享儲存訪問對應的檔案,這樣就可以訪問到資源了

3.NFS原理

vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)

1.使用者訪問NFS客戶端,將請求轉化為函式
2.NFS通過TCP/IP連線服務端
3.NFS服務端接收請求,會先呼叫portmap程序進行埠對映
4.Rpc.nfsd程序用於判斷NFS客戶端能否連線服務端;
5.Rpc.mount程序用於判斷客戶端對服務端的操作許可權

6.如果通過許可權驗證,可以對服務端進行操作,修改或讀取

三、NFS實踐——部署NFS服務

1.環境準備

主機        ip         角色
web01 172.16.1.7 NFS客戶端
nfs 172.16.1.31 NFS服務端

2.部署NFS服務

服務端:
1.安裝nfs服務
rpcbind是為nfs提供網路,為了連線服務端的程序
nfs-utils 是為了使用showmount命令
[root@nfs ~]# yum install nfs-utils rpcbind -y
2.關閉防火牆和SELINUX
[root@nfs ~]# setenforce 0
[root@nfs ~]# systemctl stop firewalld

3.建立一個目錄,用於存放檔案的倉庫
[root@nfs ~]# mkdir /data
4.建立一個系統使用者,用於驗證許可權(許可權驗證時真正驗證的是UID)
[root@nfs ~]# useradd www -r -M -s /sbin/nologin -u 996
5.修改NFS的配置檔案(作用是指定NFS的倉庫及許可權)
NFS的配置檔案:/etc/exports
[root@nfs ~]# vi /etc/exports
/data 172.16.1.0/20(rw,all_squash,sync)
[倉庫地址][可以訪問的ip段](許可權)

[root@nfs data]# vim /etc/exports
[root@nfs data]# cat /etc/exports
/data 172.16.1.0/20(rw,all_squash,sync)

控制NFS讀寫許可權
rw 讀寫許可權 (常用)
ro 只讀許可權 (不常用)

控制訪問NFS時,NFS基於的許可權

root_squash 當NFS客戶端以root管理員訪問時,對映為NFS伺服器的匿名使用者 (不常用)
no_root_squash 當NFS客戶端以root管理員訪問時,對映為NFS伺服器的root管理員 (不常用)
all_squash 無論NFS客戶端使用什麼賬戶訪問,均對映為NFS伺服器的匿名使用者 (常用)
no_all_squash 無論NFS客戶端使用什麼賬戶訪問,都不進行壓縮 (不常用)

控制NFS同步方式
sync 同時將資料寫入到記憶體與硬碟中,保證不丟失資料 (常用),但是會產生延時
async 優先將資料儲存到記憶體,然後再寫入硬碟;這樣效率更高,但可能會丟失資料 (不常用)

控制預設的使用者(非必須)
anonuid 配置all_squash使用,指定NFS的使用者UID,必須存在系統 (常用)
anongid 配置all_squash使用,指定NFS的使用者UID,必須存在系統 (常用)

6.啟動NFS服務
[root@nfs data]# systemctl start nfs-server rpcbind
7.檢視NFS的掛載點是否設定成功
# 檢視指定伺服器的掛載點
[root@nfs data]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/20

# 檢視本機的掛載點
[root@nfs data]# showmount -e
Export list for nfs:
/data 172.16.1.0/20

8.給服務端設定許可權
[root@nfs data]# chown nfsnobody.nfsnobody /data/

客戶端:
9、掛載使用(客戶端必須安裝nfs-utils)
[root@web01 ~]# yum install nfs-utils -y
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /opt

掛載不上:
1、selinux沒關閉
2、防火牆沒有關閉
3、nfs客戶端未安裝
[root@web01 ~]# yum install nfs-utils -y

沒許可權:
nfs服務端是root許可權
[root@nfs data]# chown nfsnobody.nfsnobody /data/

3.NFS掛載與解除安裝

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

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

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

4.NFS服務的組成

NFS類似於磁碟的方式,掛載到客戶端的目錄上

5.NFS案列—php案列

1.安裝web服務軟體
[root@web01 ~]# yum install -y httpd php

2.上傳程式碼
[root@web01 ~]# cd /var/www/html
[root@web01 html]# vi index.php
<?php
phpinfo();

3.開啟web服務
[root@web01 html]# systemctl start httpd

4.輸入192.168.15.7即可訪問php頁面

6.NFS案例——將nfs中的圖片,共享到web01上來訪問

			1、將圖片上傳至NFS伺服器(rz直接拉到nfs)
[root@nfs data]# ll
-rw-r--r-- 1 root root 105736 Oct 20 16:58 123.jpg


2、將NFS掛載到web網站對應目錄

[root@web01 html]mkdir img
[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/img

3、上傳程式碼

[root@web01 html]# vim index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<img src="./img/123.png" alt="">
</body>
</html>

4、瀏覽器訪問192.168.15.7

7.考試檔案上傳

1.準備伺服器

2.程式碼上傳

直接解壓——新建檔案傳輸拖動解壓之後的資料夾kaoshi
[root@web02 kaoshi]# cd kaoshi/
[root@web02 kaoshi]# ll
total 52
-rw-r--r-- 1 root root 38772 Oct 20 17:45 bg.jpg
-rw-r--r-- 1 root root 2633 Oct 20 17:45 index.html
-rw-r--r-- 1 root root 52 Oct 20 17:45 info.php
-rw-r--r-- 1 root root 1192 Oct 20 17:45 upload_file.php

3.將程式碼複製到網站根目錄(/var/www/html)

[root@web02 kaoshi]# cp -r ./*  /var/www/html/

4.開啟web服務

[root@web02 html]# systemctl start httpd

5.統一使用者

ps -ef |grep httpd   #檢視使用者是否是www
1.[root@web02 html]# useradd www -r -M -s /sbin/nologin -u 996
2.修改httpd的啟動使用者
[root@web02 ~]# vi /etc/httpd/conf/httpd.conf
User www
Group www
3.重啟WEB服務軟體
[root@web02 ~]# systemctl restart httpd
4.修改站點目錄的使用者
[root@web02 ~]# chown -R www.www /var/www/html
5.關閉selinux
setenforce 0
6.上傳的檔案共享到web01中
[root@web02 html]# yum install nfs-utils -y
[root@web02 html]# mount -t nfs 172.16.1.31:/data /var/www/html/upload
7.上傳測試