LVS+Keepalived實現高可用負載均衡
負載均衡方案系統架構拓撲圖
安裝LVS和keepalived軟件包
節點規劃
主機名 | IP | 角色 | 備註 |
---|---|---|---|
DS1 | IP1:192.168.213.136 VIP:192.168.213.200 | LVS負載調度器1 | VIP爲LVS的浮動IP |
DS2 | IP1:192.168.213.161 VIP:192.168.213.200 | LVS負載調度器2 | VIP爲LVS的浮動IP |
RS1 | 192.168.213.129 | 真實服務器1 | 提供WEB服務 |
RS2 | 192.168.213.135 | 真實服務器2 | 提供WEB服務 |
NFS | 192.1 68.213.233 | 數據共享服務器 | 提供網頁共享數據SER |
初始環境配置
(1)配置主機名(略)
(2)處理防火牆(略)
(3)同步時鐘源(略)
搭建LVS-DR集羣
注意:測試好集羣之後,將綁定的浮動IP摘掉。
建議:兩個節點依次配置測試,配置後,不用保存。
安裝keepalived
在兩個負載均衡器上配置keepalived
配置keepalived實現LVS負載均衡
LVS MASTER keepalived.conf
[root@ds1 ~]# cd /etc/keepalived/
[root@ds1 keepalived]# cp -p keepalived.conf{,.bak}
[root@ds1 keepalived]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
lvs_sync_daemon_interface ens33
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.213.200/24 dev ens33 label ens33:1
}
}
virtual_server 192.168.213.200 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0 #此值爲0,方便測試,每次刷新頁面結果會不一樣
protocol TCP
real_server 192.168.213.129 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.213.135 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
LVS BACKUP keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
lvs_sync_daemon_interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.213.200/24 dev ens33 label ens33:1
}
}
virtual_server 192.168.213.200 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.213.129 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.213.135 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
重啓keepalived systemctl restart keepalived
結果測試
查看浮動ip
在DR1 (主) 上查看IP信息
在DR2 (備) 上查看IP信息
由此可見浮動IP在負載均衡主節點上
在網頁上訪問測試
測試故障切換
(1)在linux終端上寫測試腳本
# vim keepalived.sh
#!/bin/bash
URL="http://192.168.213.200"
while true
do
curl -I $URL >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo "$URL is 0K ..."
else
echo "$URL is ERR..."
fi
sleep 2
done
注意:該測試節點是任意的一個linux節點,只要和192.168.213.200網段通信正常即可
運行腳本,持續監控 sh keepalived.sh
模擬故障 systemctl stop keepalived
查看ds2網卡,浮動IP已經漂移過來了
查看腳本監控結果,業務沒有中斷
sh keepalived.sh
http://192.168.213.200 is 0K ...
……
http://192.168.213.200 is 0K ...
http://192.168.213.200 is 0K ...
模擬故障恢復 systemctl start keepalived
查看IP,浮動IP再次漂移到主節點上;查看腳本監控結果,業務正常