您的位置:首页 > 运维架构 > 网站架构

mysql MMM高可用方案

2014-08-22 10:52 204 查看
mysql MMM高可用方案
MMM简介:
MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于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,把db1与db2做成主主同步,db3为从,是同步db1的。后面搭建好mmm后,当DB1的脱机后,db3会自动change同步db2
1.设置hosts解析
三台服务的配置如下
[root@db1 ~]# cat /etc/hosts172.19.0.121 db1172.19.0.122 db2172.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 <host default> 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</host> <host db1> ip 172.19.0.121 mode master peer db2</host> <host db2> ip 172.19.0.122 mode master peer db1</host> <host db3> ip 172.19.0.123 mode slave</host> <role writer> hosts db1, db2 ips 172.19.0.126 mode exclusive</role><role reader> hosts db1, db2, db3 ips 172.19.0.127,172.19.0.128 mode balanced</role> 其次,修改三台服务器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.122(db2) 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

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

<host default>
monitor_user mmm_monitor
monitor_password 123456
</host>

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

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

本文出自 “飛鴻沓膤” 博客,请务必保留此出处http://jxzhfei.blog.51cto.com/1382161/1543409
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: