MySQL-MMM (Multi-Master Replication Manager) 提供高可用 MySQL 叢集方案。最小部署需 2 資料庫節點 + 1 監控節點,生產環境建議 4 資料庫節點 (雙主雙從) + 1 監控節點。
| 角色 | IP | 主機名 | Server ID |
|---|---|---|---|
| 監控主機 | 192.168.0.10 | mon | - |
| Master 1 | 192.168.0.11 | db1 | 1 |
| Master 2 | 192.168.0.12 | db2 | 2 |
| Slave 1 | 192.168.0.13 | db3 | 3 |
| Slave 2 | 192.168.0.14 | db4 | 4 |
| VIP | 角色 | 說明 |
|---|---|---|
| 192.168.0.100 | writer | 應用寫入操作連接此 IP |
| 192.168.0.101-104 | reader | 應用讀取操作負載均衡連接 |
編輯 /etc/mysql/my.cnf:
server_id = 1 # 每個節點唯一
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index = /var/log/mysql/mysql-bin.log.index
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
expire_logs_days = 10
max_binlog_size = 100M
log_slave_updates = 1
auto_increment_increment = 2 # 主節點數量
auto_increment_offset = 1 # 各節點遞增唯一值
bind-address = 0.0.0.0 # 監聽所有介面
重啟 MySQL 生效:/etc/init.d/mysql restart
-- 監控用戶
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.0.%' IDENTIFIED BY 'monitor_password';
-- Agent 管理用戶
GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.0.%' IDENTIFIED BY 'agent_password';
-- 複製用戶
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.0.%' IDENTIFIED BY 'replication_password';
注意:複製密碼不得超過 32 字元。
FLUSH TABLES WITH READ LOCK; 並記錄 SHOW MASTER STATUS; 位置mysqldump 備份全庫,分發至 db2、db3、db4 匯入CHANGE MASTER TO 指向 db1,啟動 START SLAVE;SHOW SLAVE STATUS\G 確認複製正常監控節點 (Debian/Ubuntu):
aptitude install liblog-log4perl-perl libmailtools-perl liblog-dispatch-perl \
libclass-singleton-perl libproc-daemon-perl libalgorithm-diff-perl \
libdbi-perl libdbd-mysql-perl
dpkg -i mysql-mmm-common_*.deb mysql-mmm-monitor_*.deb
資料庫節點:
aptitude install liblog-log4perl-perl libmailtools-perl liblog-dispatch-perl \
iproute libnet-arp-perl libproc-daemon-perl libalgorithm-diff-perl \
libdbi-perl libdbd-mysql-perl
dpkg -i mysql-mmm-common_*.deb mysql-mmm-agent_*.deb
RedHat/CentOS 使用 yum install mysql-mmm-agent 自動解決依賴。
/etc/mysql-mmm/mmm_common.conf (所有節點相同):
active_master_role writer
<host default>
cluster_interface eth0
pid_path /var/run/mmmd_agent.pid
bin_path /usr/lib/mysql-mmm/
replication_user replication
replication_password replication_password
agent_user mmm_agent
agent_password agent_password
</host>
<host db1> ip 192.168.0.11 mode master peer db2 </host>
<host db2> ip 192.168.0.12 mode master peer db1 </host>
<host db3> ip 192.168.0.13 mode slave </host>
<host db4> ip 192.168.0.14 mode slave </host>
<role writer>
hosts db1, db2
ips 192.168.0.100
mode exclusive
</role>
<role reader>
hosts db1, db2, db3, db4
ips 192.168.0.101, 192.168.0.102, 192.168.0.103, 192.168.0.104
mode balanced
</role>
Agent 配置 /etc/mysql-mmm/mmm_agent.conf:include mmm_common.conf\nthis db1 (各節點對應修改)
監控配置 /etc/mysql-mmm/mmm_mon.conf:包含監控 IP、ping 監測 IP 列表等。
# 資料庫節點啟動 agent
/etc/init.d/mysql-mmm-agent start
# 監控節點啟動 monitor
/etc/init.d/mysql-mmm-monitor start
# 檢查叢集狀態
mmm_control show
首次啟動所有節點狀態為 AWAITING_RECOVERY,依序執行:
mmm_control set_online db1
mmm_control set_online db2
mmm_control set_online db3
mmm_control set_online db4