Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7610223
  • 博文数量: 368
  • 博客积分: 9600
  • 博客等级: 上校
  • 技术积分: 18875
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-01 00:00
文章分类

全部博文(368)

文章存档

2017年(9)

2016年(19)

2015年(3)

2014年(6)

2013年(8)

2012年(78)

2011年(66)

2010年(135)

2009年(44)

分类: Mysql/postgreSQL

2012-09-04 16:55:56

高可用mysql方案

MMMMaster-Master Replication Manager for MySQLmysql主主复制管理器)关于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)的缩写,是一个由特别兴趣小组创建、维护并管理的,针对及其衍生发行版(比如CentOSScientific Linux)的一个高质量附加软件包项目。

安装epel

wget

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   配置之前的准备

前提是要配置好master1master2的主主同步,master1slave1的主从同步,限于篇幅这里我就不做介绍了。

在配置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.confmmm_mon.conf两个文件。mmm_common.conf文件在mmm的各个节点都是一样的,因此配置好以后copy到各个DB节点即可。

mmm_common.conf的配置如下:

vim /etc/mysql-mmm/mmm_common.conf

active_master_role      writer

 

    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

 

    ip      10.1.1.113    #这个IP尤其注意是db1IP

    mode    master

    peer    db2

 

    ip      10.1.1.75    #这个IP尤其注意是db2IP

    mode    master

    peer    db1

 

    ip      10.1.1.108

    mode    slave

 

    hosts   db1, db2

    ips     10.1.1.179

    mode    exclusive

 

    hosts   db1, db2, db3

    ips     10.1.1.176, 10.1.1.177, 10.1.1.178

    mode    balanced

我的mmm_mon.conf配置如下:

vim /etc/mysql-mmm/mmm_mon.conf

include mmm_common.conf

 

    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_user        mmm_monitor

    monitor_password    monitor_password

 

debug 0

1.5.3.3   各个DB服务器的配置

各个DB服务器要配置的东西比较不多,主要有mmm_common.confmmm_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.1   MMM的启动和停止

Ø  MMM的启动

启动mmm agent

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

agent的启动命令写入到三个DBrc.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

架构的测试

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

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

Ø  启动master1后在monitor端使用mmm_control show看是否能切换。

Ø  停掉master2后看看能否正确切换。

架构的监控

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

阅读(18286) | 评论(10) | 转发(11) |
给主人留下些什么吧!~~

lanbaibai2014-07-09 12:03:56

不明白MMM方案中“当前的主服务器挂掉后,会将你后端的从服务器自动转向新的主服务器进行同步复制,不用手工更改同步配置”,怎么实现,这篇文章也没体现啊。
原来从机Slave1从M2同步,假设M2当了,Slave1能自动从M1同步吗,就算能同步,M2和M1的binlog日志点也不一样啊。怎么能自动实现向新的主服务器进行同步复制?

心若寒江雪2013-05-17 12:00:18

CentOS release 6.2 (Final)


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

运行yum -y install mysql-mmm*的时候出错了

'''
           Requires: perl(:MODULE_COMPAT_5.8.8)
Error: Package: perl-Log-Dispatch-2.20-1.el5.noarch (epel)
           Requires: perl(:MODULE_COMPAT

mingzhou872013-02-05 10:08:27

有没有考虑过slave所指向的master down掉后slave上的数据不能及时更新的情况,
感兴趣的话,一起讨论下

pu2182_cn2012-12-28 14:06:48

楼主,你好,我想问一下,对于MMM体系结构中的单点写入,如果写入量达到一定的量级,单点写入是否会成为瓶颈?有没有支持的最大写入量的量化指标?

飞鸿无痕2012-09-05 17:16:02

houtian150: mysql 官方网站都木有给出来一个很明确的集群方案
我做过一篇mysql主主集群的架构 内网测试2个月以后直接下架
现在我的数据库架构是 drbd  mysql  用heartbeat.....
MMM其实不错啊,只要是单点写入的话都不会有问题的。除非是down机了可能会丢失一点点数据。一般的架构都是单点写入的,淘宝的现在都是主主架构跑得很happy的!