当前位置:首页 > 问答 > 正文

高可用性|数据库集群 mysql-mmm—mysql-mmm:实现高可用的MySQL数据库解决方案

🚀 MySQL-MMM:让数据库飞起来的“不倒翁”方案

🔥 最新动态

  • Azure Database for MySQL 新增“Self-Heal”功能(2025年8月),可自动解决服务器问题,减少人工干预。
  • MySQL 9.4 LTS 版本发布(2025年7月),强化企业级稳定性,支持更高效的元数据管理。
  • MySQL Router 8.4 优化二进制日志处理,降低空载集群的资源消耗(2025年8月)。

🤔 MySQL-MMM是什么?

MySQL-MMM(Master-Master Replication Manager)是一款基于Perl开发的开源工具,专为MySQL双主复制架构设计,提供自动故障转移读写负载均衡功能,它就像一个“数据库管家”,时刻监控主库状态,一旦主库挂掉,立刻把备库扶上位,同时把VIP(虚拟IP)无缝切换过去,保证业务不中断。

🔍 核心优势

  1. 高可用性
    • 主库故障时,自动将VIP切换至备库,服务中断时间缩短至秒级。
    • 支持多从库读负载均衡,避免单点压力。
  2. 简单易用
    • 通过脚本化配置,降低部署门槛。
    • 提供命令行工具(mmm_control)手动干预。
  3. 低成本

    基于开源组件,无需额外购买商业软件。

🛠️ 部署实战(基于CentOS 7.9 + MySQL 5.7)

环境准备

  • 5台服务器
    • 2台主库(Master1: 192.168.31.101,Master2: 192.168.31.102)
    • 2台从库(Slave1: 192.168.31.103,Slave2: 192.168.31.104)
    • 1台监控服务器(Monitor: 192.168.31.106)

步骤1:配置主主复制

  1. 修改MySQL配置(以Master1为例):
    vim /etc/my.cnf
    server-id=1
    log_bin=mysql-bin
    binlog_ignore_db=mysql,information_schema
    auto_increment_increment=2
    auto_increment_offset=1
    systemctl restart mysqld
  2. 授权复制账号
    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.31.%' IDENTIFIED BY '密码';
  3. 配置双向复制
    • Master1指向Master2:
      CHANGE MASTER TO MASTER_HOST='192.168.31.102', MASTER_USER='replication', MASTER_PASSWORD='密码';
      START SLAVE;
    • Master2指向Master1(同理)。

步骤2:安装MySQL-MMM

  1. 所有服务器安装依赖
    yum -y install gcc perl-Date-Manip perl-XML-DOM perl-Log-Log4perl mysql-mmm*
  2. 配置公共文件/etc/mysql-mmm/mmm_common.conf):
    active_master_role = writer
    <host default>
        cluster_interface = eth0
        replication_user = replication
        replication_password = 密码
        agent_user = mmm_agent
        agent_password = 密码
    </host>
    <host db1>
        ip = 192.168.31.101
        mode = master
        peer = db2
    </host>
    <host db2>
        ip = 192.168.31.102
        mode = master
        peer = db1
    </host>
    <role writer>
        hosts = db1, db2
        ips = 192.168.31.100
        mode = exclusive
    </role>
    <role reader>
        hosts = db3, db4
        ips = 192.168.31.101, 192.168.31.102
        mode = balanced
    </role>

步骤3:启动服务

  1. 监控服务器启动
    mmm_mon_start --config=/etc/mysql-mmm/mmm_mon.conf
  2. 数据库节点启动代理
    systemctl start mysql-mmm-agent

🧪 故障模拟与恢复

场景:Master1宕机

高可用性|数据库集群 mysql-mmm—mysql-mmm:实现高可用的MySQL数据库解决方案

  1. 监控检测
    • mmm_mon发现Master1无响应,触发故障转移。
  2. VIP切换

    写VIP(192.168.31.100)从Master1切换至Master2。

  3. 从库同步

    所有Slave自动重新指向Master2。

    高可用性|数据库集群 mysql-mmm—mysql-mmm:实现高可用的MySQL数据库解决方案

  4. 恢复验证
    mmm_control show

💡 最佳实践建议

  1. 定期演练:每月模拟主库故障,验证VIP切换和从库同步效率。
  2. 监控告警:集成Prometheus+Grafana,实时监控MySQL状态和MMM日志。
  3. 备份策略:结合MyDumper的-M选项生成校验和,确保备份一致性。

MySQL-MMM虽非“银弹”,但在数据一致性要求不高的场景下,仍是中小企业的性价比之选,随着MySQL 9.4 LTS的发布,结合Azure等云平台的Self-Heal功能,高可用架构正朝着“零干预”方向演进,或许我们不再需要手动配置VIP,但MMM的思想——通过脚本化实现自动化运维,依然值得借鉴。

🔗 参考链接

发表评论