一、来源及原理:

   众所周知,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. iOS信号量的使用

    Core Audio render thread and thread signalling up vote2down votefavorite   Does iOS have any kind of ...

  2. [转]Jenkins使用 管理节点

    现在我们已经搭建好了基本的Jenkins环境,在这一集里,我们说一说如何管理节点. 进入“系统管理”中的“管理节点”. 创建Windos系统的奴隶节点 先创建一台安装了Win7系统的虚拟机,作为Jen ...

  3. Chrome和IE中使用window.open函数

    做前端开发的人员经常回遇到使用windows.open这个函数来打开一个新的网页窗口,使用这个函数的时候有些需要注意的地方,在Chrome和IE下该函数还是有一些细节性的区别. 以下是我在项目中使用的 ...

  4. Unity3D-坐标转换笔记

    Transform.TransformPoint 作用 : 将一个点从以自身为坐标系的本地坐标转换成世界坐标 Transform.InverseTransformPoint 作用 : 将一个点从世界坐 ...

  5. 在博文中嵌入Javascript代码

    今天吃饭时无聊,突然想到Markdown除了兼容HTML会不会也兼容Javascript,于是博文里除了码文插音乐还可以干点更好玩的事儿了,可以自动修改markdown文件本身,比如说自动修改从Git ...

  6. Kafka Shell基本命令(包括topic的增删改查)

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 创建kafka topic 查看所有topic列表 查看指定topic信息 控制台向topic生产数据 控制台消费topi ...

  7. Java的数组长度无需编译指定,因为它是对象

    大家可以看从Thinking in Java中摘出来的代码理解一下,甚至.多维数组的子数组无须等长 //: MultiDimArray.java// Creating multidimensional ...

  8. java基础小知识

    1.1常量: 基本数据类型常量 字符常量 整数常量的表现形式:一进制的形式来表示(二进制,八进制,十进制,十六进制) 生活中:十进制(0-9)  ,星期(七进制(0-6)) ,时间(十二进制(0-11 ...

  9. study java language

    2016.11.30 1).About the Java Technology 2).The Java Language Environment: Contents

  10. 如何通过IP地址添加网络打印机

    以惠普的HP LaserJet 8100 Series PCL6为例. 1.从开始菜单选择“打印机和传真”. 2.鼠标右键“添加打印机”,然后单击“下一步”,选择“连接到这台计算机的本地打印机”,注意 ...