🗄️ MySQL / MariaDB Active-Active 高可用架構:三節點 Galera Cluster 雙主同步 + 自動故障切換完整指南
在企業資料庫架構中,最常見的需求就是「不中斷服務」與「避免資料不一致」。 傳統 Master/Slave 複寫有明顯限制:主節點故障即全站停擺,且 Slave 寫入受限。 本指南將教你打造 真正的 Active-Active(雙主同步)高可用資料庫集群 —— MariaDB Galera Cluster(三節點版本)。
Galera Cluster 提供原生同步複寫(True Multi-Master Replication),每個節點同時具備「讀」、「寫」能力, 搭配 quorum、自動故障切換、增量同步(IST)與負載平衡,能讓你的資料庫達到企業級高可用性。
📌 一、架構概念:為什麼選 Galera Cluster?
Galera 是目前最成熟的「真正同步(Synchronous)」多主資料庫。
- ✔ 多主同步(Active-Active) 所有節點可同時讀寫
- ✔ 零延遲複寫(一致性保證)避免 Slave 落後
- ✔ 自動故障切換、節點自動加入
- ✔ Quorum 機制 防止 split-brain
- ✔ 增量同步 IST 加快節點重新加入速度
本指南採用業界最佳實務:
node1: 192.168.1.10
node2: 192.168.1.11
node3: 192.168.1.12
📡 二、三節點 Galera Cluster 拓撲圖
┌────────────────────────┐
│ HAProxy + VIP │
│ (讀寫負載平衡層) │
└──────────┬─────────────┘
│
┌──────────────┴──────────────┐
│ │
┌────────┴────────┐ ┌────────┴────────┐
│ MariaDB Node 1 │ │ MariaDB Node 2 │
│ 192.168.1.10 │ │ 192.168.1.11 │
└────────┬─────────┘ └────────┬────────┘
│ │
└──────────────┬──────────────┬────┘
│ │
┌──────┴──────┐
│ MariaDB Node 3 │
│ 192.168.1.12 │
└──────────────┘
🛠 三、安裝 MariaDB + Galera(每個節點都需執行)
sudo dnf install mariadb mariadb-server galera -y
sudo systemctl enable mariadb
⚙️ 四、Galera 主要設定(每個節點皆須配置)
編輯 /etc/my.cnf.d/galera.cnf
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://192.168.1.10,192.168.1.11,192.168.1.12"
wsrep_node_address="192.168.1.X"
wsrep_node_name="nodeX"
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
⚠️ 每台需替換:
- `wsrep_node_address`
- `wsrep_node_name`
🚀 五、啟動 Galera Cluster(正確順序)
1️⃣ 啟動第一台(Bootstrap Cluster)
galera_new_cluster
2️⃣ 啟動第二、第三台
sudo systemctl start mariadb
成功後輸入:
mysql -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
預期結果:
3
🔁 六、Galera 同步原理(SST / IST)
- SST(State Snapshot Transfer):第一次加入需全量同步
- IST(Incremental State Transfer):節點短暫離線後自動增量同步(更快)
🧩 七、Quorum & Split-Brain 避免
三節點架構內建 Quorum,避免 split-brain:
3 節點 → 最佳狀態
2 節點 → 仍可運作(>50%)
1 節點 → 集群自動停止(保護一致性)
⚖️ 八、搭配 HAProxy 負載平衡(推薦)
安裝 HAProxy:
sudo dnf install haproxy -y
設定:
/etc/haproxy/haproxy.cfg
frontend mysql-in
bind *:3306
mode tcp
default_backend galera
backend galera
mode tcp
balance roundrobin
option mysql-check user haproxy
server node1 192.168.1.10:3306 check
server node2 192.168.1.11:3306 check
server node3 192.168.1.12:3306 check
🏷 九、自動故障切換(Keepalived + VIP)
讓 HAProxy 具備雙活 HA。
設定 Keepalived:
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 50
priority 120
virtual_ipaddress {
192.168.1.200
}
}
VIP 會自動漂移到健康的 HAProxy 節點,外部永遠使用: mysql -h 192.168.1.200 -u user -p
📦 十、節點損毀 / 修復流程
🟡 Node 失聯 → 自動切換至其他兩台
🟢 Node 恢復 → 自動加入(IST)
🔴 若 Node 資料嚴重不一致 → SST 重建
📘 結語
三節點 MariaDB Galera Cluster 讓你獲得真正的 Active-Active 多主架構:
- 所有節點皆可同時讀寫
- 資料一致性 100% 保證
- HAProxy + VIP 提供不中斷存取
- 自動故障切換 + 自動修復
這是企業資料庫最佳解決方案之一,適用於 API、後端系統、高流量服務等。
🔗 延伸閱讀
- Linux 防火牆整合:firewalld / iptables / nftables
- OpenVPN + PKI 企業客戶端路由完整指南
- Linux NFS 企業部署完整指南
- Linux LVM PV / VG / LV Resize 完整教學
— WWFandy・系統與資料庫筆記
沒有留言: