天天看點

一分鐘快速搭建Keepalived+LVS+Tomcat高可用叢集

作者:spbdev
  1. 什麼是Keepalived

Keepalived是一個用C編寫的路由軟體。主要目标是為Linux系統和基于Linux的基礎設施提供簡單而強大的負載平衡和高可用性設施。

負載平衡架構依賴于衆所周知且廣泛使用的提供第4層負載平衡的Linux Virtual Server(IPVS)核心子產品。Keepalived實作了一組檢查器,用于根據負載平衡伺服器池的運作狀況動态、自适應地維護和管理負載平衡伺服器。另一方面,高可用性是通過VRRP協定實作的。

簡單說,Keepalived有兩大主要功能:

1) 實作VRRP,具備高可用能力

2) 具備管理LVS的能力,用了Keepalived,就無需再直接操作LVS的配置了。

一分鐘快速搭建Keepalived+LVS+Tomcat高可用叢集
  1. 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等都可以:

一分鐘快速搭建Keepalived+LVS+Tomcat高可用叢集
  1. 搭建步驟

作業系統為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部分即可。

繼續閱讀