熱門分類
載入中…
目錄0%

🗄️ MySQL / MariaDB Active-Active 高可用架構:三節點 Galera Cluster 雙主同步 + 自動故障切換完整指南

    🗄️ 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、後端系統、高流量服務等。


    🔗 延伸閱讀

    — WWFandy・系統與資料庫筆記

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級