1    MMM高可用mysql方案

1.1  方案简介

MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。MMM不仅能提供浮动IP的功能,更可贵的是如果当前的主服务器挂掉后,会将你后端的从服务器自动转向新的主服务器进行同步复制,不用手工更改同步配置。这个方案是目前比较成熟的解决方案。

1.2  方案优缺点

优点:安全性、稳定性高,可扩展性好,高可用,当主服务器挂掉以后,另一个主立即接管,其他的从服务器能自动切换,不用人工干预。

缺点:至少三个节点,对主机的数量有要求,需要实现读写分离,对程序来说是个挑战。

1.3  方案架构图

1.4  适用场景

MMM的适用场景为数据库访问量大,业务增长快,并且能实现读写分离的场景。

1.5  方案实战

1.5.1 实战环境介绍

实战环境服务器列表:

服务器

主机名

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,单点写入。

1.5.2 MMM的安装

在安装mmm之前要安装epel包,因为Centos的默认源中没有mmm的安装包,Epel是企业版Linux附加软件包(Extra Packages for Enterprise Linux)的缩写,是一个由特别兴趣小组创建、维护并管理的,针对红帽企业版Linux(RHEL)及其衍生发行版(比如CentOS、Scientific Linux)的一个高质量附加软件包项目。

安装epel:

安装monitor的安装:

yum -y install mysql-mmm*

各个DB上只需要安装mysql-mmm-agent

yum -y install mysql-mmm-agent

1.5.3 MMM的配置

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.2   Monitor服务器的配置

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_role      writer

<host default>

cluster_interface       eth0

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

bin_path                /usr/libexec/mysql-mmm/

replication_user        replication

replication_password    123456

agent_user              mmm_agent

agent_password          agent_password

</host>

<host db1>

ip      10.1.1.113    #这个IP尤其注意是db1的IP

mode    master

peer    db2

</host>

<host db2>

ip      10.1.1.75    #这个IP尤其注意是db2的IP

mode    master

peer    db1

</host>

<host db3>

ip      10.1.1.108

mode    slave

</host>

<role writer>

hosts   db1, db2

ips     10.1.1.179

mode    exclusive

</role>

<role reader>

hosts   db1, db2, db3

ips     10.1.1.176, 10.1.1.177, 10.1.1.178

mode    balanced

</role>

我的mmm_mon.conf配置如下:

vim /etc/mysql-mmm/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.1.1.1, 10.1.1.113, 10.1.1.75, 10.1.1.108

# ping_ips 监控了网关IP和其他的DB节点IP

auto_set_online     60

</monitor>

<host default>

monitor_user        mmm_monitor

monitor_password    monitor_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 MMM的管理

1.5.4.1   MMM的启动和停止

  • 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.2   MMM的基本管理

查看集群的状态

mmm_control show

将db1设置成online状态

mmm_control set_online db1

更多管理命令请使用mmm_control help查看,或者参考:

http://blog.chinaunix.net/uid-20639775-id-154606.html

1.5.5 MMM架构的测试

环境搭建好以后,就需要进行周密的测试,看是否实现了预期的功能:

  • 停掉master1后在monitor端使用mmm_control show看是否能切换。看看slave1是否能正确切换同步。
  • 启动master1后在monitor端使用mmm_control show看是否能切换。
  • 停掉master2后看看能否正确切换。

1.5.6 MMM架构的监控

为实现高可用,系统的各个层面都需要全面的监控起来,比如agent进程的监控,monitor进程的监控,mysql可用性的监控,数据库同步的监控等,推荐使用nagios对以上资源进行监控,第一时间发现问题,第一时间处理。

