Linux叢集儲存——day2——叢集LB負載均衡 LVS/NAT、LVS/DR 模式
叢集:
叢集 目的: 提高效能、降低成本、提高可擴充套件性、增強可靠性
HPC | 高效能運算叢集 | 反覆進行一個計算,一般用於科研等需要精算的領域 |
LB | 負載均衡叢集 | 多臺機器提供一個服務,一個訪問可以給後面多個伺服器中任意一個,實現平衡負載 用 LVS、HAproxy、nginx 等軟體實現 |
HA | 高可用叢集 | 做備份,主伺服器出問題後,備用伺服器將會頂替上 用 Keepalived 等軟體實現 |
ext4/xfs 本地檔案系統
只檢視本機的對磁碟的寫操作,不會檢視其他裝置對磁碟的操作
gtf 全域性檔案系統
需要額外操作,可以檢視其他裝置的磁碟操作
iscsi和nfs的區別
iscsi 適合HA(高可用叢集),不適合LB(負載均衡叢集)
而適合做LB的,是nfs共享
主要原因是:iscsi共享的磁碟一般都是格式化為ext4或者xfs等本地檔案型別,致使多個客戶端掛載後,進行新增或者修改檔案,客戶端之間沒有關聯,如果要進行同步需要解除掛載
而nfs可以實時同步各個客戶端建立修改的的所有內容,可以理解為每個客戶端都是以nfsnobody的身份遠端服務端,然後對共享的資料夾進行操作
特例問題:(iscsi使用的是正常的本地檔案系統格式化的)
1. 如果對同一個檔案進行操作,會出現什麼情況
iscis: 每個伺服器修改的檔案互相不影響,也是說,C1客戶端修改了w檔案,C2客戶端的w檔案並不會有改動,那麼也就說C1和C2同時修改w檔案,兩者沒有任何衝突,可以理解為修改的是兩個不同的檔案
NFS: 如果同時修改,先進入文件的沒有問題,後進入文件的客戶端會vim出現一個提示介面,告訴你該檔案正在被改動
2. 對於iscsi使用相同的iqn和不同的iqn都可以實現不會有影響
3. 對於iscsi,如果想實現檔案同步,只需要 解除掛載、登出iscsi,再重新登陸掛載 即可,其資料是覆蓋的,不過可能出現bug,建議登出後過一點時間再登陸,建議不要這麼操作。
nfs共享目錄
具體檢視我寫的關於nfs服務的blog
不過還是要強調一個點,如果想製作支援客戶端讀寫操作的nfs共享,不單單需要在配置檔案中寫上rw
而且必須給目錄賦權,客戶端通過nfs對共享目錄操作的時候,使用服務端的使用者是nfsnobody
所以我們可以用: setfacl -m -u:nfsnobody:rwx 共享的目錄
Linux伺服器的不同網段通訊
1. 開啟伺服器的路由轉發功能
sysctl -a 檢視所有核心設定的資訊
修改核心配置檔案/etc/sysctl.conf
net.ipv4.ip_forward = 1
然後用命令 sysctl -p ,讓核心讀取配置檔案並且顯示出來
2. 閘道器設定
檢視裝置的預設閘道器 route -n
臨時配置閘道器: route add default gw 閘道器裝置IP
刪除閘道器: route del default gw 閘道器裝置IP
永久修改閘道器資訊,修改配置檔案
網路間通訊,同網段在網路中可以直接通訊,不同網段要經過閘道器才可以連通,如果要相互通訊需要兩個裝置都設定好閘道器,具體網路知識參考我關於網路的總結
負載均衡 LB 的常用術語 | ||
Director Server | 排程伺服器,分發伺服器 | 連線客戶端和真實伺服器,按照配置將請求分發給多個伺服器 |
Real Server | 真實伺服器 | 提供相應服務 |
VIP | 虛擬IP地址 | 配置子排程伺服器的一個網絡卡上的一個IP,用於和公網的客戶端裝置連線的網絡卡,客戶端訪問的IP |
RIP | 真實IP地址 | 真實伺服器的內網IP地址 |
DIP | 排程器IP | 配置子排程伺服器的一個網絡卡上的一個IP,用於和內網的真實伺服器,真實伺服器連線的IP |
LB的排程演算法: | ||
rr | 輪詢(Round Robin) | 將請求平均分發到每個真實伺服器中 |
wrr | 加權輪詢(Weighted Round Robin) | 將請求按照權值的多少進行分發,即一個權值為3,一個權值為1,分發的時候4個請求,就會一個分發到3個,一個分發到1個 |
lc | 最少連線(Least Connections) | |
wlc | 加權最少連線(Weighted Least Connections) |
LB的工作模式:
NAT:通過網路的地址轉換技術來實現,LVS伺服器同時完成路由功能,所有資料的傳遞都是經過LVS
主要用於: 伺服器的ip都是私網地址,LVS伺服器有外網IP和私網IP
弊端: LVS伺服器壓力太大,其效能直接決定了整個服務的效能,一旦LVS伺服器出現故障全部服務全部崩潰
優點: 只需要一個公網IP,適用於小規模叢集
客戶端發出請求
客戶端 ---外網---> LVS分發伺服器(具有路由功能) ---內網---> 伺服器 ---內網---> 後端儲存裝置
服務端響應
客戶端 <---外網--- LVS分發伺服器(具有路由功能) <---內網--- 伺服器 <---內網--- 後端儲存裝置
DR:通過路由技術實現釋出,返回資料的時候不經過LVS伺服器,在請求後客戶端和服務端建立1對1連線,進行資料傳遞(常用)
主要用於: 伺服器的ip都有一個公網地址 ,LVS也有公網IP,這時候所有裝置都能直接連線外網
優點: 綜合性能高,可拓展性強,LVS伺服器的壓力也不會太大
不足: 每個伺服器都需要一個公網IP,費用較高
客戶端發出請求
客戶端 ---外網---> 路由 ---內網---> LVS分發伺服器(不需要路由功能) ---內網---> 伺服器 ---內網---> 後端儲存裝置
服務端響應
客戶端 <---外網--- 路由 <---內網--- 伺服器 <---內網--- 後端儲存裝置
TUN:通過隧道實現(較少),
主要用於:分發伺服器和真實伺服器不在同一個網段
客戶端發出請求
客戶端 ---外網---> 路由 ---外網---> LVS分發伺服器(不需要路由功能) ---外網---> 路由 ---內網---> 伺服器 ---內網---> 後端儲存裝置
服務端響應
客戶端 <---外網--- 路由 <---內網--- 伺服器 <---內網--- 後端儲存裝置
建立配置LB叢集ipvsad命令:
裝包 yum install -y ipvsadm
配置檔案:/etc/sysconfig/ipvsadm-config
儲存檔案:/etc/sysconfig/ipvsadm
具體LVS配置使用命令ipvsadm
直接加在命令後面即可實現具體功能 | |
-Ln | 檢視ipvs的配置資訊 |
-Ln --stats | 檢視年ipvs伺服器的資料包分發情況 |
-Sn | 儲存所有配置 |
-C | 清除所有配置 |
-Z | 清除資料包分發資料的記錄資訊 |
用於指定該命令要實現什麼功能 | |
-A | 新增LVS服務 |
-D | 刪除LVS服務 |
-E | 修改LVS服務的設定資訊 |
-a | 新增真實伺服器 |
-d | 刪除虛擬伺服器 |
用於指定各個模組的具體作用 | ||
-t | 設定VIP | 後面跟著lvs服務中連線客戶端的虛擬ip和埠號 |
-s | 指定負載排程演算法 | 後面跟著各個演算法簡稱 |
-r | 指定真實伺服器的地址 | 後面跟著一個具體的伺服器的IP和埠號 |
-w | 設定許可權 | 後面跟著具體許可權值,不寫預設為1 |
-m | 使用NAT模式 | |
-g | 使用DR模式 | 不寫預設為DR模式 |
-i | 使用TUN模式 |
常用功能:
檢視當前配置資訊
ipvsadm -Ln
建立一個LVS服務(其中埠號是根據要實現的服務來填寫的,如80是http服務)
ipvsadm -A -t 連線客戶端的VIP:埠號 -s 演算法
ipvsadm -A -t 201.11.55.10:80 -s wrr
刪除一個LVS服務
ipvsadm -D -t 連線客戶端的VIP:埠號 -s 演算法
ipvsadm -D -t 201.11.55.10:80 -s wrr
修改一個LVS服務
ipvsadm -E -t 連線客戶端的VIP:埠號 -s 演算法
ipvsadm -E -t 201.11.55.10:80 -s lc
給LVS服務,新增真實提供服務的伺服器
ipvsadm -a -t 連線客戶端的VIP:埠號 -r 真實伺服器的RIP -具體工作模組 -w 權重
ipvsadm -a -t 201.11.55.10:80 -r 172.25.0.10:80 -m
ipvsadm -a -t 201.11.55.10:80 -r 172.25.0.11:80 -m -w 2
修改某個LVS服務下的某個真實提供服務的伺服器的配置
ipvsadm -e -t 連線客戶端的VIP:埠號 -r 真實伺服器的RIP -具體工作模組 -w 權重
ipvsadm -e -t 201.11.55.10:80 -r 172.25.0.10:80 -m -w 3
刪除某個LVS服務下的某個真實提供服務的伺服器的配置
ipvsadm -d -t 連線客戶端的VIP:埠號 -r 真實伺服器的RIP
ipvsadm -d -t 201.11.55.10:80 -r 172.25.0.11:80
儲存配置資訊(把資料儲存到儲存檔案中),重新啟動儲存配置
ipvsadm -Sn > /etc/sysconfig/ipvsadm
或者修改配置檔案/etc/sysconfig/ipvsadm-config,讓關閉ipvs的時候儲存
IPVS_SAVE_ON_STOP="yes"
實時檢視ipvs的請求分發的資料包的資訊( -n 後面的數值是每隔多少秒重新整理資料)
watch -n 1 ipvsadm -Ln --stats
不能啟動ipvsadm服務,檢視的時候這服務也是停止的,不過可以設定開機自啟,如果想開機自動開啟服務需要設定儲存後設置這命令 systemctl enable ipvsadm
LVS/NAT
1. 配置分發伺服器,建立叢集
建立一個LVS服務:ipvsadm -A -t VIP:80 -s rr
給LVS服務,新增真實提供服務的伺服器:ipvsadm -a -t VIP:80 -r RIP:80 -m
2. 在真實的web伺服器上配置web網頁的http服務
LVS/DR叢集構建
1. 配置分發伺服器,在其網絡卡上設定VIP
ifconfig eth0:1 預備設定的VIP
2. 建立叢集
使用 ipvsadm 命令建立 具體和NAT一樣,不過新增真實伺服器的時候要把 -m 改稱 -g
3. 修改真實伺服器的核心引數(只能用覆蓋的方法寫入,vim不可以修改,即使是root身份)
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
放入/etc/rc.local可以開機自動執行(需要賦予執行許可權,這檔案是一連結,原始檔是/etc/rc.d/rc.local,用ll檢視連結的時候許可權一定是777,不過這是假的,我們要檢視原始檔的許可權,不過賦權可以賦予給連結,實際賦予許可權給的是原始檔)
也可以修改核心配置檔案/etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
4. 在真實伺服器的lo網路迴路介面中繫結vip地址
ifconfig lo:1 預備設定的VIP/32
5. 執行web網頁的HTTP服務
DR的具體理論
DR模型最大的特點:一個是VIP是配在DIP網絡卡上的一個虛擬網絡卡,同樣VIP也會配在真實伺服器的lo環路網絡卡上的一個虛擬網絡卡上,另一個是客戶端、排程器、伺服器都是在同一個網段上的。就這兩個特點進行分析
第一個特點存在分析:
為什麼這麼設計呢,因為整個原理存在一個最大的問題:客戶端傳送請求的資料包頭是 CIP ----> VIP ,他接受資料包的時候其包頭必須是 VIP ----> CIP ,所以如果資料包發給排程器VIP就要配在排程器上,可是如果想返回資料的時候不經過排程器,伺服器也就要擁有VIP,一個網段裡面怎麼能有多個IP地址,這是最大的難題,這就需要修改核心引數來實現。
為了讓一個網段存在多個VIP,我們勢必要將幾個VIP設定在沒有網絡卡介面的lo網絡卡上,可是怎麼讓VIP在沒有介面的情況下通訊,這又是一個問題,而DR模型就是解決這兩個問題實現了LB負載均衡
其理論思路是:客戶端訪問VIP,然後排程器把資料包按照自身策略分發給某個伺服器,然後該伺服器的lo迴環網絡卡上的VIP的虛擬網絡卡,通過RIP所在網絡卡以VIP身份傳送資料包。
請求: CIP ----> VIP == DIP ---> RIP
返回資料: RIP代替VIP ----> CIP
那麼第一個問題出現了,怎麼才能讓RIP所在網絡卡幫助lo以VIP身份傳送,這就要修改核心引數arp_announce
第二個問題,怎麼讓一個網路中存在多個VIP,這就要修改核心引數arp_ignore
第二個特點存在分析:
為什麼必須全部都在一個網段裡面呢?在這裡有個網路方面的知識:兄弟網絡卡必須是同網段才算,而只有兄弟網絡卡才能相互幫助,進行代理收發等操作。所以上面的一個操作讓RIP所在網絡卡以VIP身份傳送資料包,必須要讓RIP和VIP是兄弟網。
在公司中,做LVS/DR有兩種情況,第一個大公司有錢,每個伺服器給每個IP都配置一個公網IP,這樣服務釋出出去就可以有用;第二個正常公司,在公網和內網連結的路由器上配置一個NAT(這是路由功能,不是LVS/NAT),讓VIP對映成一個公網再傳遞出去,這樣價效比高,不過比第一種還是效能差點。
核心引數
可以用命令檢視核心引數:sysctl -a
核心配置檔案 /etc/sysctl.conf 把檢視到的核心引數中想修改的部分修改完寫進去
用命令 sysctl -p 檢視在配置檔案中再加做的修改
網路方面的核心引數的名字一般是 net.ipv4.conf.………………
也可以修改/proc/sys/net/ipv4/的具體檔案的內容不過只能用echo,而且只是臨時的配置
arp_ignore 代表是否恢復ARP廣播 0 迴應雖有ARP廣播
1 只回應入站網咖的IP的廣播
arp_announce 0 網絡卡介面只以自己介面的IP傳送和接收包
2 網絡卡可以幫兄弟網絡卡收發資料包,也就是讓一個網絡卡介面可以以別的同網段的網絡卡的IP進行收發資料包