一、概述

本文将介绍mysql的MMM(Master-Master replication manager for MySQL)方案。官方文档地址:https://mysql-mmm.org/start.html
MMM架构由三台mysql服务器(两主一从)和一台监控节点组成,主库只有一台能对外提供写服务,另外一台主和从只对外提供读服务。当提供写服务的主库服务器发生故障时,能自动将写的vip漂移到另外一台写库上,并将从库重新指向另一台写库,实现高可用。

写库故障发生前:

写库故障发生后:

二、节点介绍

本次实验采用4台虚拟机,操作系统版本Centos6.10,mysql版本5.7.25
monitor  10.40.16.60  监控  监控集群
node1    10.40.16.61  主库  提供写服务
node2    10.40.16.62  主库  提供读服务
node3    10.40.16.63  从库  提供读服务

还须预留4个vip,不用手工配置,这里先提一下,后面的安装步骤用得到
10.40.16.71  写vip
10.40.16.72  读vip
10.40.16.73  读vip
10.40.16.74  读vip

三、安装

1. 配置双主一从

其中node1与node2互为主从,node3作为node1的从。具体的复制搭建这里就省略,要是这都不会,那么该文章对你就没意思了。顺便安利一个自己写的mysql一键安装脚本https://www.cnblogs.com/ddzj01/p/10678296.html
注明:集群中使用的复制账号为repl,密码是'123456'

node1(10.40.16.61)
(root@localhost)(none)]> show slave status\G
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 10.40.16.62
                   Master_User: repl
                  
node2(10.40.16.62)
(root@localhost)[(none)]> show slave status\G
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 10.40.16.61
                   Master_User: repl

node3(10.40.16.63)
(root@localhost)[(none)]> show slave status\G
*************************** 1. row ***************************
                Slave_IO_State:
                   Master_Host: 10.40.16.61
                   Master_User: repl
                
可以看到node1和node2互为主备,node3作为node1的备

2. 下载扩展包(node1&node2&node3&monitor)

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
rpm -ivh epel-release-latest-6.noarch.rpm

编辑文件/etc/yum.repos.d/epel.repo

将该文件的第三行取消注释,第四行添加注释,如下所示

3. 安装MMM包

每个数据库节点(node1&node2&node3)
yum install -y mysql-mmm-agent.noarch

监控节点(monitor)
yum install -y mysql-mmm-*

4. 创建相关账号

在node1中创建以下账号

监控账号(监控数据库状态)
(root@localhost)[(none)]> grant replication client on *.* to 'mmm_monitor'@'%' identified by '123456';

代理账号(MMM代理)
(root@localhost)[(none)]> grant super, replication client, process on *.* to 'mmm_agent'@'%' identified by '123456';

5. 修改配置文件

所有中文的注释是要修改的地方,注意不要在配置文件中写任何注释
在monitor中编辑/etc/mysql-mmm/mmm_mon.conf

在monitor中编辑/etc/mysql-mmm/mmm_common.conf,传给其它三个节点,内容都一致

scp /etc/mysql-mmm/mmm_common.conf 10.40.16.61:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf 10.40.16.62:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf 10.40.16.63:/etc/mysql-mmm/

在node1&node2&node3中编辑/etc/mysql-mmm/mmm_agent.conf,更改'this db1',与mmm_common保持一致

6. 启动

node1&node2&node3
[root@mysqla ~]# service mysql-mmm-agent start
[root@mysqlb ~]# service mysql-mmm-agent start
[root@mysqlc ~]# service mysql-mmm-agent start

monitor
[root@monitor ~]# service mysql-mmm-monitor start

7. 查看

在monitor中
[root@monitor ~]# mmm_control show  # 查看集群状态

  
[root@monitor ~]# mmm_control checks all  # 查看更加具体的信息

四、MMM优缺点

优点:
1. 提供读写vip
2. 提供从服务器的延迟监控,在从服务器出现大量的主从延迟或主从链路中断时,可以把这台从服务器上的读的vip,飘移到集群中其它正常的节点上
3. 提供主数据库故障转移后从服务器对新主的重新同步功能

缺点:
1. 发布时间较早,文档最后更新的时间是2012年,存在一些bug,并且不支持gtid服务功能
2. 没有读负载均衡的功能
3. 进行主从切换时,新主如果落后于旧主,容易造成新主的数据丢失。如果从库落后于旧主,从库指向新的主库的时候,也会造成从库部分数据丢失。
4. 如果从服务器的日志较新主的服务器日志新,那么就是主从不一致的,会出现事务重复提交。

五、实验

