- 什麼是Keepalived
Keepalived是一個用C編寫的路由軟體。主要目标是為Linux系統和基于Linux的基礎設施提供簡單而強大的負載平衡和高可用性設施。
負載平衡架構依賴于衆所周知且廣泛使用的提供第4層負載平衡的Linux Virtual Server(IPVS)核心子產品。Keepalived實作了一組檢查器,用于根據負載平衡伺服器池的運作狀況動态、自适應地維護和管理負載平衡伺服器。另一方面,高可用性是通過VRRP協定實作的。
簡單說,Keepalived有兩大主要功能:
1) 實作VRRP,具備高可用能力
2) 具備管理LVS的能力,用了Keepalived,就無需再直接操作LVS的配置了。
- LVS叢集規劃
2.1 場景和需求
有3台或者更多台WEB伺服器(不限WEB伺服器類型,比如tomcat、httpd、nginx都可以),目标是要實作WEB伺服器的負載均衡,且整個叢集是高可用的,避免負載均衡器故障導緻叢集不可用。
2.2 為什麼選擇keepalived?
負載均衡功能有很多實作方案,例如nginx、apache httpd都有反向代理功能,都能實作負載均衡和web伺服器的故障轉移,但它們本身不能解決自身的高可用和故障轉移。
是以本次使用keepalived來實作負載均衡器本身的叢集故障轉移,LVS的轉發模式選擇DR模式。
2.3 叢集規劃
整個叢集示意圖如下圖,WEB伺服器任意,例如tomcat、apache httpd等都可以:
- 搭建步驟
作業系統為Ubuntu Server 22.04。
3.1. WEB伺服器配置
3.1.1. 部署WEB伺服器
步驟略
3.1.2. LVS配置
為了配合LVS,需要綁定VIP和做少量網絡配置,是以編寫成一個shell腳本,步驟如下:
cat<<EOF|sudo tee /usr/local/bin/vip.sh
#! /bin/bash
vip=10.0.2.20
mask='255.255.255.255'
dev=lo:1
case in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig netmask broadcast up
route add -host dev
echo "RS server is Ready "
;;
stop)
route del -host dev
ifconfig down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "RS server is Cancel"
;;
*)
echo "Usage start|stop"
exit 1
;;
esac
EOF
# 加上執行權限
sudo chmod a+x /usr/local/bin/vip.sh
# 安裝net-tools,才能使用ifconfig、route指令
sudo apt install -y net-tools
# 啟用VIP。停用的話,執行sudo vip.sh stop即可
sudo vip.sh start
3.2. 部署keepalived
3.2.1. keepalived master配置
# 安裝
sudo apt install -y keepalived
# 編輯配置檔案,内容下文附上。
sudo vi /etc/keepalived/keepalived.conf
# 啟動keepalived
sudo systemctl start keepalived
# 檢視LVS狀态
sudo ipvsadm -Ln
其中keepalived.conf的内容如下:
vrrp_instance VI_1 {
state MASTER #一台MASTER,另一台SLAVE
interface enp0s3 #網卡名,ifconfig檢視
virtual_router_id 20 # Master和Slave保持相同即可,範圍1-255
nopreempt
advert_int 1
virtual_ipaddress {
10.0.2.20 #VIP
}
}
virtual_server 10.0.2.20 80 {#VIP、端口
delay_loop 6
lvs_sched rr # 負載均衡算法,也可以用舊版本指令lb_algo
lvs_method DR # LVS模式。也可以用舊版本指令lb_kind
protocol TCP
real_server 10.0.2.12 80 {
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 10.0.2.13 80 {
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 10.0.2.14 80 {
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
3.2.2. keepalived slave配置
除了配置檔案的角色要改成slave,即:state SLAVE,其它完全相同。
3.3. 驗證
用浏覽器通路VIP即可,即:http://10.0.2.20/。
可以做如下驗證:
1) 停止keepalive master服務或者關機,浏覽器應該仍然可以通路。
2) 開啟keepalive master,停止keepalive slave,同樣浏覽器可以通路。
3) 關閉其中一台或者兩台web伺服器,浏覽器照樣可以通路。
4) web伺服器均正常服務的情況下,重新整理浏覽器,可以随機通路不同的WEB伺服器。
最後,如果隻需要高可用,不需要負載均衡,可以不上LVS功能,将keepalived安裝到web伺服器,删去配置檔案中的整個virtual_server部分即可。