日誌輪轉:
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台,默認做輪轉
#注:可以使用 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)
#注:網路問題
橋接模式 VMnet0 同網段
NAT 模式 VMnet8 同網段