MySql高可用集群之MMM(Multi-Master Replication Manager for MySQL)

MMM是:Multi-Master Replication Manager for MySQL,取其中的三个M开头的单词简写。它是mysql多主复制管理器,基于perl实现,关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),MMM也能对从服务器进行读负载均衡,所以可以用它来在一组用于复制的服务器启动虚拟ip,除此之外,它还有实现数 据备份、节点之间重新同步功能的脚本。
MySQL本身没有提供replication failover的解决方案,通过MMM方案 能实现服务器的故障转移,从而实现mysql的高可用。MMM不仅能提供浮动IP的功能,如果当前的主服务器挂掉后,会将你后端的从服务器自动转向新的主服务器进行同步复制,不用手工更改同步配置。从字面来理解就是它有两个master节点,并且实现了这两个master节点的高可用。结构图
MMM主要功能,由下面三个脚本提供:
mmm_mond 负责所有的监控工作的监控守护进程,决定节点的移除(mmm_mond进程定时心跳检测,失败则将write ip浮动到另外一台master)
mmm_agentd 运行在mysql服务器上的代理守护进 程,通过简单远程服务集提供给监控节点
mmm_control 通过命令行管理mmm_mond进程 在整个监管过程中, 需要在mysql中添加相关授权用户,授权的用户包括一个mmm_monitor用户和一个mmm_agent用户,如果想使用mmm的备份工具则还要添加一个mmm_tools用户。

MMM架构的优点
可以兼容不同系列的MySQL来做高可用。比如有MySQL官方社区版本,有percona版本的,有MariaDB版本的MySQL。这样的集群可以可以使用MMM架构来做高可用。
高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证 的数据的一致性。
当主服务器挂掉以后,另一个主立即接管,其他的从服务器能自动切换,不用人工干预。
MMM架构的缺点
是一种比较老的MySQL高可用实现方式,因为社区不活跃,所以目前已经没有人在维护这个组件了。
只能基于日之点的主从复制集群架构来做高可用,不支持基于GTID的主从复制集群架构。这也是因为社区活跃,没有维护这个组件导致不支持GTID。
数据不能保证100%的一致性,这个是以为它在做故障转移的时候实现的方式所导致的同时也有异步复制机制。如果对于数据需要强一致性,则不能选择MMM高可用架构,可以考虑MHA高可用架构。
monitor节点是单点(故障转移过程中,可能会存在一段时间的数据库不可用),不过这个可以结合keepalived或者haertbeat做成高可用。
至少三个节点,2个master,1个slave,对主机的数量有要求,
在读写非常繁忙的业务系统下表现不是很稳定,可能会出现复制延时、切换失效等问题。
MMM方案并 不太适应于对数据安全性要求很高,并且读、写 繁忙的环境中。
需要实现读写分离,还需要在前端编写读写分离程序,或者结合数据库中间件如mycat来解决。

如何搭建MMM高可用架构
要想实现MMM高可用架构,我们先来搭建一个双主双从的MySQL集群,然后在这个集群的基础上来完成MMM高可用的架构。

第一步部署Mysql(docker)
-----------------------------------
docker run
	--net=${
   网段名}:指定容器运行的时候使用的网段。(network create --subnet=${
   网段} 网段名)
	--hostname ${
   主机名}:指定容器的主机名称。
	--ip ${
   IP}:指定容器使用的IP地址。
	--cap-add NET_ADMIN:
		=》默认容器运行的时候,没有增加额外的Linux的功能,这里我们要增加上NET_ADMIN的功能。
    --name ${
   容器名}:指定容器的名称(后续下线操作使用)
    -d:以demon进程的方式运行容器
    -v ${
   localPath}:${
   dockerPath}:把本地的目录挂载到容器中的/etc/mysql/conf.d目录下
    -e MYSQL_ROOT_PASSWORD=root:向容器内传入参数,我们指定MySQL数据库root用户的密码也为root。
    -e TZ="Asia/Shanghai":向容器内传入参数,这里我们指定的容器中使用的系统的时区为上海时间
    -p ${
   localPort}:${
   dockerPort}:
    	=》	我们指定容器中的3306端口,映射到我们本地为指定端口。这样我们在本地访问MySQL服务的时候,就可以通过对应端口来访问。
     ${
   镜像名}:
     	=》这个是我们要运行的容器的名称和版本。从docker hub中自动拉取这个镜像名称和版本到本地,然后再启动这个镜像。
    -------------------------------------------------------
    1号机IP:172.20.0.11
    2号机IP:172.20.0.21
    3号机IP:172.20.0.12
    4号机IP:172.20.0.22
--------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值