一、来源及原理:

   众所周知,MySQL自身提供了AB复制(主从复制),然后可以很轻松实现master-master双向复制,同时再为其中一个Master节点搭建一个Slave库。

这样就实现了MySQL-MMM架构的基础:master1和master2之间双向复制,同时Master1和Slave1之间是主从复制。这样整个体系中存在两个Master,正常情

况下只有一个master对外提供写服务。如果对外提供服务的master意外宕机了,这是MySQL本身并不具备failover切换的能力,尽管集群中仍然有一个正常的master节点,

但应用仍不可用。mysql-mmm就是为了解决这个问题诞生的。

  MySQL-MMM是Master-Master Replication Manager for MySQL(mysql主主复制管理器)的简称,是Google的开源项目(Perl脚本),主要用来监控mysql主主复制并做失败转移。

  其原理是将真实数据库节点的IP(RIP)映射为虚拟IP(VIP)集,在这个虚拟的IP集中,有一个专用于write的IP,多个用于read的IP,这个用于Write的VIP映射着

数据库集群中的两台master的真实IP(RIP),以此来实现Failover的切换,其他read的VIP可以用来均衡读(balance)。

其结构图如下:

二、优缺点:

  

优点:

1、自动的主主Failover切换 2、多个Slave读的负载均衡。

缺点:

1、无法完全保证数据的一致性(在db1宕机过程中,一旦db2落后于db1,这时发生切换,db2变成了可写状态,数据的一致性就无法保证)

2、无论何时,只有一个数据库可写;db1宕机后,write VIP会指向db2,当db1恢复后,db1不会自动变成可写主,需要手动move_role 或者db2宕机。

所以read host要包括db1,不然容易造成浪费;

3、由于是使用虚拟IP浮动技术,类似Keepalived,故RIP(真实IP)要和VIP(虚拟IP)在同一网段;如果是在不同网段也可以,需要用到虚拟路由技术。

但是绝对要在同一个IDC机房,不可跨IDC机房组建集群。

LVS-DR VIP和RIP不同网段的配置方法 :http://blog.itpub.net/124805/viewspace-1047686/http://zh.linuxvirtualserver.org/node/28

4、monitor单点问题,或许可以用keepalived来解决。

三、MySQL-MMM Monitor:

1、6种状态

1)ONLINE 正常运行状态

2)ADMIN_OFFLINE 人工设置为离线状态

3)HARD_OFFLINE 离线状态(ping失败/mysql连接失败)

4)AWAITING_RECOVERY 主机将恢复在线

5)REPLICATION_DELAY 复制延时大(rep_backlog检测失败)

6)REPLICATION_FAIL 复制线程没有运行(rep_threads检测失败),复制中断(sql_thread,io_thread)会导致replication_fail状态

  只要主机处在ONLINE才能获得角色。当从ONLINE状态切换到其他状态时,角色将移除。

  当主机处在REPLICATION_DELAY或REPLICATION_FAIL状态,一旦恢复,将切换到ONLINE状态。除非抖动不稳定。

  主机在HARD_OFFLINE状态,如果所有的问题都解决了,那么将会切换到AWAITING_RECOVERY状态。如果它故障时间小于60s,并且它没有重启或者auto_set_online>0,

那么将会被自动切换到ONLINE状态,除非抖动不稳定。

  活动的主服务器复制延时或复制失败将不被视为一个问题。因此活动的主服务器状态不会被置于REPLICATION_DELAY或REPLICATION_FAIL。

  在节点被切换到ONLINE状态的60s内,如果复制延时或复制失败将会被忽略(默认时间为master-connect-retry值)。

  如果rep_backlog和rep_threads都检测失败,将会切换到REPLICATION_FAIL状态。

2、mysql-mmm的主要功能通过以下三个脚本来实现:

mmm_mond:监控进程,监控所有服务器,决定节点角色。

mmm_agentd:代理进程,运行在每台MySQL服务器上,为监控节点听简单的远程服务。

mmm_control:为mmm_mond 提供管理命令

3、角色

exclusive角色:互斥角色只有一个ip,并且同一时间只能分配给一个主机。可以指定一个首选主机(preferred 存疑??),如果这个主机是ONLINE状态

,那么角色将被赋予到这个主机。注意:不能移动被分配到首选主机的角色,因为他们将立刻再次被移动回到它。

balanced角色:负载均衡角色可以有多个ip。没有一个主机可以比其他主机多出两个角色。

4、检测

mmm_mond对每个主机检测4项决定是否OK

1)ping 主机是否存活

2)mysql mysqld进程是否存活

3)rep_threads 复制线程是否运行

4)rep_backlog 延时少,复制积压的日志很少

抖动:

mmm_mond 支持抖动检测。如果一个主机频繁从ONLINE切换到HARD_OFFLINE或者REPLICATION_FAIL或者REPLICATION_DELAY状态,每次切换到ONLINE状态(auto_set_online或者

down的时间小于60s),将会导致角色的切换非常频繁。为了避免这种情况mmm_mond内建了flap检测,可以通过配置文件配置。如果一个主机在flap_duration时间内宕掉了

flap_count次,就认为主机处理flap状态,就不会自动被设置为ONLINE状态,将一直处于AWAITING_RECOVERY状态除非手动设置online(mmm_control set online host)。

如果auto_set_online>0,处于flapping的主机在flap_duration时间后将自动设置为ONLINE状态

5、模式

active mode:Monitor将会自动的把角色从失败的主机上移除,并切换到其他主机上。

manual mode:Moniter会自动把负载均衡的角色分配给对应主机,但是不会自动的把角色从失败的主机上移除。可以通过move_role来手工移除。

wait mode:类似manual模式,但是当两个master都是online状态或者超过了wait_for_other_master的时间,将被切换为ACTIVE模式。

