傳統 keepalived + haproxy 僅能解決主庫 VIP 漂移,無法自動處理從庫指向新主、Binlog 位點對齊、多從庫拓撲重組。現代方案採用 GTID (全域事務 ID) + 自動故障轉移工具 (MHA/Orchestrator/ProxySQL) 實現真正的零人工介入主從切換。
傳統複制依賴 MASTER_LOG_FILE + MASTER_LOG_POS,主庫切換後檔名與位點改變,從庫無法自動銜接。GTID 透過唯一事務識別符 (UUID:SEQ) 解決此問題。
-- 從庫只需執行 (無需指定檔名/位點)
CHANGE MASTER TO
MASTER_HOST='new_master_ip',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='xxx',
MASTER_AUTO_POSITION=1; -- 關鍵參數
START SLAVE;
內部流程:
GTID_EXECUTED 集合masterha_manager 監控、masterha_master_switch 切換CHANGE MASTER 指向新主proxysql_galera_checker 或自定義腳本實現主從切換邏輯
# 1. 配置 manager.cnf
[server1] # 原主
hostname=192.168.1.10
[server2] # 備主
hostname=192.168.1.11
candidate_master=1
# 2. 啟動監控
masterha_manager --conf=/etc/mha.cnf --remove_dead_master_conf --ignore_last_failover
# 3. 故障發生時自動執行:
# - 驗證原主確實不可用 (SSH/IPMI 雙重檢查)
# - 選擇最新從庫 (server2) 提升為主
# - 在新主執行 RESET MASTER (如需)
# - 其餘從庫自動 CHANGE MASTER TO MASTER_AUTO_POSITION=1
# - 更新 VIP/ProxySQL 後端
# - 發送通知 (Email/Slack/Webhook)
gtid_mode=ON, enforce_gtid_consistency=ON, log_slave_updates=ONserver_id、repl 用戶權限、binlog_format=ROW採用 GTID + 自動化工具,將「主庫掛了怎麼辦」從深夜驚魂變為可控、可觀測、可演練的標準運維流程。