mysql的MMM高可用方案的更多相关文章

  1. mysql之MMM高可用方案简介

    MMM(Master-Master Replication Manager for MySQL) MySQL主主复制管理器,提供了MySQL主主复制配置的监控.故障转移和管理的一套可伸缩的脚本套件.在 ...

  2. MySQL数据库的高可用方案总结

    高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法 ...

  3. 常见的Mysql十款高可用方案

    简介 我们在考虑MySQL数据库的高可用架构时,主要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断. 用作 ...

  4. MySQL MMM高可用方案

    200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要介绍搭建MMM方案以及MMM架构的原理.这里不介绍主从.主主的搭建方 ...

  5. MySQL5.7 利用keepalived来实现mysql双主高可用方案的详细过程

    Reference:  http://blog.csdn.net/mchdba/article/details/51377989 服务器准备 Keepalived:192.168.13.15 Keep ...

  6. mysql高可用方案总结性说明

    MySQL的各种高可用方案,大多是基于以下几种基础来部署的(也可参考:Mysql优化系列(0)--总结性梳理   该文后面有提到)1)基于主从复制:2)基于Galera协议(PXC):3)基于NDB引 ...

  7. [转载] MySQL高可用方案选型参考

    原文: http://imysql.com/2015/09/14/solutions-of-mysql-ha.shtml?hmsr=toutiao.io&utm_medium=toutiao. ...

  8. 分布式数据存储 - MySQL主从复制高可用方案

    前面几篇文章说道MySQL数据库的高可用方案主从复制.主从复制的延迟产生原因.延迟检测及延迟解决方案(并未从根本上解决),这种主从复制方案保证数据的冗余的同时可以做读写分离来分担系统压力但是并非是高可 ...

  9. MySQL 同步复制及高可用方案总结

    1.前言 mysql作为应用程序的数据存储服务,要实现mysql数据库的高可用.必然要使用的技术就是数据库的复制,如果主节点出现故障可以手动的切换应用到从节点,这点相信运维同学都是知道,并且可以实现的 ...

随机推荐

  1. JavaScript高级---桥模式设计

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  2. 表中相同数据的sql语句

    1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select   peopleId from  ...

  3. Capsule:开源的 JVM 应用部署工具

    [编者按]本文作者 Ron Pressler 是 Parallel Universe 公司的创始人,拥有着丰富的高性能开发经验.通过这篇文章,Ron 向大家详细介绍了全新的开源 JVM 部署工具--C ...

  4. POJ2752 Seek the Name,Seek the Fame KMP算法

    KMP继续练手.题目问的是一个串前缀等于后缀的可能长度是哪些,输出来.题目考的是对KMP失配指针的理解,当最后一位失配(即'\0'那里)时,指针会移动到前缀对应匹配的部分,所以这个长度是我们要的,然后 ...

  5. POJ 3080 Blue Jeans (多个字符串的最长公共序列,暴力比较)

    题意:给出m个字符串,找出其中的最长公共子序列,如果相同长度的有多个,输出按字母排序中的第一个. 思路:数据小,因此枚举第一个字符串的所有子字符串s,再一个个比较,是否为其它字符串的字串.判断是否为字 ...

  6. SDUT1586 计算组合数(组合数)

    这个题数据量小,不容易超时. #include<stdio.h> long long fac(int n) { ; ; i <= n ; i++) { m = i*m; } retu ...

  7. VisualSvn+TortoiseSVN的安装说明

    一.VisualSvn安装及简单使用 下载VisualSvn:VisualSVN-Server-2.5.5.msi 系统:Win7系统 安装步骤: 1.下载VisualSVN-Server-2.5.5 ...

  8. lintcode :Reverse Words in a String 翻转字符串

    题目: 翻转字符串 给定一个字符串,逐个翻转字符串中的每个单词. 样例 给出s = "the sky is blue",返回"blue is sky the" ...

  9. 毕向东JAVA视频视频讲解(第八课)

    继承的好处: 1,提高了代码的复用性. 2,让类与类之间产生了关系,给第三个特征多态提供了前提. java中支持单继承.不直接支持多继承,但对C++中的多继承机制进行改良. 单继承:一个子类只能有一个 ...

  10. PowerDesigner技巧

    原文:PowerDesigner技巧 1.PowerDesigner使用MySQL的auto_increment  ◇问题描述:  PD怎样能使主键id使用MySQL的auto_increment呢? ...