passive mode:在此模式下,monitor不会改变角色,不更新状态文件和发送任何信息给mmm agents。在此模式下可以使用set_ip来改变roles,但是这些改变在monitor切换到

ACTIVE或者MANUAL模式(set_active or set_manual)前都不会生效。在启动时检测到角色发生冲突将会进入被动模式。

四、MySQL-MMM control:

通过mmm_control 命令来控制monitor守护进程,如果有多个集群,则需指定想要控制的集群名称。

ping         检测monitor是否存活

show         查看当前集群服务状况

checks [host|all]  查看指定节点的状态

set_online host   把节点的状态从awaiting_recovery或者admin_offline恢复到online

set_offline host   为了维护一个节点,手动的将其设置为admin_offline状态,这个节点上的所有角色都会被移除,并且停止mysql复制

mode         查看当前模式

set_active     切换monitor到active模式

set_manual     切换monitor到manual模式

set_passive    切换monitor到passive模式

move_role role host  在集群节点间切换exclusive角色。在passive模式下无效。

move_role --force role host  可以将active_master_role切换到处在REPLICATION_FAIL或REPLICATION_DELAY状态的主机上。在passive模式下无效。

set_ip ip host  可以在passive模式下,维护角色。当monitor切换到ACTIVE或MANUAL模式下后才生效。

五、MySQL-MMM 具体搭建步骤:

官方文档看这里:http://mysql-mmm.org/mmm2:guide

自己搭建教程看这里:暂无

六、报错及其他:

1、linux shell 下用ip add 看虚拟ip绑定情况

2、agent端通过一系列perl脚本完成一些操作(/usr/libexec/mysql-mmm/agent/),比如check_ip,configuer_ip

[MySQL] 高可用架构MMM简单介绍的更多相关文章

  1. MySQL高可用架构-MMM环境部署记录

    MMM介绍MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序.MMM使用Perl语言开发,主要用来监控和管理 ...

  2. MySQL高可用架构-MMM安装教程

    安装指南: 一.架构以及服务器信息 基本安装包含至少2个数据库服务器和1个监视服务器.本例中使用2个监视服务器和5个数据库服务器(服务器系统为CentOS 7) 用途 IP 主机名 Server-id ...

  3. MySQL高可用架构-MMM、MHA、MGR、PXC

    主从复制如何工作 在主库把数据记录到binlog(二进制日志). 备库开IO线程把binlog复制到自己的relaylog(中继日志). 备库读取中继日志,重放到备库上. 半同步复制 半同步复制可以确 ...

  4. (转)MySQL高可用架构之MHA

    MySQL高可用架构之MHA  原文:http://www.cnblogs.com/gomysql/p/3675429.html 简介: MHA(Master High Availability)目前 ...

  5. MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解

    MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Mycat介绍 1>.什么是Mycat Mycat背后是 ...

  6. 从mysql高可用架构看高可用架构设计

    高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...

  7. MySQL 高可用架构在业务层面的应用分析

    MySQL 高可用架构在业务层面的应用分析 http://mp.weixin.qq.com/s?__biz=MzAxNjAzMTQyMA==&mid=208312443&idx=1&a ...

  8. mysql高可用架构之MHA,haproxy实现读写分离详解

    MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理    权限的管理] 3.容灾       保证数据不丢失. 二.工作中MySQ ...

  9. 032:基于Consul和MGR的MySQL高可用架构

    目录 一.Consul 1.Consul简介 2.准备环境 3.Consul 安装 4.Consul配置文件 5.Consul 服务检查脚本 6.Consul启动 二.MGR搭建 1.MGR配置 2. ...

随机推荐

  1. Java(四)

    下面的代码可以实现以字节为单位复制文件的功能,适合复制非文本类型的文件,为了更清楚的观测运行速率,我加入了程序计时器,代码如下: import java.io.FileInputStream; imp ...

  2. 课前HTML基础

    一..站点的建立 作用:用来归纳一个网站上所有的网页,素材以及他们之间的联系. 站点根文件夹的命名规则:必须是以英文或者下划线开头,后面可接数字和下划线,不可以使用中文和特殊字符. 二:创建HTML页 ...

  3. 黑马----JAVA异常

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA异常 一.JAVA异常有三种语句块:try语句块.catch语句块.finally语句块. 1.try语句 ...

  4. 如何用js定义数组,用js来拼接json字段

    定义js数组的方式有: var arr = (); var arr = []; var arr = new Array(); 如何拼接成一个json字段. <!DOCTYPE HTML PUBL ...

  5. jQuery 遍历 - each() 方法

    定义和用法 each() 方法规定为每个匹配元素规定运行的函数. 提示:返回 false 可用于及早停止循环. 语法 $(selector).each(function(index,element)) ...

  6. oracle的分析函数over 及开窗函数

    转:http://www.2cto.com/database/201310/249722.html oracle的分析函数over 及开窗函数   一:分析函数over   Oracle从8.1.6开 ...

  7. oracle数据库卸载(需要完全卸载oracl才能重装)

    1. 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务. 2. 开始->程序->Oracle - OraHome81->Oracle I ...

  8. SILVERLIGHT 应急卫生模拟演练项目之GRID布局

    上篇文章 我介绍了LOADING界面 loading加载完成后 会进入主界面 效果图如下 这里我要给大家说一下我在布局方面的应用  说起布局 做过SL开发的一定都知道 Grid,StackPanel和 ...

  9. python用Tesseract读取图片中的中文,出现乱码

    到http://download.csdn.net/detail/wanghui2008123/7621567下载中文简体包 然后找到tessdata目录,把eng.traineddata替换为chi ...

  10. Android添加快捷方式

    private void addShortcutToDesktop() { Intent shortcut = new Intent("com.android.launcher.action ...