LVS

TestAL4193發表於2024-06-28

NAT 多目標的DNAT,四層,支援埠修改,請求報文和響應報文都要經過LVS
DR 二層,只修改MAC,不支援埠修改,效能好,LVS負載比小,LVS和RS並在同一網段,請求報文經過LVS,響應報文不經過LVS
TUNNEL 三層,新增一個新的IP頭,支援LVS和RS並在不在同一網段,支援埠修改,請求報文經過LVS,響應報文不經過LVS
FULLNAT 多目標的SNAT+DNAT,四層,支援埠修改,請求報文和響應報文都要經過LVS #經過LVS時ip和埠都要改為LVS,返回使用者同樣修改

10種排程演算法
** 靜態方法**
僅根據演算法本身進行排程
1、輪詢演算法RR:roundrobin,輪詢,較常用
2、加權輪詢演算法WRR:Weighted RR,較常用 #按需加權重和排程
3、源地址雜湊演算法SH:Source Hashing,實現session sticky,源IP地址hash;將來自於同一個IP地址的請求始終發往第一次挑中的RS,從而實現會話繫結
4、目標地址雜湊演算法DH:Destination Hashing;目標地址雜湊,第一次輪詢排程至RS,後續將發往同一個目標地址的請求始終轉發至第一次挑中的RS。
#RS存在快取,多個RS分別快取(處理業務不同),使用者按需去指定的快取,

動態方法 #對LVS需求高,需要LVS動態排程
主要根據每RS當前的負載狀態及排程演算法進行排程Overhead=value 較小的RS將被排程
activeconns活動連線 inactiveconns非活動連線
1、最少連線演算法LC:least connections 適用於長連線應用
#未考慮機器能力權重
Overhead=activeconns256+inactiveconns
2、加權最少連線演算法WLC:Weighted LC,預設排程方法,較常用
#加入權重,但初始都為0,會隨機分配,權重高沒法第一時間使用
Overhead=(activeconns
256+inactiveconns)/weight
3、最短期望延遲演算法SED:Shortest Expection Delay,初始連線高權重優先,只檢查活動連線,而不考慮非活動連線
#初始加1,高權重能第一時間使用,但可能權重高一直使用
Overhead=(activeconns+1)*256/weight
4、最少佇列演算法NQ:Never Queue,第一輪均勻分配,後續SED
5、基於區域性的最少連線演算法LBLC:Locality-Based LC,動態的DH演算法,使用場景:根據負載狀態實現
#類似目標地址雜湊演算法DH,根據快取的使用情況動態分配
正向代理,實現Web Cache等
6、帶複製的基於區域性的最少連線演算法LBLCR:LBLC with Replication,帶複製功能的LBLC,解決LBLC負載不均衡問題,從負載重的複製到負載輕的RS,,實現Web Cache等
#做到按照快取的高使用資源分配到其他快取,使用者去其他快取也能訪問到高使用的資源
核心版本 4.15 版本後新增排程演算法:FO和OVF
FO(Weighted Fail Over)排程演算法,在此FO演算法中,遍歷虛擬服務所關聯的真實伺服器連結串列,找到還未
過載(未設定IP_VS_DEST_F_OVERLOAD標誌)的且權重最高的真實伺服器,進行排程,屬於靜態演算法
OVF(Overflow-connection)排程演算法,基於真實伺服器的活動連線數量和權重值實現。將新連線排程
到權重值最高的真實伺服器,直到其活動連線數量超過權重值,之後排程到下一個權重值最高的真實服
務器,在此OVF演算法中,遍歷虛擬服務相關聯的真實伺服器連結串列,找到權重值最高的可用真實伺服器。,屬
於動態演算法
一個可用的真實伺服器需要同時滿足以下條件:
未過載(未設定IP_VS_DEST_F_OVERLOAD標誌)
真實伺服器當前的活動連線數量小於其權重值
其權重值不為零

ipvsadm -Ln #檢視規則
ipvsadm -A -t 192.168.1.140:80 -s rr
-A 新增叢集 -t tcp -s 演算法
ipvsadm -a -t 192.168.1.140:80 -r 192.168.1.41:80 -m
ipvsad-save -n > ipvs.rules #儲存規則

service ipvsadm save 儲存主機的規則 存至/etc/ipvsadm.ruules

vim /etc/default/ipvsadm
AUTO="true" #開機自啟

ipvsadm-restor < ipvs.rules #還原規則
nmcli connection reload

LVS NAT模式:
tcpdump -i eth0 -nn port #檢視tcp網路狀況

系統:
LVS :ubntu
RS、cip:rockey8

LVS:
eth0:192.168.1.140
eth1:10.1.1.33

ipvsadm -A -t 10.1.1.33:80 -s rr
ipvsadm -a -t 10.1.1.33:80 -r  -m 192.168.1.130
ipvsadm -a -t 10.1.1.33:80 -r  -m 192.168.1.131

vim /etc/sysctl.conf #將網路設定為可轉發
sysctl net.ipv4.ip_forward
sysctl -p

RS:
eth0:192.168.1.130 #1臺
eth0:192.168.1.131 #2臺

systemctl start httpd #使用httpd使用80埠作為演示
ip route add 0.0.0.0/0 via 192.168.1.140 dev eth0
#設定route讓RS返回LVS並轉回給使用者

CIP:
eth0:10.1.1.44
curl 10.1.1.33

DR模型實戰:
系統:rock8 #都是rock8
虛擬機器模式:NAT(CIP)、主機(RS、LVS)

CIP(模擬使用者):
IP:192.168.1.130
GW:192.168.1.132

DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.130
PREFIX=24
GATEWAY=192.168.1.132 #有時需要使用命令:ip route add 0.0.0.0/24 via 192.168.1.140 dev eth0 或者重啟網路卡 
ONBOOT=yes
#/etc/sysconfig/network-scripts/ifcfg-eth0 
nmcli connection reload #過載網路卡

Router(轉發路由):
IP:
eth0:10.1.1.44 #主機模式
eth1:192.168.1.132 #NAT

vim /etc/sysctl.conf #將網路設定為可轉發
sysctl net.ipv4.ip_forward
sysctl -p

#tcpdump -i eth1 icmp #如果出現問題嘗試檢視ping的網路如何
#即使RS不可見ip被隱藏,依然可以透過roter去測試使用者能否連線RS

RS:
IP:
eth0:10.1.1.55 |eth0:10.1.1.56 #兩臺
GW:10.1.1.44
lo:10.1.1.100

yum install httpd 
hostname -I > /var/www/html/index.html #使用httpd為例子

echo 1 >   /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >   /proc/sys/net/ipv4/conf/all/arp_announce 
echo 1 >   /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 >   /proc/sys/net/ipv4/conf/lo/arp_announce  #開啟lo不可查,不造成ip衝突
ip addr del 127.0.0.1/8 dev lo label lo 
ip addr add 10.1.1.100 dev lo label lo  或者	ip addr add 10.1.1.100 dev lo label lo:1
#修改lo,RS的lo地址需要一致
#arping 10.1.1.100命令,如果需要檢視ip是否衝突和lo地址是否隱藏成功

LVS
IP:
eth0:10.1.1.45
GW:10.1.1.44 #只要有閘道器就可以轉發,因為當主機接受到包時會有一個反向處理,如果本身不能返回(只要能發出去就視為返回),則直接將包丟棄
lo:10.1.1.100

ip addr add 10.1.1.100 dev lo label lo:1	#修改lo,RS的lo地址需要一致
ipvsadm -A -t 10.0.0.100:80 -s rr
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.55:80 -g 
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.56:80 -g

相關文章