`

MySQL Master-Slave架构下使用MMM的必要性

 
阅读更多

MySQL本身没有提供replication failover的解决方案(见How can I use replication to provide redundancy or high availability?)

如何使Replication方案具有HA?

答案是MMM(MySQL Master-Master Replication Manager)

MMM对MySQL Master-Slave Replication绝对是一个很有益的补充!

引言

Master-Slave的数据库机构解决了很多问题,特别是read/write比较高的web2.0应用:
1、写操作全部在Master结点执行,并由Slave数据库结点定时(默认60s)读取Master的bin-log
2、将众多的用户读请求分散到更多的数据库节点,从而减轻了单点的压力

这是对Replication的最基本陈述,这种模式的在系统Scale-out方案中很有引力(如有必要,数据可以先进行Sharding,再使用replication)。

它的缺点是:
1、Slave实时性的保障,对于实时性很高的场合可能需要做一些处理
2、高可用性问题,Master就是那个致命点([url="http://en.wikipedia.org/wiki/Single_point_of_failure "]SPOF:Single point of failure[/url])

本文主要讨论的是如何解决第2个缺点。

DB的设计对大规模、高负载的系统是极其重要的。高可用性([url="http://en.wikipedia.org/wiki/High_availability "]High availability[/url])在重要的系统(critical System)是需要架构师事先考虑的。存在[url="http://en.wikipedia.org/wiki/Single_point_of_failure "]SPOF:Single point of failure[/url]的设计在重要系统中是危险的。


Master-Master Replication
1、使用两个MySQL数据库db01,db02,互为Master和Slave,即:
一边db01作为db02的master,一旦有数据写向db01时,db02定时从db01更新
另一边db02也作为db01的master,一旦有数据写向db02时,db01也定时从db02获得更新
(这不会导致循环,MySQL Slave默认不会记录Master同步过来的变化)

2、但从AppServer的角度来说,同时只有一个结点db01扮演Master,另外一个结点db02扮演Slave,不能同时两个结点扮演Master。即AppSever总是把write操作分配某个数据库(db01),除非db01 failed,被切换。

3、如果扮演Slave的数据库结点db02 Failed了:
   a)此时appServer要能够把所有的read,write分配给db01,read操作不再指向db02
   b)一旦db02恢复过来后,继续充当Slave角色,并告诉AppServer可以将read分配给它了

4、如果扮演Master的数据库结点db01 Failed了
   a)此时appServer要能够把所有的写操作从db01切换分配给db02,也就是切换Master由db02充当(mmmd-mon监控到db01不可用后就通过mmmd-agent 在db02上执行mysql 命令使其成为master,在原db01的slaves机器上分别执行mysql 命令修改其replication所需要的master机器IP地址)
   b)db01恢复过来后,充当Slave的角色,Master由db02继续扮演

  



Master-Master with n Slaves Replication 


 

这比上一个还要复杂,即:
当一个Master Fail时,所有的Slave不再从原来失败的那个Master(db01)获取更新日志,而应该“自动”切换到最新充当Master角色的数据库db02。

MMM,a greate project!
MMM的基本信息请参考它的网站(见后"参考资料")
MMM有3个重要的器件:
1、mmmd_mon - monitoring script which does all monitoring work and makes all decisions about roles moving and so on.
2、mmmd_agent - remote servers management agent script, which provides monitoring node with simple set of remote services to make servers management easier, more flexible abd highly portable.
3、mmm_control - simple script dedicated to management of the mmmd_mon processes by commands.

每一个MySQL服务器器结点需要运行mmmd_agent,同时在另外的一个机器上(可以是独立的一台机器,也可以是和AppServer共享同一个服务器)运行mmmd_mon。形成1 * mmmd_mon + n * mmmd_agent的部署架构。

MMM利用了虚拟IP的技术:1个网卡可以同时使用多个IP。
(所以使用MMM时,需要2*n+1个IP,n为mysql数据库结点个数,包括master,slave)

当有数据库结点fail时,mmmd_mon检测不到mmmd_agent的心跳或者对应的MySQL服务器的状态,mmmd_mon将进行决定,并下指令给某个正常的数据库结点的mmmd_agent,使得该mmmd_agent“篡位”使用(注)刚才fail的那个结点的虚拟IP,使得虚拟IP实际从指向fail的那个机器自动转为此时的这个正常机器。
注:据Qieqie猜测是将获得的虚拟IP设置给网卡,也只能这样了,改天测试验证一下。

repeat: MMM对MySQL Master-Slave Replication绝对是一个很有益的补充!

参考资料
Switching Masters During Failover
http://dev.mysql.com/doc/refman/5.1/en/replication-solutions-switch.html

downpour: 讨论一下基于Master-Slave数据库模式的J2EE开发的框架选择
http://www.iteye.com/topic/143714

MMM http://blog.kovyrin.net/mysql-master-master-replication-manager/
Project page on Google Code: http://code.google.com/p/mysql-master-master
mmm-devel users group: http://groups.google.com/group/mmm-devel

  • 大小: 36.1 KB
分享到:
评论

相关推荐

    Modbus-Master-Slave-for-Arduino-master.zip_Master/Slave_arduino

    标题中的"Modbus-Master-Slave-for-Arduino-master.zip_Master/Slave_arduino"指出这是一个关于Arduino平台的Modbus主从通信库。Modbus是一种广泛使用的工业通信协议,允许不同设备之间交换数据,尤其在自动化系统中...

    搭建MySQL的MasterSlave架构

    MySQL的Master-Slave架构是一种常见的数据库高可用性和负载均衡解决方案。它允许数据从一个主服务器(Master)实时同步到一个或多个从服务器(Slave)。在这种架构中,所有的写操作都在主服务器上执行,而从服务器则...

    基于MySQL数据库复制Master-Slave架构的分析

    MySQL数据库复制Master-Slave架构是一种常见的数据库高可用性和扩展性的解决方案。在这一架构中,数据库被分为一个主服务器(Master)和一个或多个从服务器(Slave)。主服务器接收并处理所有的写操作,如INSERT、...

    sharding-master-slave

    在`sharding-master-slave`项目中,我们将看到如何将`Sharding-JDBC`与`SpringBoot`相结合,以实现数据的高效管理和访问。 1. **分库分表策略** `Sharding-JDBC`支持自定义分片策略,这在`描述`中提到。通常,分片...

    数据库-Mongodb的master-slave模式与master-master模式实验.rar

    在分布式系统中,为了确保数据的高可用性和容错性,MongoDB提供了两种复制模式:master-slave(主从模式)和master-master(主主模式)。本实验将深入探讨这两种模式的工作原理、设置方法以及它们在实际应用中的优...

    activemq_master-slave集群安装文档

    ActiveMQ Master-Slave集群是一种高可用性和容错性的解决方案,确保即使主节点(Master Broker)发生故障,消息也不会丢失,因为它们已经被复制到从节点(Slave Broker)。这种配置是ActiveMQ推荐的策略之一,提供了...

    Mysql-master-slave.rar_Master/Slave_slave mysql

    MySQL的主从复制是数据库高可用性和数据冗余的一种常见实现方式,它允许数据从一个服务器(主服务器)同步到一个或多个其他服务器(从服务器)。这种架构在处理大量读取操作、提供故障切换能力以及分布式系统中尤其...

    MySQL-MMM架构部署使用与性能调优

    在本案例中,我们将探讨如何实现MySQL-MMM (MySQL Master-Master Cluster) 的架构部署。主要任务包括安装依赖包、安装软件包以及配置MySQL-MMM。 **1.2 方案** 为了构建MySQL-MMM架构,我们将使用5台RHEL6虚拟机,...

    activemq-master-slave集群安装文档.doc

    Master-Slave架构的核心思想是通过将消息复制到备用的Slave Broker,确保即使主Master Broker发生故障,服务也能无缝切换到Slave Broker,避免数据丢失。在ActiveMQ中,主要有三种Master-Slave实现:Pure Master ...

    Master-Slave 的应用一

    在企业级开发中,主从关系(Master-Slave)是一种常见的架构模式,广泛应用于数据库复制、分布式系统、任务调度等多个领域。这种模式的核心在于,一个主节点(Master)负责处理请求、执行关键操作或决策制定,而一个...

    activemq master-slave搭建的NFSV4文档

    为了实现高可用性和容错性,ActiveMQ 支持主从(master-slave)架构,这种架构可以通过复制数据来确保即使主节点故障,服务也能无缝切换到备用节点。在 ActiveMQ 5.8 版本中,使用 NFSV4(Network File System ...

    第1步 master-slave1和slave2配置网络和搭建Hadoop集群环境.docx

    第1步 master-slave1和slave2配置网络和搭建Hadoop集群环境.docx

    mysql master/slave介绍及配置

    Master-Slave的数据库机构解决了很多问题,特别是read/write比较高的web2.0应用...这是对Replication的最基本陈述,这种模式的在系统Scale-out方案中很有引力(如有必要,数据可以先进行Sharding,再使用replication)。

    docker-mysql-master-slave-master.zip

    此资源为shardingsphere 调研...内容:一个master mysql docker实例,一个slave docker实例 内置3个库,mydb,mydb0,mydb1。仅开启了这三个库的主从。如果三个库主从不够用,自行配置。 使用:1.解压 2.执行build.sh

    Master_slave_multi_machine.rar_Master-slave_Master/Slave_multi m

    “master-slave”是这种架构的关键词,它代表了控制和执行的分离。主节点负责决策和调度,而从节点执行命令并提供反馈。这种架构模式有助于负载均衡,因为主节点可以动态地将工作负载分配给不同的从节点。 “multi_...

    nsmysql-slave架构图

    nsmysql-slave架构图

    Master-slave-alarm-system.zip_Master/Slave_上位机报警

    本文将深入探讨一个名为"Master-slave-alarm-system"的项目,该系统旨在通过主从结构实现对温度的实时检测,并具备上位机报警功能。我们将分析系统的架构、工作原理以及其核心组件,为理解此类系统提供详尽的解析。 ...

    Modbus-Master-Slave-for-Arduino-master_fierce2gz_arduinomodbus_M

    本篇文章将深入探讨如何在Arduino平台上实现Modbus主从通信,基于"Modbus-Master-Slave-for-Arduino-master"库,帮助开发者更好地理解和应用这一强大的工具。 一、Modbus协议简介 Modbus是一种公开的通信协议,由...

    modbus-master-slave模拟软件

    这个“modbus-master-slave模拟软件”就是专为测试和调试基于Modbus协议的系统而设计的工具。 首先,我们来理解一下Modbus协议的基础。Modbus协议是1979年由施耐德电气公司开发的一种串行通信协议,它定义了主设备...

    Master-_-Slave-Core

    "Master-_-Slave-Core"标题暗示了这是一个关于I2C主从核心的项目,其中包含了一套用于实现I2C主从模式的代码。 I2C协议是由飞利浦(现NXP半导体)在1980年代初设计的,它允许在一个总线上连接多个设备,减少了所需...

Global site tag (gtag.js) - Google Analytics