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

MariaDB 10 多主復制 + MMM 高可用架構實戰:讀寫分離、故障切換與 VIP 漂移全流程

     編輯:MySQL 綜合教學

前言

MariaDB/MySQL 原生復制為單向異步,缺乏自動故障切換。MMM (Master-Master Replication Manager) 提供雙主互備、虛擬 IP (VIP) 漂移、從庫自動重新指向、讀寫分離等企業級高可用能力。本文記錄三節點(雙主一從)+ 監控節點的完整部署實戰。

架構拓撲

  • DB1 (Master/Writer):192.168.1.109,VIP 192.168.1.24 (Writer)
  • DB2 (Master/Reader):192.168.1.112,VIP 192.168.1.22 (Reader)、192.168.1.24 (Backup Writer)
  • DB3 (Slave/Reader):192.168.1.113,VIP 192.168.1.23 (Reader)
  • Monitor:192.168.1.116,運行 mmm_mond 監控代理

任意時刻僅一個 Writer VIP 生效,Reader VIP 分散於各節點實現讀負載均衡。

核心配置步驟

1. 資料庫層:雙主復制 + 從庫

-- 兩主互為主從
-- DB1 my.cnf
server-id=1
log-bin=mysql-bin
binlog-format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON
log-slave-updates=ON
relay-log=relay-bin
auto_increment_offset=1
auto_increment_increment=2

-- DB2 my.cnf
server-id=2
auto_increment_offset=2
auto_increment_increment=2
-- 其餘同 DB1

-- 建立復制帳號
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl_pass';

-- DB1 指向 DB2
CHANGE MASTER TO MASTER_HOST='192.168.1.112', MASTER_USER='repl', MASTER_PASSWORD='repl_pass', MASTER_AUTO_POSITION=1;
START SLAVE;

-- DB2 指向 DB1
CHANGE MASTER TO MASTER_HOST='192.168.1.109', MASTER_USER='repl', MASTER_PASSWORD='repl_pass', MASTER_AUTO_POSITION=1;
START SLAVE;

-- DB3 指向 DB1 (單向從)
CHANGE MASTER TO MASTER_HOST='192.168.1.109', MASTER_USER='repl', MASTER_PASSWORD='repl_pass', MASTER_AUTO_POSITION=1;
START SLAVE;

2. 監控代理安裝 (EPEL 源)

# 所有 DB 節點
yum install -y epel-release
yum install -y mysql-mmm-agent

# Monitor 節點
yum install -y mysql-mmm-monitor mysql-mmm-tools

3. MMM 共用配置 (/etc/mysql-mmm/mmm_common.conf)

<host default>
  cluster_interface eth0
  pid_path /var/run/mysql-mmm/
  bin_path /usr/libexec/mysql-mmm/
</host>

<host db1> ip 192.168.1.109 mode master peer db2 </host>
<host db2> ip 192.168.1.112 mode master peer db1 </host>
<host db3> ip 192.168.1.113 mode slave  </host>

<role writer>
  hosts db1, db2
  ips 192.168.1.24
  mode exclusive
</role>

<role reader>
  hosts db1, db2, db3
  ips 192.168.1.22, 192.168.1.23, 192.168.1.24
  mode balanced
</role>

4. 代理配置 (/etc/mysql-mmm/mmm_agent.conf 每節點)

include mmm_common.conf
this db1   # db2 改 this db2,db3 改 this db3

5. 監控配置 (/etc/mysql-mmm/mmm_mon.conf)

<monitor>
  pid_path /var/run/mysql-mmm/
  bin_path /usr/libexec/mysql-mmm/
  status_path /var/lib/mysql-mmm/
  ping_ips 192.168.1.109, 192.168.1.112, 192.168.1.113
</monitor>

include mmm_common.conf

6. 授權監控帳號 (所有 DB)

GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_monitor'@'192.168.1.116' IDENTIFIED BY 'monitor_pass';
GRANT REPLICATION CLIENT ON *.* TO 'mmm_agent'@'%' IDENTIFIED BY 'agent_pass';

7. 啟動服務

# DB 節點
systemctl start mysql-mmm-agent

# Monitor 節點
systemctl start mysql-mmm-monitor

驗證與故障演練

mmm_control show
# 輸出範例:
db1(192.168.1.109) master/ONLINE. Roles: writer(192.168.1.24), reader(192.168.1.22)
db2(192.168.1.112) master/ONLINE. Roles: reader(192.168.1.23)
db3(192.168.1.113) slave/ONLINE. Roles: reader(192.168.1.24)

模擬 DB1 宕機

  1. 關閉 DB1 MySQL 或網路。
  2. Monitor 檢測失效,自動將 Writer VIP (192.168.1.24) 漂移至 DB2。
  3. DB3 自動重新指向新 Master (DB2) 繼續同步(需 GTID + MASTER_AUTO_POSITION)。
  4. Reader VIP 重新均衡分配。

DB1 恢復上線

自動加入為 Reader,不搶佔 Writer(避免雙主寫入衝突),需人工 mmm_control move_writer db1 確認數據一致後切回。

關鍵優勢與限制

優勢限制
自動故障切換、VIP 漂移、從庫自動重新指向至少 3 節點(雙主+監控),硬體成本較高
讀寫分離內建,Reader 負載均衡應用需適配讀寫分離(連接池區分 Writer/Reader VIP)
成熟穩定,社區驗證豐富MMM 本身為 Perl 腳本,維護模式,新專案建議評估 MHA、Orchestrator、ProxySQL + GTID 方案
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved