mycpen

Mycpen

记录学习历程与受益知识
github
telegram
bilibili

25_Linux基礎-NFS服務

日誌輪轉:

https://blog.csdn.net/weixin_43265596/article/details/85469405

https://www.cnblogs.com/liangyuxing/p/11962863.html

https://blog.csdn.net/dhxaohei/article/details/8014764


一. NFS 簡介#

**NFS(Network File System 的簡稱,即網路文件系統)** 可以透過網路,讓不同的機器、不同的操作系統可以共享彼此的文件。NFS 可以將遠端的計算機磁碟掛載到本地,讀寫文件像訪問本地磁碟一樣操作

前提:關閉 selinx
關閉 iptables

1、安裝
[root@cPen_A lianxi]# yum install nfs-utils
--------------------------------------------------------------------------------------------
2、修改配置文件	/etc/exports
[root@cPen_A lianxi]# vim /etc/exports		#注:配置文件
/opt/www 192.168.255.0/24(rw,no_root_squash)				
#注:192.168.255.0/24共享,rw權限 讀寫,no_root_squash 將遠端根使用者當成本地根使用者,即不壓制root
首先創建/opt/www目錄,在這下面創建index.html文件,文件內容”this is test nfs”
再添加exports配置,nfs的配置:vim /etc/exports
添加如下行:
/opt/www 192.168.255.0/24(rw)
表示共享/opt/www目錄,給192.168.255./24這個網段的主機都可以透過nfs來訪問我本地的/opt/www目錄
括號()裡面的表示選項,rw表示讀寫

生效配置:
exportfs -a 或者重啟服務

[root@cPen_A opt]# cd /opt
[root@cPen_A opt]# mkdir www
[root@cPen_A opt]# cd www
[root@cPen_A www]# vim index.html
this is test nfs
[root@cPen_A www]# pwd
/opt/www

#注:/opt	放額外的軟體包的目錄
--------------------------------------------------------------------------------------------
3、啟動nfs服務
[root@cPen_A www]# service nfs start		#注:啟動服務
[root@cPen_A www]# showmount -e			#注:檢測是否可以連接
Export list for cPen_A:
/opt/www 192.168.255.0/24
#注:centos8下 啟動 [root@cPen_B ~]# service nfs-server start
---------------------------------------------------------------
NFS的連接查看
可以在server端先自我測試一下是否可以連接。
命令:showmount [-ae] [hostname  | IP]
-a:顯示當前主機與客戶端的NFS連接共享的狀態
-e:顯示某台主機的/etc/exports所共享的目錄數據
---------------------------------------------------------------
4、在另一台機器上測試
出現返回 表示ok
[root@cPen_C ~]# showmount -e 192.168.255.28	#注:後面指定分析的機器的ip地址
Export list for 192.168.255.28:					#注:出現這種情況,表示可以連接 連通性沒有問題
/opt/www 192.168.255.0/24

5、掛載網路文件
在另外一台機器
[root@cPen_C ~]# mkdir /mnt2
[root@cPen_C ~]# mount -t nfs 192.168.255.28:/opt/www /mnt2		#注:掛載網路文件
[root@cPen_C ~]# df			#注:使用df命令看磁碟掛載情況(這是網路磁碟掛載)
192.168.255.28:/opt/www 17811456 2165760 15645696   13% /mnt2

[root@cPen_C ~]# cd /mnt2
[root@cPen_C mnt2]# ls
index.html
[root@cPen_C mnt2]# cat index.html 
this is test nfs
[root@cPen_C mnt2]# ls
index.html
[root@cPen_A ~]# cd /opt/www/					#注:服務端A主機 操作
[root@cPen_A www]# touch index2.html			#注:服務端操作
[root@cPen_C mnt2]# ls
index2.html  index.html
[root@cPen_C mnt2]# mkdir index2.html
mkdir: 無法創建目錄"index2.html": 權限不夠
#注:客戶機C沒有權限去操作伺服器A文件
#沒有權限的話 /etc/exports 設置 no_root_squash ,就可以操作了
no_root_squash 將遠端根使用者當成本地根使用者,即不壓制root
#注:讓伺服器將 遠端的root使用者 識別成 本地根使用者
#注:修改配置文件後,需要使用exportfs -a 生效配置;再重新掛載(先取消掛載,再重新掛載)

