MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。MMM不仅能提供浮动IP的功能,更可贵的是如果当前的主服务器挂掉后,会将你后端的从服务器自动转向新的主服务器进行同步复制,不用手工更改同步配置。这个方案是目前比较成熟的解决方案。
优点:安全性、稳定性高,可扩展性好,高可用,当主服务器挂掉以后,另一个主立即接管,其他的从服务器能自动切换,不用人工干预。
缺点:至少三个节点,对主机的数量有要求,需要实现读写分离,对程序来说是个挑战。
MMM的适用场景为数据库访问量大,业务增长快,并且能实现读写分离的场景。
实战环境服务器列表:
服务器 |
主机名 |
ip地址 |
Serverid |
系统 |
Mysql |
Monitor |
Mon |
10.1.1.111 |
-- |
Centos 5.5 64bit |
-- |
Master1 |
db1 |
10.1.1.113 |
1 |
Centos 5.5 64bit |
5.1.63 |
Master2 |
db2 |
10.1.1.75 |
2 |
Centos 5.5 64bit |
5.1.63 |
Slave1 |
db3 |
10.1.1.108 |
3 |
Centos 5.5 64bit |
5.1.63 |
实战环境虚拟IP列表:
VIP |
Role |
description |
10.1.1.176 |
Read |
应用配置的读取IP,也可以在前端加lvs等,做负载均衡 。三台数据库每台一个浮动VIP |
10.1.1.177 |
Read |
|
10.1.1.178 |
Read |
|
10.1.1.179 |
Write |
应用配置的写入的VIP,单点写入。 |
在安装mmm之前要安装epel包,因为Centos的默认源中没有mmm的安装包,Epel是企业版Linux附加软件包(Extra Packages for Enterprise Linux)的缩写,是一个由特别兴趣小组创建、维护并管理的,针对红帽企业版Linux(RHEL)及其衍生发行版(比如CentOS、Scientific Linux)的一个高质量附加软件包项目。
安装epel:
wget ftp://ftp.sunet.se/pub/Linux/distributions/yellowdog/yum/6.2/extras/RPMS/epel-release-5-3.noarch.rpm
rpm -Uvh epel-release-5-3.noarch.rpm
安装monitor的安装:
yum -y install mysql-mmm*
各个DB上只需要安装mysql-mmm-agent
yum -y install mysql-mmm-agent
1.5.3.1配置之前的准备
前提是要配置好master1和master2的主主同步,master1和slave1的主从同步,限于篇幅这里我就不做介绍了。
在配置mmm之前首先要在mysql中创建除复制帐号之外的另外两个帐号,首先来介绍monitor user帐号,这个帐号是monitor服务器用来对mysql服务器做健康检查的,其次就是agent user,这个帐号是mmm agent(mmm代理)用来变成只读模式和同步master等,下面是创建这两个帐号的语句:
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'10.1.1.%' IDENTIFIED BY 'monitor_password';
GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'10.1.1.%'IDENTIFIED BY 'agent_password';
flush privileges;
这两个语句在每个mysql中都要执行一下。
1.5.3.2Monitor服务器的配置
MMM的配置文件在/etc/mysql-mmm目录下,monitor需要配置的文件有mmm_common.conf、mmm_mon.conf两个文件。mmm_common.conf文件在mmm的各个节点都是一样的,因此配置好以后copy到各个DB节点即可。
我mmm_common.conf的配置如下:
vim /etc/mysql-mmm/mmm_common.conf
active_master_rolewriter
<host default>
cluster_interfaceeth0
pid_path/var/run/mysql-mmm/mmm_agentd.pid
bin_path/usr/libexec/mysql-mmm/
replication_userreplication
replication_password123456
agent_usermmm_agent
agent_passwordagent_password
</host>
<host db1>
ip10.1.1.113#这个IP尤其注意是db1的IP
modemaster
peerdb2
</host>
<host db2>
ip10.1.1.75#这个IP尤其注意是db2的IP
modemaster
peerdb1
</host>
<host db3>
ip10.1.1.108
modeslave
</host>
<role writer>
hostsdb1, db2
ips10.1.1.179
modeexclusive
</role>
<role reader>
hostsdb1, db2, db3
ips10.1.1.176, 10.1.1.177, 10.1.1.178
modebalanced
</role>
我的mmm_mon.conf配置如下:
vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
ip127.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_ips10.1.1.1, 10.1.1.113, 10.1.1.75, 10.1.1.108
# ping_ips 监控了网关IP和其他的DB节点IP
auto_set_online60
</monitor>
<host default>
monitor_usermmm_monitor
monitor_passwordmonitor_password
</host>
debug 0
1.5.3.3各个DB服务器的配置
各个DB服务器要配置的东西比较不多,主要有mmm_common.conf、mmm_agent.conf和/etc/default/mysql-mmm-agent文件。
Ødb1 的配置
mmm_common.conf文件的配置和前面monitor的一样,直接copy过来即可使用
mmm_agent.conf的配置:
vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db1
mysql-mmm-agent的配置:
vim /etc/default/mysql-mmm-agent
ENABLED=1
Ødb2 的配置
mmm_common.conf文件的配置和前面monitor的一样,直接copy过来即可使用
mmm_agent.conf的配置:
vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db2
mysql-mmm-agent的配置:
vim /etc/default/mysql-mmm-agent
ENABLED=1
Ødb3 的配置
mmm_common.conf文件的配置和前面monitor的一样,直接copy过来即可使用
mmm_agent.conf的配置:
vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db3
mysql-mmm-agent的配置:
vim /etc/default/mysql-mmm-agent
ENABLED=1
1.5.4.1MMM的启动和停止
ØMMM的启动
启动mmm agent
/etc/init.d/mysql-mmm-agent start
将agent的启动命令写入到三个DB的rc.local文件中
启动mmm monitor
/etc/init.d/mysql-mmm-monitor start
将monitor的启动命令写入到monitor服务器的rc.local文件中
ØMMM的停止
停止mmm agent
/etc/init.d/mysql-mmm-agent stop
停止mmm monitor
/etc/init.d/mysql-mmm-monitor stop
1.5.4.2MMM的基本管理
查看集群的状态
mmm_control show
将db1设置成online状态
mmm_control set_online db1
更多管理命令请使用mmm_control help查看,或者参考:
http://blog.chinaunix.net/uid-20639775-id-154606.html
环境搭建好以后,就需要进行周密的测试,看是否实现了预期的功能:
Ø停掉master1后在monitor端使用mmm_control show看是否能切换。看看slave1是否能正确切换同步。
Ø启动master1后在monitor端使用mmm_control show看是否能切换。
Ø停掉master2后看看能否正确切换。
为实现高可用,系统的各个层面都需要全面的监控起来,比如agent进程的监控,monitor进程的监控,mysql可用性的监控,数据库同步的监控等,推荐使用nagios对以上资源进行监控,第一时间发现问题,第一时间处理。
相关推荐
Lvs+Keepalived+MySQL 单点写入主主同步高可用方案 Lvs+Keepalived+MySQL 单点写入读负载均衡主主同步高可用方案 Heartbeat高可用MySQL主主同步方案 Heartbeat+DRBD+MySQL高可用方案 MMM高可用MySQL方案
本篇文章主要介绍搭建MMM方案以及MMM架构的原理。这里不介绍主从、主主的搭建方法,MMM方案不适用对数据一致性要求很高的业务。下面一起来学习学习。
MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。MMM不仅能提供浮动IP的功能,如果当前的主服务器挂掉后,会将你后端的从服务器自动转向新的主服务器...
1 install mysql 请参考//www.jb51.net/article/47094.htm 2. Basic configuration of master 1 3. Create users GRANT REPLICATION CLIENT ON *.* TO ‘mmm_monitor’@’%’ IDENTIFIED BY ‘mmm_monitor’; GRANT ...
数据库的运维向来是另人头疼的问题,相对于其他服务而言,数据库经常会成为整个架 构的性能瓶颈所在。...而mysql-mmm就为我们带 来了一个优秀的解决方案,下面的文档会带领我们一步步进行这个奇妙的世界。
对于mmm,生产环境中很少有人用,且mmm 管理端需要单独运行一台服务器上,要是想实现高可用,就得对mmm管理端做HA,这样无疑又增加了硬件开支;对于共享存储,个人觉得MySQL数据还是放在本地较为安全,存储设备毕竟...
性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、mysql高可用集群...
MySQL双主、主从+Keepalived主从自动切换服务器资源:两台PCServer优点:架构简单,节省资源缺点:无法线性扩展,主从失败之后需要手动恢复主从架构方案:MMM+MySQL双主+多从高可用方案服务器资源:1、至少五台PC...
22-MySQL集群及高可用的更多思路方案引子mp4 23-常见MySQL集群高可用架构讲座01.mp4 24-常见MySQL集群高可用架构讲座02.mp4 25-常见MySQL集群高可用架构讲座03.mp4 26-常见MySQL集群高可用架构讲座04.mp4 27-常见...
│ MySQL培训(10)_MySQL高可用方案之MMM.docx │ MySQL培训(10)_MySQL高可用方案之PXC安装与配置.pdf │ Percona_XtraDB_Cluster文档.pdf │ ├─L011-oldboy-mysql-dba-lesson11 │ 1101-MySQL命令工具_rec....
同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望。在2015年之前,美团点评(点评侧)长期使用MMM(Master-MasterreplicationmanagerforMySQL)做数据库高可用,积累了...