关于mmm的实验请看下一篇博客(https://www.cnblogs.com/ddzj01/p/11543090.html)

Mysql - 高可用方案之MMM(一)的更多相关文章

  1. Mysql - 高可用方案之MMM(二)

    一.概述 上一篇博客中(https://www.cnblogs.com/ddzj01/p/11535796.html)介绍了如何搭建MMM架构,本文将通过实验介绍MMM架构的优缺点. 二.优点 1. ...

  2. [转]MYSQL高可用方案探究(总结)

    前言 http://blog.chinaunix.net/uid-20639775-id-3337432.htmlLvs+Keepalived+Mysql单点写入主主同步高可用方案 http://bl ...

  3. [转载] MySQL高可用方案选型参考

    原文: http://imysql.com/2015/09/14/solutions-of-mysql-ha.shtml?hmsr=toutiao.io&utm_medium=toutiao. ...

  4. MySQL高可用方案-PXC环境部署记录

    之前梳理了Mysql+Keepalived双主热备高可用操作记录,对于mysql高可用方案,经常用到的的主要有下面三种: 一.基于主从复制的高可用方案:双节点主从 + keepalived 一般来说, ...

  5. 五大常见的MySQL高可用方案【转】

    1. 概述 我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中 ...

  6. mysql高可用方案MHA介绍

    mysql高可用方案MHA介绍 概述 MHA是一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用.在宕机的时间内(通常10-30秒内),完成故障切换,部署MHA, ...

  7. Heartbeat+DRBD+MySQL高可用方案【转】

    转自Heartbeat+DRBD+MySQL高可用方案 - yayun - 博客园 http://www.cnblogs.com/gomysql/p/3674030.html 1.方案简介 本方案采用 ...

  8. MySQL高可用方案MHA的部署和原理

    MHA(Master High Availability)是一套相对成熟的MySQL高可用方案,能做到在0~30s内自动完成数据库的故障切换操作,在master服务器不宕机的情况下,基本能保证数据的一 ...

  9. MySQL高可用方案MHA自动Failover与手动Failover的实践及原理

    集群信息 角色                             IP地址                 ServerID      类型 Master                     ...

随机推荐

  1. C语言|博客作业10

    问题 回答 C语言 博客作业10 这个作业要求在哪里 作业要求 我在这个课程的目标是 熟练循环语句的用法 这个作业在哪个具体方面帮助我实现目标 pta作业 参考文献 <C语言程序设计> 1 ...

  2. Linux:AWK基础

    AWK是一个强大的文本分析工具,算是Linux系统特别有用的命令了,在日志分析.文件内容分析中扮演特别重要的角色. AWK说明 简单来说awk就是把文件逐行的读入,以指定的分隔符将每行分割,分割后的部 ...

  3. java8 按两个属性分组,并返回扁平List; stream排序

    --------------- java8 按两个属性分组,并返回扁平List /** * 设置大区小区分组排序 * @param dtoList */ private List<Perform ...

  4. Qt之高DPI显示器(一) - 解决方案整理

    目录 DPI发展 1.PPI 2.DPI 一.Win自适应系统 二.Qt机制 1.Windows系统DWM缩放 2. Qt适配高DPI 3.适配DPI结论 三.Qt适配 四.自己适配 1.窗口大小 2 ...

  5. 【Python成长之路】词云图制作

    [写在前面] 以前看到过一些大神制作的词云图 ,觉得效果很有意思.如果有朋友不了解词云图的效果,可以看下面的几张图(图片都是网上找到的): 网上找了找相关的软件,有些软件制作 还要付费.结果前几天在大 ...

  6. aplipay支付-app支付之前后端实现

    目录 前言 一 前台aplipay实现 1.1 安装0x5e/react-native-alipay 1.2. 配置 1.3. Alipay.pay(orderStr) 二 后端 2.1 服务端sdk ...

  7. [TimLinux] JavaScript 元素动态显示

    1. css的opacity属性 这个属性用于:设置元素的不透明级别,取值范围:从 0.0 (完全透明)到 1.0(完全不透明),元素所在的文本流还在.这个属性的动态变化可以用来设置元素的淡入淡出效果 ...

  8. 第5节:Java基础 - 必知必会(下)

    第5节:Java基础 - 必知必会(下) 本小节是Java基础篇章的第三小节,主要讲述Java中的Exception与Error,JIT编译器以及值传递与引用传递的知识点. 一.Java中的Excep ...

  9. A* 算法讲解

    在看下面这篇文章之前,先介绍几个理论知识,有助于理解A*算法. 启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省略大量无 ...

  10. Selenium之下拉框操作

    下拉框操作: 一般下拉框适用场景:在新增时有下拉框选项,在二级联动或多级联动有下拉(比如:在选择省市县时的多级联动下拉). 下拉框选择都有select的标签属性,存在两个属性select和option ...