概念

3M是一套灵活的基于perl编写的脚本程序,自己本身不提供mysql服务的功能,它是用来对mysql replication 进行监控和故障迁移,并能管理mysql Master-Master复制的配置。(同一时间只有一个节点是可写的)。附带的工具套件可以实现多个slaves的read负载均衡。

被管理的mysql server机需要安装相关的agent脚本,mysql-mmm的监控端就可以对安装过此监控脚本的mysql server 进行监控。

但是在出现多台可写的mysql server 时,mmm为了防止写入冲突,保证数据有效性,在同一时间,它只允许一台mysql server进行写入操作,所以呢,它并不适用与有着大并发写入请求的生产环境。但是呢,当有多台可读的mysql server 存在的时候,它可以通过一些其他软件的配合,来实现读取请求的负载均衡,这样大大提高mysql server 的读取性能。

最亮的来了,在运行某一台mysql server处于不可用状态的时候,mmm可以将原有的操作请求迁移到其他的mysql server,从而实现了服务的高可用性。包括写请求迁移,读请求迁移,主从同步的master迁移。

mmm同时也提供了一套很好的运维管理工具,可以实现简单快捷的数据备份与维护。简化管理员的日常维护成本。
image.png

mysql-mmm的组成以及原理

三个脚本:

  1. mmm_mond: 监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监管机上运行。
  2. mmm_agentd: 运行在每个mysql服务器上的代理进程,完成监控的探针工作,执行简单的远端服务设置,此脚本需要在被监管机器上运行。
  3. mmm_control: 提供管理mmm_mond进程的命令。

mmm的监管端会提供多个虚拟IP 我们简称VIP,包括一个可写VIP,多个可读的VIP,通过监管的管理,这些IP会绑定在可用mysql之上,当某台mysql故障时,监管机就会将它的虚拟IP迁移到其他的mysql。

所以呢,我们要在mysql中添加相关的授权用户,以便能够让mysql可以支持监理机的监控,授权的用户一般包括2个,mmm_minitor和 mmm_agent两个用户,如果你想使用mmm的备份工具呢,还需要再添加一个mmm_tools用户。

优点:

  • 提供了读写VIP的配置,试读写请求都可以达到高可用
  • 工具包相对比较完善,不需要额外的开发脚本
  • 完成故障转移之后可以对MySQL集群进行高可用监控

缺点:

  • 简单粗暴,容易丢失事务,建议采用半同步复制方式,减少失败的概率
  • 目前MMM社区已经缺少维护,不支持基于GTID的复制

适用场景:

  • 读写都需要高可用的
  • 基于日志点的复制方式

MYSQL-3m架构回顾