#示例:取消掛載
[root@cPen_C mnt2]# cd ..			#注:先退出mnt2目錄,否則報繁忙
[root@cPen_C /]# umount /mnt2		#注:然後取消掛載

#修改配置文件後,需要使用exportfs -a 生效
#重新掛載:
    先退出/mnt2目錄,然後執行:
    umount /mnt2
    再執行掛載

二. rpcbind 和 nfs#

啟動 nfs 之前,確保 rpcbind 服務已經啟動
nfs 啟動的時候,會向 rpcbind 服務註冊端口,會返回一個端口給 nfs 使用
可以使用
rpcinfo -p 命令 查看 nfs 端口是否已經註冊成功
rpcbind 就像房東,nfs 是租客
#注:nfs 自己不能起端口,rpcbind 為 nfs 註冊端口
#注:nfs 起來之前 要確保 rpcbind 起來
[root@cPen_A www]# rpcinfo -p # 注:rpcbind 為 nfs 起 2049 端口
100003 3 tcp 2049 nfs


三。實驗:nfs 和 nginx 搭配使用 負載均衡和文件共享#

A: 192.168.0.73 nfs 真實機
B: 192.168.0.79 代理機 + 真實機
C: 192.168.0.53 真實機

前提:
三台主機都安裝好 nginx,其中一台開啟 nfs 服務
在 A 機器上開啟了 nfs 服務,網站目錄存放在 /opt/www 下,B、C 可以掛載 A 的 /opt/www 目錄到本地
A 機器配置好 nfs 服務,開啟 nfs 服務,然後在 A、C 兩台上 執行:
[root@cPen_B ~]# mount -t nfs 192.168.0.73:/opt/www /opt/www
[root@cPen_C ~]# mount -t nfs 192.168.0.73:/opt/www /opt/www

B機器變成代理機
第1步:把8080端口起來
修改A、B、C三台主機nginx的配置,啟動8080端口,綁定域名www.sc.com
#注:配置文件目錄:/etc/nginx
#注:進入 /etc/nginx/conf.d目錄下  創建 sc.conf
輸入以下內容
[root@cPen_A ~]# cd /etc/nginx/
[root@cPen_A nginx]# cd conf.d/
[root@cPen_A conf.d]# vim sc.conf		#注:後綴必須是 .conf,自動加載讀取  該配置文件
server {
    listen  8080;						#注:監聽8080端口
    server_name  www.sc.com;			#注:指定域名

    root /opt/www;						#注:指定網站家目錄,默認去家目錄下找index.html

}
[root@cPen_A conf.d]# nginx -t			#注:進行語法檢測
[root@cPen_A conf.d]# nginx -s reload		#注:生效配置
[root@cPen_A conf.d]# lsof -i:8080		#注:8080端口起來了
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   3193  root    6u  IPv4  50354      0t0  TCP *:webcache (LISTEN)
nginx   3194 nginx    6u  IPv4  50354      0t0  TCP *:webcache (LISTEN)
nginx   3195 nginx    6u  IPv4  50354      0t0  TCP *:webcache (LISTEN)

使用lsof -i:8080	端口是否啟動
使用curl -H "Host: www.sc.com" http://192.168.0.73:8080	 查看返回的內容是否一致
訪問192.168.0.68的8080端口,以www.sc.com域名去訪問
[root@cPen_A ~]# curl -H "Host: www.sc.com" http://192.168.0.73:8080
this is test nfs
#注:三台機器訪問返回的內容相同  都是 this is test nfs

