mysql  MMM高可用方案

 MMM简介:

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

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

环境配置

MMM_monitor:172.19.0.122

MySQL_master1:172.19.0.121 (db1)

MySQL_master2:172.19.0.122(db2)

MySQL_slave1:172.19.123(db3)

VIP_Write:172.19.0.126

vip_Read1:172.19.0.127, 172.19.0.128

 

三台服务安装好mysql,把db1db2做成主主同步,db3为从,是同步db1的。后面搭建好mmm后,当DB1的脱机后,db3会自动change同步db2

1.设置hosts解析

三台服务的配置如下

[root@db1 ~]# cat /etc/hosts

172.19.0.121 db1

172.19.0.122 db2

172.19.0.123 db3

 

创建三个账号。

(复制账号)

GRANT REPLICATION slave,REPLICATION CLIENT ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl';

(代理账号)

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

(监听账号)

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

 

3.安装mysql-mmm

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

#wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

#rpm -ivh epel-release-5-4.noarch.rpm

#yum -y install mysql-mmm*

 

4.配置MMM监控、代理服务

在三台服务器修改mmm_common.conf配置文件

[root@db1 ~]# cd /etc/mysql-mmm/

[root@db1 mysql-mmm]# vi 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        repl

    replication_password    repl

    agent_user              mmm_agent

    agent_password          123456

 

    ip      172.19.0.121

    mode    master

    peer    db2

 

    ip      172.19.0.122

    mode    master

    peer    db1

 

    ip      172.19.0.123

    mode    slave

 

    hosts   db1, db2

    ips     172.19.0.126

    mode    exclusive

    hosts   db1, db2, db3

    ips     172.19.0.127,172.19.0.128

    mode    balanced

 

其次,修改三台服务器mmm_agent.conf配置文件

[root@db1 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 db1

 

[root@db2 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 db2

 

[root@db3 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 db3

 

最后修改172.19.0.122db2 mysql-mon服务配置mmm_mon.conf配置文件,把这台做为MMM_monitor

[root@db2 mysql-mmm]# cat mmm_mon.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 db1

[root@db1 mysql-mmm]# cat 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            172.19.0.121,172.19.0.122,172.19.0.123

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

    monitor_password    123456

 

debug 0

 

这样,配置MMM监控,代理服务的工作就完成了

5.启动相关服务

在三台服务器启动以下服务

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

 

db2中启动mysql-mon监控服务

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

 

 

查看MMM状态信息

[root@db2 mysql-mmm]# mmm_control show

  db1(172.19.0.121) master/ONLINE. Roles: writer(172.19.0.126)

  db2(172.19.0.122) master/ONLINE. Roles: reader(172.19.0.127)

  db3(172.19.0.123) slave/ONLINE. Roles: reader(172.19.0.128)

 

[root@db2  mysql-mmm]# mmm_control checks all

db2  ping         [last change: 2014/08/22 16:57:07]  OK

db2  mysql        [last change: 2014/08/22 16:57:07]  OK

db2  rep_threads  [last change: 2014/08/22 16:57:07]  OK

db2  rep_backlog  [last change: 2014/08/22 16:57:07]  OK: Backlog is null

db3  ping         [last change: 2014/08/22 16:57:07]  OK

db3  mysql        [last change: 2014/08/22 17:11:48]  OK

db3  rep_threads  [last change: 2014/08/22 16:57:07]  OK

db3  rep_backlog  [last change: 2014/08/22 16:57:07]  OK: Backlog is null

db1  ping         [last change: 2014/08/22 16:57:07]  OK

db1  mysql        [last change: 2014/08/22 16:57:07]  OK

db1  rep_threads  [last change: 2014/08/22 16:57:07]  OK

db1  rep_backlog  [last change: 2014/08/22 16:57:07]  OK: Backlog is null

 

 

以上说明成功,为了数据一致性,我们采用半同步方案