MMM+MySQL Replication 架构的搭建演示

MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写 入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实 现数据备份、节点之间重新同步功能的脚本。

MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。

MMM项目来自 Google:http://code.google.com/p/mysql-master-master

官方网站为:http://mysql-mmm.org

MMM主要功能由下面三个脚本提供

l mmm_mond 负责所有的监控工作的监控守护进程,决定节点的移除等等

l mmm_agentd 运行在mysql服务器上的代理守护进程,通过简单远程服务集提供给监控节点

l mmm_control 通过命令行管理mmm_mond进程.

下面是配置环境:

系统:CentOS 6.5 64位

软件:mysql-5.5.32.tar.gz cmake-2.8.8.tar.gz

防火墙:打开3306 9989

MMM_monitor:10.0.0.210

MySQL_mastre1:10.0.0.210 ----(MySQL-M1)

MySQL_mastre2:10.0.0.211 ----(MySQL-M2)

MySQL_slave1:10.0.0.213 ----(MySQL-S1)

VIP_Write:10.0.0.217---(VIP)

VIP_Read:10.0.0.218---(VIP)

注意:监控节点最好单独放在一台独立服务器上。

一、设置hosts解析

三台服务器的配置如下:

[[email protected] ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.0.0.210 M1

10.0.0.211 M2

10.0.0.213 S1

二、配置MySQL主从服务器

首先创建三个帐号,如下所示

mysql> grant replication slave,replication client on *.* to ‘repl‘@‘%‘ identified by ‘repl‘;

mysql> grant process,super,replication client on *.* to ‘mmm_agent‘@‘%‘ identified by ‘123456‘;

mysql> grant replication client on *.* to ‘mmm_monitor‘@‘%‘ identified by ‘123456‘;

说明:

第一个帐号repl(复制帐号),是用于主主复制的。

第二个帐号mmm_agent(代理帐号),是MMM代理用来变成只读模式和同步master等的。

第三个帐号mmm_monitor(监听帐号),是MMM监控服务器用来对MySQL服务器做健康检查的。

首先要搭建好    M1<---->M2之前的同步,还要搭建好        S1从库---->M1的同步。

三、安装MySQL-MMM

在三台服务器上分别进行安装,安装命令如下:

wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm

rpm -ivh epel-release-6-8.noarch.rpm

yum -y install mysql-mmm*

[[email protected] ~]# rpm -qa|grep mysql-mmm

mysql-mmm-2.2.1-2.el6.noarch

mysql-mmm-agent-2.2.1-2.el6.noarch

mysql-mmm-tools-2.2.1-2.el6.noarch

mysql-mmm-monitor-2.2.1-2.el6.noarch

四、配置MMM监控、代理服务器

1、在三台服务器上(M1,M2,S1)修改mmm_common.conf配置文件(三台服务器的此配置文件内容相同)。

注:如果监控节点是单独的服务器的话,那mmm_common.conf配置文件与三台服务器的相同。如果是拷贝到三台机器上面,要注意这个配置文件的权限(640)。不然无法启动

修改后的内容如下:

路径:

[[email protected] mysql-mmm]# pwd

/etc/mysql-mmm

[[email protected] mysql-mmm]# cat mmm_common.conf

active_master_role      writer

<host default>

cluster_interface       eth0

pid_path                /var/run/mysql-mmm/mmm_agentd.pid

bin_path                /usr/libexec/mysql-mmm/

replication_user        repl

replication_password    repl

agent_user              mmm_agent

agent_password          123456

</host>

<host M1>

ip      10.0.0.210

mode    master

peer    M2

</host>

<host M2>

ip      10.0.0.211

mode    master

peer    M1

</host>

<host S1>

ip      10.0.0.213

mode    slave

</host>

#<host db3>

#    ip      192.168.100.51

#    mode    slave

#</host>

<role writer>

hosts   M1,M2

ips     10.0.0.217

mode    exclusive  #排他模式,在这种情况下任何时候只能有一个主机拥有该角色。

</role>

<role reader>

hosts   M1,M2,S1

ips     10.0.0.218

mode    balanced    #平衡模式,该模式下可以多个主机同时拥有此角色。

</role>

[[email protected] mysql-mmm]#

修改M1,M2,S1三台服务上的mmm_agent.conf配置文件。

修改内容如下:

[[email protected] mysql-mmm]# cat mmm_agent.conf

include mmm_common.conf

# The ‘this‘ variable refers to this server.  Proper operation requires

# that ‘this‘ server (db1 by default), as well as all other servers, have the

# proper IP addresses set in mmm_common.conf.

this M1

[[email protected] mysql-mmm]# cat mmm_agent.conf

include mmm_common.conf

# The ‘this‘ variable refers to this server.  Proper operation requires

# that ‘this‘ server (db1 by default), as well as all other servers, have the

# proper IP addresses set in mmm_common.conf.

this M2

[[email protected] mysql-mmm]# cat mmm_agent.conf

include mmm_common.conf

# The ‘this‘ variable refers to this server.  Proper operation requires

# that ‘this‘ server (db1 by default), as well as all other servers, have the

# proper IP addresses set in mmm_common.conf.

this S1

最后在MON(M1)监控节点上修改配置文件mmm_mon.conf

[[email protected] mysql-mmm]# cat mmm_mon.conf

include mmm_common.conf

<monitor>

ip                  127.0.0.1

pid_path            /var/run/mysql-mmm/mmm_mond.pid

bin_path            /usr/libexec/mysql-mmm

status_path         /var/lib/mysql-mmm/mmm_mond.status

ping_ips            10.0.0.210,10.0.0.211,10.0.0.213 #可以ping的真实代理服务器的IP

auto_set_online     10 #发现节点丢失则过10秒进行切换

# The kill_host_bin does not exist by default, though the monitor will

# throw a warning about it missing.  See the section 5.10 "Kill Host

# Functionality" in the PDF documentation.

#

# kill_host_bin     /usr/libexec/mysql-mmm/monitor/kill_host

#

</monitor>

<host default>

monitor_user        mmm_monitor  #前面创建的监控帐号和密码

monitor_password    123456

</host>

debug 0

五、启动各服务器的相关服务

首先启动M1,M2,S1的客户端

/etc/init.d/mysql-mmm-agent start

然后,在MON(M1)上启动监控服务

/etc/init.d/mysql-mmm-monitor start

最后,在MON(M1)监控服务上查看MMM状态信息:

[[email protected] ~]# mmm_control show

M1(10.0.0.210) master/ONLINE. Roles: writer(10.0.0.217)

M2(10.0.0.211) master/ONLINE. Roles:

S1(10.0.0.213) slave/ONLINE. Roles: reader(10.0.0.218)

[[email protected] ~]# mmm_control checks all

S1  ping         [last change: 2015/10/08 10:01:41]  OK

S1  mysql        [last change: 2015/10/08 10:01:41]  OK

S1  rep_threads  [last change: 2015/10/08 10:01:41]  OK

S1  rep_backlog  [last change: 2015/10/08 10:01:41]  OK: Backlog is null

M1  ping         [last change: 2015/10/08 10:01:41]  OK

M1  mysql        [last change: 2015/10/08 10:01:41]  OK

M1  rep_threads  [last change: 2015/10/08 10:01:41]  OK

M1  rep_backlog  [last change: 2015/10/08 10:01:41]  OK: Backlog is null

M2  ping         [last change: 2015/10/08 10:01:41]  OK

M2  mysql        [last change: 2015/10/08 13:10:04]  OK

M2  rep_threads  [last change: 2015/10/08 10:01:41]  OK

M2  rep_backlog  [last change: 2015/10/08 10:01:41]  OK: Backlog is null

注意:其中M1负责写(IP是10.0.0.217),S1负责读(IP是10.0.0.218)这里特别说明一下,这个读写分离要配合前端程序来用,也就是说你的程序要支持读写分离,要把这个VIP告诉开发人员,让他们在配置文件里指定,MMM软件并不具有读写分离的功能,这个与官方的MySQL-PROXY和淘宝的Amoeba是不一样的。

模拟宕机切换测试

当M1宕机,会自动切换到M2为write。如下:

[[email protected] ~]# mmm_control show

M1(10.0.0.210) master/HARD_OFFLINE. Roles:

M2(10.0.0.211) master/ONLINE. Roles: writer(10.0.0.217)

S1(10.0.0.213) slave/ONLINE. Roles: reader(10.0.0.218)

当从库S1宕机后,也会自动切换到M1或M2上面

注:本试验主要来源于 贺春旸 MySQL管理之道

时间: 2024-12-24 04:00:16

MMM+MySQL Replication 架构的搭建演示的相关文章

基于MMM搭建MySQL Replication集群高可用架构

MMM介绍 MMM是Multi-Master Replication Manager for MySQL的缩写,它是MySQL提供的一个多主复制管理器,其核心是使用perl语言编写的一组脚本.实际上MMM是比较早期甚至有点老的一种用于构建高可用MySQL架构的方式,但因其还有一定的应用场景,所以本文将会演示一下如何搭建一个MMM架构. MMM 由两个组件组成: monitor:监控集群内数据库的状态,在出现异常时发布切换命令,一般和数据库分开部署 agent:运行在每个 MySQL 服务器上的代

MySQL性能调优与架构设计——第13章 可扩展性设计之 MySQL Replication

第13章 可扩展性设计之 MySQL Replication 前言: MySQL Replication 是 MySQL 非常有特色的一个功能,他能够将一个 MySQL Server 的 Instance 中的数据完整的复制到另外一个 MySQL Server 的 Instance 中.虽然复制过程并不是实时而是异步进行的,但是由于其高效的性能设计,延时非常之少.MySQL 的Replication 功能在实际应用场景中被非常广泛的用于保证系统数据的安全性和系统可扩展设计中.本章将专门针对如何利

mysql流行的四种高可用架构之:Keepalived+Mysql Replication

关于MySQL-HA,目前有很多种解决方案,目前互联网上用的较多的是Keepalived+Mysql Replication组合.MMM+Mysql Replication组合.Heartbeat+DRBD+Mysql组合,以及红帽RHSC高可用集群套件.

MySQL Replication Report

很多人都会MySQL主从框架的搭建,但很多人没有真正理解同步基本用途.同步的基本原理,还有当Master和Slave同步断开后的处理以及导致Master和slave不同步的原因等等,当你对这些都了如指掌的时候,对于MySQL主从出现的一些常见问题,也能很轻松的解决它,而且对数据库架构的优化及改造都会有很大的帮助.下面我们一起来学习下MySQL Replication吧,^0^ Replication的用途: 1.数据分发,scale out,sacle up,垂直划分,水平划分 2.负载均衡 l

MySQL Replication 常用架构

转自: http://www.cnblogs.com/ggjucheng/archive/2012/11/13/2768879.html 前言 MySQLReplicaion本身是一个比较简单的架构,就是一台MySQL服务器(Slave)从另一台MySQL服务器(Master)进行日志的复制然后再解析日志并应用到自身.一个复制环境仅仅只需要两台运行有MySQLServer的主机即可,甚至更为简单的时候我们可以在同一台物理服务器主机上面启动两个mysqldinstance,一个作为Master而另

MySQL高可用群集--MMM高可用架构

为什么要使用MySQL高可用群集 在实际生产环境中,当普通的MySQL主从复制和读写分离不能满足实际需求时,就需要考虑MySQL的高可用群集,出于安全角度考虑,当数据访问量过大带来主服务器负载增大,当出现主服务器宕机一个时,保证数据服务不会中断的情况下,从服务器会自动寻找另一主服务器,而从服务器也会像主服务器一样,当其中一个宕机时,依旧可以保证服务不会中断. MMM高可用架构 什么是MMM? MMM(Master-Master replication manager for MySQL)是一套支

使用Innobackupex快速搭建(修复)MySQL主从架构

MySQL的主从搭建大家有很多种方式,传统的mysqldump方式是很多人的选择之一.但对于较大的数据库则该方式并非理想的选择.使用Xtrabackup可以快速轻松的构建或修复mysql主从架构.本文描述了使用innobackupex快速来搭建或修复主从架构.供大家参考. 1.基于主库做一个完整备份 # mkdir -p /log/bakforslave # innobackupex --user=root -password=*** --socket=/tmp/mysql.sock --def

演示一下在MySQL 5.7下搭建多主一从的过程

下面演示一下在MySQL 5.7下搭建多主一从的过程: 实验环境: Master_1: 192.168.10.128 Master_2: 192.168.10.129 Slave_3:  192.168.10.130 一.分别在Master_1和Master_2上导出需要同步的数据库: 在Master_1: [[email protected]_1 mysql]# mysqldump -uroot -p123456 --master-data=2 --single-transaction --d

使用innobackupex基于从库搭建mysql主从架构

?? MySQL的主从搭建大家有很多种方式,传统的mysqldump方式是很多人的选择之一.但对于较大的数据库则该方式并非理想的选择.使用Xtrabackup可以快速轻松的构建或修复mysql主从架构.本文描述了基于现有的从库来快速搭建主从,即作为原主库的一个新从库.该方式的好处是对主库无需备份期间导致的相关性能压力.搭建过程中使用了快速流备份方式来加速主从构建以及描述了加速流式备份的几个参数,供大家参考. 有关流式备份可以参考:Xtrabackup 流备份与恢复 1.备份从库###远程备份期间