一.集群和分布式:
集群:同一個業務系統,部署在多臺服務器上,集群中,每一臺服務器實現的功能沒有差別,數據和代碼都是一樣的
?
分布式:一個業務被拆成多個子業務,或者本身就是不同的業務,部署在多臺服務器上。分布式中,每一臺服務器實現的功能是有差別的,數據和代碼也是不一樣的,分布式每臺服務器功能加起來,才是完整的業務
分布式是以縮短單個任務的執行時間來提升效率的,而集群則是通過提高單位時間內執行的任務數來提升效率,
對于大型網站,訪問用戶很多,實現一個群集,在前面部署一個負載均衡服務器,后面幾臺服務器完成同一業務。如果有用戶進行相應業務訪問時,負載均衡器根據后端哪臺服務器的負載情況,決定由給哪一臺去完成響應,并且臺服務器垮了,其它的服務器可以頂上來。分布式的每一個節點,都完成不同的業務,如果一個節點垮了,那這個業務可能就會失敗
二.LVS 介紹
定義:
LVS 是基于 Linux 內核的四層(傳輸層)負載均衡解決方案,由章文嵩博士開發,用于構建高性能、高可用的服務器集群。
核心組件:
-
Director(調度器):接收客戶端請求并分發到后端 Real Server。
-
Real Server(真實服務器):實際處理請求的后端服務器集群。
-
VS:Virtual Server: 虛擬服務器
-
VIP(虛擬 IP):對外提供服務的虛擬 IP 地址。
-
RIP(真實 IP):后端服務器的真實 IP 地址。
-
CIP:Client IP
VS:負責調度
RS:負責真正的服務
訪問流程:CIP VIP == DIP RIP
官網:The Linux Virtual Server Project - Linux Server Cluster for Load Balancinghttp://www.linuxvirtualserver.org/?lvs集群體系結構
?LVS的三種工作模式
NAT
Ivs-nat:
本質是多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發
RIP和DIP應在同一個IP網絡,且應使用私網地址;RS的網關要指向DIP
請求報文和響應報文都必須經由Director轉發,Director易于成為系統瓶頸支持端口映射,可修改請求報文的目標PORT
VS必須是Linux系統,RS可以是任意OS系統
?NAT模式的工作流程
1.客戶端發送訪問請求,請求數據包中含有請求來源(cip),訪問目標地址(VIP)訪問目標端口(9000port)
2.VS服務器接收到訪問請求做DNAT把請求數據包中的目的地由VIP換成RS的RIP和相應端口
3.RS1相應請求,發送響應數據包,包中的相應保溫為數據來源(RIP1)響應目標(CIP)相應端口(9000port)
4.VS服務器接收到響應數據包,改變包中的數據來源(RIP1-->VIP),響應目標端口(9000-->80)
5.VS服務器把修改過報文的響應數據包回傳給客戶端
6.lvs的NAT模式接收和返回客戶端數據包時都要經過lvs的調度機,所以lvs的調度機容易阻塞
圖解
客戶請求到達vip后進入PREROUTING,在沒有ipvs的時候因該進入本機INPUT,當IPVS存在后訪問請求在通過PREROUTING后被ipvs結果并作nat轉發
因為ipvs的作用點是在PREROUTING和INPUT鏈之間,所以如果在prerouting中設定規則會干擾ipvs的工作。所以在做lvs時要把iptables的火墻策略全清理掉。
DR
TUN
模式 | 原理 | 優點 | 缺點 |
NAT | 修改數據包的IP/端口 | 支持端口映射,配置簡單 | Director 易成瓶頸 |
DR(Direct Routing) | 僅修改 MAC 地址,不修改 IP | 性能極高(90% 吞吐量) | 要求 Real Server 與 Director 同局域網 |
TUN(IP 隧道) | 通過 IP 隧道封裝數據包 | 可跨機房部署 | 配置復雜,隧道開銷高 |
?關鍵區別:
-
NAT/FullNAT:請求和響應均經過Director。
-
DR/TUN:僅請求報文經過Director,響應報文由RS直接返回客戶端。
vs-dr:通過封裝新的MAC首部實現,通過MAC網絡轉發
lvs-tun:通過在原IP報文外封裝新IP頭實現轉發,支持遠距離通信
lvs-nat與lvs-fullnat:請求和響應報文都經由Director
lvs-nat:RIP的網關要指向DIP
LVS調度算法
LVS支持多種調度算法,分為靜態和動態兩類:
1. 靜態算法(不考慮RS負載)
-
RR(輪詢):均分請求到各RS。? ——適用場景:Real Server 性能均等
-
WRR(加權輪詢):根據RS性能分配權重。 ——適用場景:Real Server 配置不均
-
SH(源地址哈希):同一客戶端固定訪問同一RS(會話保持)。 ——適用場景:需要會話保持的應用
2. 動態算法(基于RS負載狀態)
-
LC(最少連接):優先選擇連接數最少的RS。 ——適用場景:長連接服務(如數據庫)
-
WLC(加權最少連接):默認算法,結合權重和連接數。 ——適用場景:Real Server 性能均等,但需動態平衡 “連接數”,避免節點過載。
-
SED/NQ:優化高權重節點的初始連接分配。 ——適用場景:Real Server 性能均等,但需?“優先讓高權重節點承接初始連接”(哪怕連接數稍多 ),或需 “初始流量傾斜”。
??
lvs命令介紹
lvs軟件相關信息
程序包:ipvsadm
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
規則保存工具:/usr/sbin/ipvsadm-save
規則重載工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
ipvs調度規則文件:/etc/sysconfig/ipvsadm
ipvsadm命令
管理集群服務
ipvsadm -A|E -t(tcp)|u(udp)|f(防護墻標簽) \
service-address(集群地址) \
[-s scheduler(調度算法)] \
[-p [timeout]] \
[-M netmask] \
[--pepersistence_engine] \
[-b sched-flags]
?ipvsadm -D -t|u|f service-address 刪除
ipvsadm –C 清空
ipvsadm –R 重載
ipvsadm -S [-n] 保存
?管理集群中的real server
ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m](工作模式) [-w weight](權重)
ipvsadm -d -t|u|f service-address -r server-address? 刪除RS
ipvsadm -L|l [options]? ? ? ? ? ? ? ? ? 查看rs
ipvsadm -Z [-t|u|f service-address]? ? ? ? 清楚計數器
lvs集群中的增刪改
1.管理集群服務中的增刪改
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-A #添加
-E #修改
-t #tcp服務
-u #udp服務
-s #指定調度算法,默認為WLC
-p #設置持久連接超時,持久連接可以理解為在同一個時間段同一個來源的請求調度到同一Realserver-f #firewall mask 火墻標記,是一個數字
形式?
#增加
[root@DR-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@DR-server ~]# ipvsadm -A -f 66 -p 3000
#修改
[root@DR-server ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000
#刪除
[root@DR-server ~]# ipvsadm -D -t 172.25.254.100:80[root@DR-server ~]# ipvsadm -D -f 66
2.管理集群中RealServer的曾增刪改
-a? ? ? ? ? ? ? ? ? ? ?#添加realserver
-e? ? ? ? ? ? ? ? ? ? ?#更改realserver-t #tcp協議
-u? ? ? ? ? ? ? ? ? ? ? #udp協議
-f? ? ? ? ? ? ? ? ? ? ? ?#火墻 標簽
-r? ? ? ? ? ? ? ? ? ? ? ?#realserver地址
-g? ? ? ? ? ? ? ? ? ? ? #直連路由模式
-i? ? ? ? ? ? ? ? ? ? ? ?#ipip隧道模式
-m? ? ? ? ? ? ? ? ? ? #nat模式
-w? ? ? ? ? ? ? ? ? ? #設定權重
-Z? ? ? ? ? ? ? ? ? ? ?#清空計數器
-C? ? ? ? ? ? ? ? ? ? #清空lvs策略
-L? ? ? ? ? ? ? ? ? ? ?#查看lvs策略
-n? ? ? ? ? ? ? ? ? ?#不做解析
--rate? ? ? ? ? ? ? ?#輸出速率信息
形式
ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]
?#添加
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.30 -m
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.40 -m -w 2
#更改
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -m -w 1
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -i -w 1
#刪除
[root@DR-server ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30
[root@DR-server ~]# ipvsadm -Ln
[root@DR-server ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port ? ? ? ? ? ? ? ? CPS ? InPPS ? OutPPS ? InBPS ? OutBPS
? ?-> RemoteAddress:Port
TCP 172.25.254.100:80? ? ? ? ? ? ? ? ??0? ? ? ? ? 0? ? ? ? ? ? ? ? 0? ? ? ? ? ?0? ? ? ? ? ? 0? ?
? ?-> 192.168.0.30:80? ? ? ? ? ? ? ? ? ? ? ?0? ? ? ? ??0? ? ? ? ? ? ? ? 0? ? ? ? ? ?0? ? ? ? ? ??0
? ?-> 192.168.0.40:80? ? ? ? ? ? ? ? ? ? ? ? 0? ? ? ?? 0? ? ? ? ? ? ? ? 0? ? ? ? ?? 0? ? ? ? ? ? 0
[root@DR-server ~]# ipvsadm -C? ?——清空所有策略[root@DR-server ~]# ipvsadm -Z -t 172.25.254.20:80
[root@DR-server ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port ? ? ? ? ? ? ? ? CPS ? InPPS ? OutPPS ? InBPS ? OutBPS
? ?-> RemoteAddress:Port
TCP 172.25.254.20:80 ? ? ? ? ? ? ? ? ? 0? ? ? ? ? ? 0? ? ? ? ? ? ?0? ? ? ? ? ? 0? ? ? ? ? ? ?0
? -> 192.168.0.30:80? ? ? ? ? ? ? ? ? ? ? ?0? ? ? ? ? ? 0? ? ? ? ? ? ? 0? ? ? ? ? ?0? ? ? ? ? ? ?0?
? ?-> 192.168.0.40:80? ? ? ? ? ? ? ? ? ? ? 0? ? ? ? ? ? 0? ? ? ? ? ? ? ?0? ? ? ??? 0? ? ? ? ? ? ?0
?
?
?
NAT模式集群實驗:
實驗環境
主機名 | IP | VIP | 角色 |
lvs | 192.168.0.100 | 172.25.254.100 | 調度器(VS) |
RS1 | 192.168.0.10,GW192.168.0.100 | null | 真實服務器(RS) |
RS2 | 192.168.0.20,GW192.168.0.100 | null | 真實服務器(RS) |
client | 172.25.254.111 | 測試機 |
注:
此實驗要關閉火墻然后網頁里要寫內容
systemctl disable --now firewalld.service
echo 20 > /var/www/html/index.html
實驗開始:
1.在lvs中啟用內核路由功能
]# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf]# sysctl --system
2.在node1中安裝ipvsadm
]# yum install ipvsadm -y
?3.在node1中添加調度策略
# ipvsadm -A -t 172.25.254.100:80 -s rr
]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
4.查看策略
ipvsadm -Ln
?5.保存策略
ipvsadm -Sn
?
?6.刪除所有策略
ipvsadm -C
?7.重新加載策略
]# ipvsadm -R < /etc/sysconfig/ipvsadm-config
]# ipvsadm -Ln
?8.以上操作均為臨時,如果想開機啟動,就得設置
]# systemctl enable --now ipvsadm.service
?9.測試:
for N in {1..6};do curl 172.25.254.100;done
?