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

MySQL 高可用架構實戰:LVS + Keepalived + MySQL 主從負載均衡集群完整部署指南

     編輯:MySQL 綜合教學

MySQL 高可用架構實戰:LVS + Keepalived + MySQL 主從負載均衡集群完整部署指南

本文詳細記錄基於 LVS(IPVS)+ Keepalived + MySQL 主從復制的高可用負載均衡集群搭建全過程,採用 DR(直接路由)模式實現讀寫分離與故障自動切換,包含架構設計、IPVS 內核模塊驗證、Keepalived 雙主熱備配置、VIP 漂移驗證、TCP CHECK 健康檢查、故障注入測試及核心問題排查,為生產環境讀密集型業務提供可落地的部署方案。

一、架構設計

MySQL 層(主從復制)

  • Master:10.24.6.5:3306(寫入節點)
  • Slave:10.24.6.6:3306(讀取節點,同步 Master 數據)

負載均衡層 (LVS/Keepalived)

  • LVS Master:10.24.6.4
  • LVS Backup:10.24.6.7

虛擬 IP (VIP)

  • 10.24.6.2:3306(對外統一訪問入口)

架構拓撲圖

二、關鍵前置條件

  1. MySQL 必須關閉 bind-address 限制: 注釋 /etc/mysql/my.cnf 中 bind-address = 127.0.0.1,否則 VIP 無法訪問。
  2. 關閉防火牆: /sbin/iptables -F(或精確放行 3306、VRRP 協議、Keepalived 端口)。
  3. 重啟網絡服務: sudo /etc/init.d/networking restart 確保 VIP 綁定生效。

三、LVS (IPVS) 內核模塊驗證與安裝

# 檢查 ipvsadm 是否安裝
ipvsadm
# 未安裝提示: bash: /sbin/ipvsadm: No such file or directory
# 安裝
apt-get install ipvsadm

# 驗證安裝成功
ipvsadm
# 輸出: IP Virtual Server version 1.2.1 (size=4096)...

# 檢查內核模塊加載
modprobe -l | grep ipvs
# 或
lsmod | grep ip_vs

Ubuntu 9.10+ (內核 2.6+) 無需編譯內核,安裝 ipvsadm 即可自動加載模塊。

四、Keepalived 高可用配置

1. 安裝

apt-get install keepalived

2. Master 節點配置 /etc/keepalived/keepalived.conf

global_defs {
    router_id HaMySQL_1
}

vrrp_instance VI_MYSQL {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.24.6.2
    }
}

virtual_server 10.24.6.2 3306 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 60
    protocol TCP
    real_server 10.24.6.5 3306 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }
    real_server 10.24.6.6 3306 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }
}

3. Backup 節點配置(差異點:state BACKUP、priority 50)

vrrp_instance VI_MYSQL {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 50
    # 其他完全相同...
}

4. 配置關鍵參數解析

參數含義
lb_algo wrr加權輪詢調度算法
lb_kind DR直接路由模式(高性能,需 Real Server 配置 VIP 隧道/arp_ignore)
persistence_timeout 60會話保持 60 秒(同一客戶端 60 秒內固定後端)
TCP_CHECKTCP 端口健康檢查(3 秒超時、3 次重試、3 秒間隔)
virtual_router_id 51VRRP 組 ID,主備必須一致
priority優先級,數值大者為 Master

五、服務啟動與驗證

1. 啟動 Keepalived

/usr/local/keepalived/sbin/keepalived -D

查看進程:應有 3 個 keepalived 進程(父進程、VRRP 子進程、健康檢查子進程)。

2. 日志觀察 tail -f /var/log/syslog (Ubuntu)

關注 VRRP 狀態轉換、VIP 綁定、健康檢查結果。

3. VIP 綁定驗證

# Master 應顯示 VIP
ip addr show eth0
# 輸出包含: inet 10.24.6.2/32 scope global eth0

# Backup 暫不綁定 VIP
ip addr show eth0
# 無 10.24.6.2

⚠️ ifconfig **無法顯示 VIP**,必須用 ip addr。

4. IPVS 規則驗證

ipvsadm -Ln
# Master 輸出:
# TCP  10.24.6.2:3306 wrr persistent 60
#   -> 10.24.6.5:3306 Route 3 0 0
#   -> 10.24.6.6:3306 Route 3 0 0

# Backup 應無規則(或為備用同步)

六、功能測試與故障注入

1. 直連 MySQL 驗證主從數據一致性

分別連接 10.24.6.5:3306 和 10.24.6.6:3306,驗證主從復制正常。

2. VIP 訪問驗證負載均衡

mysql -h 10.24.6.2 -u user -p
# 多次連接觀察是否輪詢分發到 10.24.6.5 和 10.24.6.6

3. 高可用故障切換測試

  • LVS 層: 關閉 Master (10.24.6.4) Keepalived,Backup (10.24.6.7) 自動接管 VIP,服務無感知中斷。
  • MySQL 層: 任意一個 MySQL 節點異常(關閉服務/網絡斷開),Keepalived TCP_CHECK 檢測失敗後自動從 IPVS 表中剔除該節點,流量自動切換至健康節點。

七、核心問題深度排查:MySQL 連接錯誤 111 (Connection Refused)

現象

直連 Real IP (10.24.6.5:3306) 正常,但連 VIP (10.24.6.2:3306) 報錯 ERROR 111: Can't connect to MySQL server。

抓包分析

tcpdump -i eth0 host 10.24.6.2 and port 3306
# 發現: SYN -> SYN/ACK -> RST (重置連接)
# 說明 3306 端口有進程監聽並響應,但主動發送 RST 拒絕連接

RST 產生原因分析

  1. 端口未打開
  2. 請求超時
  3. 服務端主動關閉
  4. 已關閉 Socket 收到數據

根因定位

結合 MySQL 錯誤碼 111,**確認為 MySQL 服務端主動拒絕連接**。查閱資料發現:MySQL 默認綁定 bind-address = 127.0.0.1,導致非本地 IP(含 VIP)連接被拒。

解決方案

修改兩台 MySQL 服務器 /etc/mysql/my.cnf:

[mysqld]
# bind-address = 127.0.0.1  # 註釋掉或改為 0.0.0.0
bind-address = 0.0.0.0

重啟 MySQL:service mysql restart。

驗證修復

再次連接 VIP,連接成功,負載均衡生效。

八、總結與架構特點

  • Share Nothing 架構: MySQL 主從獨立存儲,數據通過 Binlog 異步/半同步復制同步。
  • 讀寫分離就緒: 可擴展為寫 Master、讀 Slave 集群,LVS 分發讀流量。
  • 雙層高可用: LVS/Keepalived 保證入口高可用;MySQL 主從保證數據層高可用。
  • DR 模式高性能: 回包不經 LVS,減輕負載均衡器壓力,需 Real Server 解決 ARP 問題(arp_ignore=1, arp_announce=2 或配置 VIP 隧道)。
  • 健康檢查精準: TCP_CHECK 秒級感知後端 MySQL 存活狀態,自動剔除故障節點。

九、生產部署補充清單

  1. Real Server 配置 arp_ignore/arp_announce 內核參數解決 DR 模式 ARP 衝突
  2. MySQL 主從監控:Seconds_Behind_Master、Slave_IO_Running/Slave_SQL_Running
  3. Keepalived 監控腳本增強:除 TCP_CHECK 外,可添加 MISC_CHECK 執行自定義腳本驗證主從同步狀態
  4. VIP 遷移通知:配置 notify_master/notify_backup 腳本觸發業務感知
  5. 壓力測試驗證:模擬高併發讀寫,驗證 LVS 調度性能與 MySQL 從庫延遲容忍度

此架構適合讀多寫少、對高可用性要求高、可接受最終一致性的互聯網業務場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved