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


      1.2  方案优缺点

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

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

1.3  方案架构图



     1.4  适用场景

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

 


1.5 实例说明

特别说明:搭建的群集实IP和虚IP最好在同一个网段,笔者在做实例的时候4台机器在两个IP段,结果做好后出现无法访问的情况

实IP 

192.168.129.47 (Master1)

192.168.129.49 (Master2)

192.168.140.137(Slave1)

192.168.140.136 (Monitor)

虚IP

192.168.129.51 (Write)

192.168.129.52 (Read)

192.168.140.139 (Read)

笔者做的是MYSQL 5.5.17版本的MMM 

首先安装好MYSQL,并且搭建好 主主从复制  (关于复制的搭建这边就不做详细的说明了,网上面很多)

192.168.129.47和192.168.129.49是主主复制

192.168.129.47和192.168.140.137是主从复制


1.6 MMM账号准备

在各个服务器上面添加MYSQL账号

GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'%' IDENTIFIED BY '123456';  

GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'%'   IDENTIFIED BY '123456';  

GRANT REPLICATION SLAVE   ON *.* TO 'replication'@'%' IDENTIFIED BY '123456';  

flush privileges;


1.7 MMM安装

在安装mmm之前要安装epel包,因为Centos的默认源中没有mmm的安装包,Epel是企业版Linux附加软件包(Extra Packages for Enterprise Linux)的缩写,是一个由特别兴趣小组创建、维护并管理的,针对红帽企业版Linux(RHEL)及其衍生发行版(比如CentOSScientific 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.8配置MMM

完成安装后,所有的配置文件都放到了/etc/mysql-mmm/下面。管理服务器和数据库服务器上都要包含一个共同的文件mmm_common.conf,内容如下:

vi /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  #前面添加的MSYQL账号和密码

    replication_password    123456 #前面添加的MSYQL账号和密码

    agent_user              mmm_agent #前面添加的MSYQL账号和密码

    agent_password          123456  #前面添加的MSYQL账号和密码


    ip      192.168.129.47 #主机1

    mode    master

    peer    db2


    ip      192.168.129.49 #主机2

    mode    master

    peer    db1


    ip      192.168.140.137 #从机1

    mode    slave


    hosts   db1, db2

    ips     192.168.129.51 #写IP(虚拟)对应的主机1和主机2

    mode    exclusive


    hosts   db1, db2, db3

    ips     192.168.140.139,192.168.129.52 #读IP虚拟)对应的主机1和主机2和从机1

    mode    balanced


可以在db1上编辑该文件后,通过scp命令分别复制到monitor、db2和db3上。


1.9 编辑mmm_agent.conf

在数据库服务器上(192.168.129.47),还有一个mmm_agent.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 db1


应对的 192.168.129.49  则为this db2 

应对的 192.168.129.49  则为this db3 

否则代理就会无法启动。


2.0编辑mmm_mon.confg。

在管理服务器上(192.168.140.136),修改mmm_mon.conf文件,修改后内容为:

vi /etc/mysql-mmm/mmm_mon.conf

内容如下 


include mmm_common.conf


    ip                  192.168.140.136

    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            192.168.129.47,192.168.129.49,192.168.140.137

    auto_set_online     60


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

    monitor_password    123456


debug 0


2.1 启动MMM


 在数据库服务器上启动代理程序(192.169.129.47  192.168.129.49  192.169.140.137)


cd /etc/init.d/  

chkconfig mysql-mmm-agent on  

service mysql-mmm-agent start  
     

       在管理服务器上启动监控程序(192.168.140.136)


cd /etc/init.d/  

chkconfig mysql-mmm-monitor on  

service mysql-mmm-monitor start  

      启动后,稍等几秒,可以通过mmm_control程序查看状态:

 


2.2遇到两个问题

1)监控程序服务器无法启动

在管理服务器上,一切都完成后,通过mmm_control查看状态,得到下面的错误信息:ERROR: Can't connect to monitor daemon! 通过编辑/etc/mysql-mmm/mmm_mon.conf文件将debug 0改为debug 1,打开监控程序的debug状态。重新启动监控程序(service mysql-mmm-monitor restart),就会看到详细的错误信息,找不到Perl Time HiRes库。执行yum -y install perl-Time-HiRes*就可以解决。

2)防火墙问题导致Warning: agent on host db1 is not reachable.

控制台序正确启动后,再次执行mmm_control show,却看到下面的输出:

关闭db2、db3上的防火墙,再次重启监控程序,一切回到正常状态!