--------------------------------------------------------------------------------------------
#注:在B機器上添加反向代理
對B機器進行負載均衡:把請求轉發到其他機器(代理轉發)(高可用)
[root@cPen_B conf.d]# vim sc.conf 
server {
    listen  8080;
    server_name  www.sc.com;	

    root /opt/www;

}

upstream sc {						#注:代理轉發,為upstream取名為sc
    server 192.168.0.73:8080;
    server 192.168.0.53:8080;
    server 192.168.0.79:8080;
}
#注:虛擬主機,讓不同的域名做不同的事情
server {							
    listen  80;
    server_name  www.sc.com;			

    root /opt/www;

    location / {						#注:訪問網站的/目錄,都会轉發到sc
        proxy_set_header Host $host;	#注:頭部信息,不加的話  可能變成B的主機地址
		#注:讓客戶端發過來的頭部host字段信息 和轉發包的頭部host字段保持一致
        proxy_pass http://sc;			#注:設置後端代理伺服器
    }
}

server {
    listen  80;
    server_name  www.sc1.com;

    root /usr/share/www;

    location / {
        proxy_set_header Host $host;
        proxy_pass http://sc;
    }
}

#注:輸出www.sc.com時,請求時,會有數據包存放host頭部信息:www.sc.com ,80端口收到這個包之後,知道是要轉發到8080端口。B機器幫你請求A、B、C的8080端口發起請求
#注:客戶機發起請求 www.sc.com,host頭部信息www.sc.com(請求包里的,客戶機攜帶的頭部信息),B主機交給相應的server去處理,請求B主機的80端口去處理,轉發到8080端口,B主機幫你去請求,B收到包的時候,交給server去處理。這時候A發起的這個包的頭部信息 可能就是B的ip地址了(不是www.sc.com了),8080端口收到請求後,沒有B的ip地址的server_name,會轉發失敗。所以 proxy_set_header Host $host 讓它們的頭部信息保持一致

--------------------------------------------------------------------------------------------
#生效配置
[root@cPen_B conf.d]# nginx -t
[root@cPen_B conf.d]# nginx -s reload

--------------------------------------------------------------------------------------------
#然後多次訪問80端口,查看返回內容是否一致,以及查看每台機器的/var/log/nginx/access.log日誌是否有新的請求過來 tail -f  /var/log/nginx/access.log

[root@cPen_B conf.d]# curl -H "Host: www.sc.com" http://192.168.0.79
this is test nfs
#注:代理轉發,訪問80端口,轉發到8080端口,分發到3台機器去執行了(負載均衡)

[root@cPen_C conf.d]# tail -f  /var/log/nginx/access.log 	#注:C主機下 ,B主機幫請求
192.168.0.79 - - [01/Dec/2020:17:21:54 +0800] "GET / HTTP/1.0" 200 17 "-" "curl/7.61.1" "-"
#注:平均打到3台,默認做輪轉

image-20221011191610524

#注:可以使用 killall nginx 全部殺死

#注:404 沒找到,403 forbid 禁止

#注:A、B 換成 B、A
nginx 代理機 + 真實機

A

nginx 真實機

B nfs

nginx 真實機

C

客戶端訪問 www.sc.com 訪問 A nginx 代理機的 80 端口(代理的意思是轉發)
A 機器 返回本機的 8080 去處理,或者 B 機器的 8080 去處理,或者 C 機器的 8080 去處理
負載均衡:2 萬人訪問 A 機器 80 端口,80 端口不會去處理請求,只是做代理轉發,交給本機 8080 處理,或者 B 機器的 8080 處理,C 機器的 8080 處理。A、B、C 三台返回的頁面網站 都要保持一致
把 B 機器 /opt/www 目錄 挂載到 A 上和 C 上 (保存文件的一致性,改的都是 B 機器的 nfs)

image-20221011191803355

#注:網路問題

橋接模式 VMnet0 同網段

NAT 模式 VMnet8 同網段

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。