首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

LVS + Keepalived 搭建 MyCAT 高可用負載均衡集群:DR 模式、健康檢查、故障切換全流程

     編輯:MySQL 綜合教學

基於 LVS + Keepalived 的 MyCAT 高可用負載均衡集群部署實戰

架構概覽

角色IP主機名軟件版本
VIP192.168.244.10--
LVS-DR-Master192.168.244.146keepalived01Keepalived 1.2.13, IPVS 1.2.1
LVS-DR-Backup192.168.244.147keepalived02Keepalived 1.2.13, IPVS 1.2.1
MyCAT RealServer192.168.244.148mycat01MyCAT 1.5
MyCAT RealServer192.168.244.149mycat02MyCAT 1.5

核心功能:
1. LVS DR 模式負載均衡(高性能、無七層開銷)
2. Keepalived 實現 RealServer 健康檢查 + LVS 自身雙主熱備

1. 安裝軟件包

# 兩台 LVS 節點均執行
yum install -y keepalived ipvsadm
# ipvsadm 僅為管理工具,LVS 內核模組 CentOS 7.1 (3.10) 內建

2. Keepalived 配置(Master)

# /etc/keepalived/keepalived.conf
global_defs {
    router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eno16777736  # CentOS 7 網卡名非 eth0,需 ip addr 確認
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication { auth_type PASS; auth_pass 1111; }
    virtual_ipaddress { 192.168.244.10; }
}
virtual_server 192.168.244.10 8066 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
    real_server 192.168.244.148 8066 {
        weight 1
        TCP_CHECK { connect_timeout 3; nb_get_retry 3; delay_before_retry 3; connect_port 8066; }
    }
    real_server 192.168.244.149 8066 {
        weight 1
        TCP_CHECK { connect_timeout 3; nb_get_retry 3; delay_before_retry 3; connect_port 8066; }
    }
}

3. Keepalived 配置(Backup)

複製 Master 配置,修改兩點:

  • state BACKUP
  • priority 99 (低於 Master)

4. RealServer 綁定 VIP 抑制 ARP(關鍵)

# /root/realserver.sh  (兩台 MyCAT 節點均執行)
#!/bin/bash
VIP=192.168.244.10
case "$1" in
start)
    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
    route add -host $VIP dev lo:0
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    sysctl -p >/dev/null 2>&1
    echo "RealServer Start OK"
    ;;
stop)
    ifconfig lo:0 down
    route del $VIP >/dev/null 2>&1
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo "RealServer Stoped"
    ;;
esac
chmod +x realserver.sh
./realserver.sh start
# 驗證 ip addr show lo:0

5. 啟動驗證

# 兩台 LVS 啟動
systemctl start keepalived

# 查看 IPVS 映射
ipvsadm -L
# 輸出應顯示 VIP:8066 映射到兩個 RealServer IP:8066

6. 功能測試

負載均衡驗證

# 關閉持久連接觀察輪詢
# 修改 persistence_timeout 0 並重啟 keepalived
for i in {1..4}; do mysql -h192.168.244.10 -P8066 -utest -ptest -DTESTDB -e 'SELECT @@hostname'; done
# 輸出應交替顯示 mycat01 / mycat02

LVS 高可用測試

# 停止 Master keepalived
systemctl stop keepalived
# 客戶端仍可連接,Backup 升級為 Master 接管 VIP

RealServer 健康檢查測試

# 停止 mycat01 服務
cd /usr/local/mycat && bin/mycat stop
# ipvsadm -L 應不再顯示 192.168.244.148
# 客戶端請求自動導向 mycat02

關鍵避坑總結

  1. VIP 端口必須與 RealServer 服務端口一致(8066),否則連接失敗
  2. LVS 與 RealServer 必須物理分離,同機測試無法驗證 DR 模式轉發
  3. interface 必須填寫真實網卡名(eno16777736 而非 eth0)
  4. Keepalived 單獨也可做 MySQL 雙主高可用,不依賴 LVS
  5. DR 模式下 RealServer **無需開啟內核路由轉發**
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved