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

Keepalived + MySQL 雙主高可用架構部署指南

     編輯:MySQL 綜合教學

Keepalived + MySQL 雙主高可用架構部署指南

原文內容極少,此處補充完整架構設計與部署要點。Keepalived 提供 VIP 漂移與健康檢查,配合 MySQL 雙主複製 (Master-Master) 實現讀寫高可用。

一、架構拓撲

客戶端 → VIP (Keepalived) → MySQL Master A (Active)
                              ↘ MySQL Master B (Standby/Read)
雙主互為主從,雙向同步,任意節點可寫入(需應用層路由或僅單點寫入避免衝突)

二、核心配置要點

1. MySQL 雙主複製

  • 雙向配置 CHANGE MASTER TO,server-id 唯一。
  • 啟用 log_slave_updates、auto_increment_offset/increment 避免主鍵衝突。
  • 建議採用 GTID 模式 (MySQL 5.6+) 簡化故障切換。

2. Keepalived 配置 (/etc/keepalived/keepalived.conf)

vrrp_script chk_mysql {
    script "/usr/local/bin/check_mysql.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state MASTER          # 備機為 BACKUP
    interface eth0
    virtual_router_id 51
    priority 100          # 備機較低,如 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.100/24  # VIP
    }
    track_script {
        chk_mysql
    }
    notify_master "/usr/local/bin/notify_master.sh"
    notify_backup "/usr/local/bin/notify_backup.sh"
    notify_fault "/usr/local/bin/notify_fault.sh"
}

3. 健康檢查腳本 (check_mysql.sh)

#!/bin/bash
mysql -h127.0.0.1 -uroot -ppass -e "SELECT 1;" &>/dev/null
if [ $? -ne 0 ]; then
    systemctl stop keepalived  # 觸發 VIP 漂移
    exit 1
fi
exit 0

4. 狀態切換通知腳本

  • notify_master.sh:執行 SET GLOBAL read_only=OFF; 開放寫入。
  • notify_backup.sh:執行 SET GLOBAL read_only=ON; 禁止寫入(可選,視業務而定)。

三、避坑指南

  • 雙主寫入衝突:嚴格限制單點寫入,或使用應用層路由(如 ProxySQL)分發。
  • 腦裂風險:網絡分區時雙方均以為對方掛了,需引入仲裁機制(如第三方見證節點)。
  • 複製延遲:監控 Seconds_Behind_Master,切換前確保從庫追上。
  • 防火牆:放行 VRRP 協議 (組播 224.0.0.18) 與 MySQL 3306 端口。

四、現代替代方案

生產環境推薦 MHA、Orchestrator、MySQL InnoDB Cluster (Group Replication + Router),功能更完善、生態更成熟。

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