集群和分布式
集群(Cluster),解決某個問題將多臺計算機組合形成的系統群。
常見的集群類型:
- 負載均衡(LoadBalancing,簡稱LB):由多個相同配置的主機組成,每個主機經過調度承擔部分訪問,防止單點故障提高系統可用性。常用的負載均衡實現方式由Nginx,LVS等。
- 高可用(High Availiablity,簡稱HA): ,是指系統或服務在規定時間內持續正常運行的能力,核心目標是最大限度減少停機時間,確保業務或功能在面對故障(如硬件損壞、軟件錯誤、網絡中斷等)時仍能穩定提供服務。
? ? ? ? MTBF:Mean Time Between Failure 平均無故障時間,正常時間 MTTR:Mean Time To Restoration( repair)平均恢復前時間,故障時間
? ? ? ? 可用性等級計算方式:A=MTBF/(MTBF+MTTR),計算結果越接近“1”高可用性越高
- 高性能計算(High-performance computing,HPC):高性能計算,國家戰略資源
負載均衡與高可用的關系:
負載均衡是實現高可用的核心手段之一,高可用的目標是 “不中斷服務”,而負載均衡通過分散流量和自動剔除故障節點,直接避免了 “單臺服務器故障導致整體崩潰” 的風險。
分布式
一個業務被拆成多個子業務,或者本身就是不同的業務,部署在多臺服務器上。分布式 中,每一臺服務器實現的功能是有差別的,數據和代碼也是不一樣的,分布式每臺服務器功能加起 來,才是完整的業務
分布式常見應用:
- 分布式應用-服務按照功能拆分,使用微服務
- 分布式靜態資源--靜態資源放在不同的存儲集群上
- 分布式數據和存儲--使用key-value緩存系統
- 分布式計算--對特殊業務使用分布式計算,比如Hadoop集群
分布式圖解
集群和分布式的區別:
分布式是以縮短單個任務的執行時間來提升效率的,而集群則是通過提高單位時間內執行的任務數來提升效率。
LVS介紹
LVS概念
LVS(Linux virtual server):是一種負載調度器,是負載均衡的一種實現方式。
- VS:虛擬服務器,LVS調度器
- RS:內網真實服務器,提供服務
- CIP:客戶端IP
- VIP:LVS的外網IP
- DIP:LVS的內網IP
- RIP:RS的IP
LVS集群結構圖
LVS的集群類型
集群類型 | 說明 |
---|---|
nat | 修改請求報文的目標IP,多目標IP的DNAT |
dr | 操縱封裝新的MAC地址 |
tun | 在原請求IP報文之外添加一個IP首部 |
fullnat | 修改請求報文的源和目標IP |
tun與fullnat只做了解并沒有實驗配置提及 ,常用的還是DR與NAT,默認為DR。
LVS的調度算法
靜態方法:僅根據算法本身進行調度,不考慮RS的負載情況。
動態方法:主要根據每RS當前的負載狀態及調度算法進行調度Overhead=value較小的RS將被調度。
靜態調度算法 | 作用 |
RR(roundrobin) | 輪詢調度RS,配置有差異不推薦 |
WRR(Weighted RR) | 根據權重來進行輪詢調度,配置高的加權調度被調度次數多 |
SH(Source Hashing) | 基于源地址哈希,將來自同一源地址的請求調度到同一服務器,可實現會話粘性 |
DH(Destination Hashing) | 基于目標地址哈希,將發往同一目標地址的請求調度到同一服務器 |
動態調度算法 | 作用 |
---|---|
LC(least connections) | 調度到當前連接數最少的服務器,使各服務器負載更均衡 |
WLC(Weighted LC) | 帶權重的最少連接調度,綜合考慮服務器權重和當前連接數進行調度 |
SED(:Shortest Expection Delay) | 計算服務器的預期延遲(考慮權重和當前連接數),調度到預期延遲最小的服務器 |
NQ(Never Queue) | 第一輪均勻分配,后續SED |
LBLC(Locality-Based LC) | 動態的 DH 算法,基于局部性的最少連接調度,兼顧目標地址哈希和最少連接 |
LBLACR(LBLC with Replication) | 帶復制功能的 LBLC,通過服務器復制進一步優化負載均衡和故障容錯 |
在4.15版本內核以后新增調度算法
1.FO(Weighted Fai Over)調度算法:常用作灰度發布。
算法原理:
遍歷虛擬服務所關聯的真實服務器鏈表,找到還未過載的且權重最高的真實服務器,進行調度。當服務器承接大量連接,可以對此服務器進行過載標記,之后 VS 調度器就不會把連接調度到有過載標記的主機中。
2.OVF(Overflow-connection)調度算法:適用于服務器性能有差異且流量波動較大的場景,如電商。
算法原理:
基于真實服務器的活動連接數量和權重值實現。遍歷虛擬服務相關聯的真實服務器鏈表,找到權重值最高的可用真實服務器。一個可用的真實服務器需要同時滿足以下條件:
- 未過載;
- 真實服務器當前的活動連接數量小于其權重值;
- 其權重值不為零 。
將新連接調度到權重值最高的真實服務器,直到其活動連接數量超過權重值,之后調度到下一個權重值最高的真實服務器。
實驗
安裝LVS
[root@client ~]# dnf install ipvsadm -y
ipvsadm命令參數
核心功能:
-
集群服務器管理:增、刪、改
-
集群服務的RS管理:增、刪、改
-
查看
1.管理集群服務中的增刪改
#命令格式
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]-A #添加-E #修改-t #tcp服務-u #udp服務-s #指點調度算法,默認為WLC,rr為輪詢,wrr為權重輪詢-p #設置吃就連接超時,將同一個時間段將一個訪問請求調度給同一個RS-f #firewall mask 火墻標記,是一個數字-L #查看lvs策略 + n 不做解析ipvsadm -Ln #不做解析查看lvs策略
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr
[root@lvs ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 360
[root@lvs ~]# ipvsadm -A -f 66 -s rr
[root@lvs ~]# ipvsadm -D -t 172.25.254.100:80
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -L #查看lvs調度策略
[root@lvs ~]# ipvsadm -Ln #n不做解析的查看調度策略
2.管理集群服務中的RS增刪改
#命令格式
ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]-a #添加-e #更改-t #tcp / -u #udp-f #火墻標簽-r #指定RS地址-g #直連路由模式-i #ipip隧道模式-m #nat模式-w #設定權重-C #清空lvs策略-L #查看lvs策略 + n 不做解析ipvsadm -Ln #不做解析查看lvs策略--rate #輸出速率信息ipvsadm -Ln --rate-Z #清空計數器
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.44.10 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.44.20 -g
[root@lvs ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.44.20 -m -w 2
[root@lvs ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.44.30 -i -w 2
[root@lvs ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30
3.lvs調度策略的備份與恢復
#備份與恢復
[root@lvs ~]# ipvsadm-save -n > /mnt/ipvsadm.rule 備份規則策略到文件中
[root@lvs ~]# ipvsadm-restore < /mnt/ipvsadm.rule 重載規則策略
4.lvs調度策略的開機啟動
由于缺少備份到/etc/sysconfig/ipvsadm規則調度文件,所以不能開機啟動。
#需要先把調度策略導入生成調度規則文件,具有調度規則文件后才能開啟服務進程
[root@lvs ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# systemctl enable --now ipvsadm
#開機啟動后就會自動重載保存在調度規則的文件
LVS-NAT模式
環境
主機名 | IP |
---|---|
客戶端(nat) | 172.25.254.70/24 |
LVS服務器(雙網卡,nat與僅主機) | 172.25.254.100/24 192.168.5.10/24 |
web服務器1(僅主機) | 192.168.5.100/24 |
web服務器2(僅主機) | 192.168.5.200/24 |
客戶端:
? ? ? ? 配好IP即可
LVS服務器:
? ? ? ? 配置好IP和內核路由以及LVS規則
?開啟內核路由:
? 編寫LVS規則:
? 查看LVS規則:
web服務器(兩臺web服務器類似):
? ? ? ? 安裝httpd,開啟服務、編寫默認發布文件
開啟服務:
編寫默認發布文件:
記得關閉火墻(便于測試)
測試(用客戶端連續訪問172.25.254.100多次):
服務器1、2輪流應答客戶端
LVS-DR模式
環境
主機名 | IP |
---|---|
客戶端(nat) | e0:172.25.254.111/24 |
路由器(雙網卡) | e0:172.25.254.100/24 e1:192.168.44.100/24 |
調度器(僅主機) | e0:192.168.44.200/24 e1:192.168.44.220/24 |
服務器1(僅主機) | e0:192.168.44.10/24 lo:192.168.44.220/32 |
服務器2(僅主機) | e0:192.168.5.100 lo:192.168.5.250(vip) |
客戶端:
? ? ? ? 配好IP即可
路由器配置:
? ? ? ? ?配置IP 并開啟內核路由以及地址偽裝
#開啟內核路由
vim /etc/sysctl.confnet.ipv4.ip_forward = 1#開啟地址偽裝
firewall-cmd --permanent --add-masquerade#開啟iptab地址轉換亦可
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.5.10#地址偽裝和iptable地址轉換選一種即可
LVS主機配置:?
????????配置ip?
配置LVS規則:
ipvsadm -A -t 192.168.5.250:80 -s rr
ipvsadm -a -t 192.168.5.250:80 -r 192.168.5.100:80 -g
ipvsadm -a -t 192.168.5.250:80 -r 192.168.5.200:80 -g
?查看LVS規則:
服務器(兩臺服務器類似)
? ? ? ? 配置ip
?下載、啟用、配置httpd
?????????????????開啟服務:
???編寫默認發布文件:
記得關閉火墻(便于測試)
關閉服務器1與服務器2響應arp:
測試:
服務器1、2輪流應答客戶端
lvs會話保持
解決問題:客戶需要提交響應信息給服務器,如果單 純的進行調度會導致客戶填寫的表單丟失
解決方案:
在進行調度時,不管用什么算法,只要相同源過來的數據包我們就把他的訪問記錄在內存中,也就是把這個源的主機調度到了那個RS上,設置持久連接超時。
#跟蹤鏈接
[root@lsv-dr ~]# ipvsadm -lnc
IPVS connection entries
pro expire state source virtual destination
TCP 01:56 FIN_WAIT 192.168.44.100:48534 192.168.44.220:80 192.168.44.10:80
TCP 01:55 FIN_WAIT 192.168.44.100:48518 192.168.44.220:80 192.168.44.20:80
#expire為長鏈接超時時間,在鏈接未超時再次訪問不用經過三次握手,apache的一個長連接默認為兩分鐘#設置持久超時時間來將同一個時間段將一個訪問請求調度給同一個RS
[root@lsv-dr ~]# ipvsadm -E -t 192.168.44.220:80 -s rr -p 1 #-p 1默認不是1s而是1min
[root@lsv-dr ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.44.220:80 rr persistent 1 #持久連接超時時間默認為360s-> 192.168.44.10:80 Route 1 0 0-> 192.168.44.20:80 Route 1 0 0
只有當最后一個FIN WATT結束,ASSURED才會倒計時最后一次apeach長連接超時時間默認為2分鐘并且只有當最后一個ASSURED倒數結束下一個訪問VIP的客戶才會被調度到另一個RS上 ?