首页 > 数据库 > Multi-Master Replication Manager for MySQL(mysql-mmm)
2016
03-16

Multi-Master Replication Manager for MySQL(mysql-mmm)

mysql-mmm和mha是公司常用的数据库高可用方案,这一篇写mysql-mmm,下一篇写mysql-mha,每一种高可用方案思路各有不同,下面来看mysql-mmm

MMM (Multi-Master Replication Manager for MySQL) is a set of flexible scripts to perform monitoring/failover and management of MySQL master-master replication configurations (with only one node writable at any time).

The toolset also has the ability to read balance standard master/slave configurations with any number of slaves, so you can use it to move virtual IP addresses around a group of servers depending on whether they are behind in replication.

说明:

mysql-mmm官网 http://mysql-mmm.org/start
mysql-mmm 系统CentOS 6.5 64位 Mysql版本 5.5.37,实验为5台测试机
monitor监控2主2从
master1和master2互为备份
slave1是master1的从
slave2是master2的从
ip地址
monitor   192.168.1.1
master1   192.168.1.2
master2   192.168.1.3
slave1      192.168.1.4
slave2      192.168.1.5

Multi-Master Replication Manager for MySQL(mysql-mmm) - 第1张  | linux工匠|关注运维自动化|Python开发|linux高可用集群|数据库维护|性能提优|系统架构

事前准备:

修改各主机的名字 /etc/sysconfig/network 比如monitor: HOSTNAME=monitor
修改各主机 /etc/hosts
192.168.1.1 monitor
192.168.1.2 db1
192.168.1.3 db2
192.168.1.4 db3
192.168.1.5 db4
配置monitor和各agent双机互信修改文件可以很方便
# ssh-keygen -t rsa
# for i in db1 db2 db3 db4; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$i;done
# for i in db1 db2 db3 db4; do ssh $i ‘date’;done #检测
如果时间不同步则
ntpdate ntp1.aliyun.com ;hwclock -w
yum install ntp ntpdate -y
service ntpd restart
在其他节点和此节点时间同步 ntpdate monitor
如果提示ntpdate[35485]: no server suitable for synchronization found 是因为NTP server没有和其自身或者其他的server同步,则在 /etc/ntp.conf 添加以下,然后重启ntp服务
server 127.127.1.0 fudge
127.127.1.0 stratum 8

安装mysql-mmm:

下面是两种安装方式:

安装方式1:

安装方式2:

monitor要装的包:

agent要装的包:

mysql安装略过

依次配置各个my.cnf 的server-id为1,2,3,4   比如db1:

server-id  = 1
read_only = 1

配置mysql主主

master1:

#查看master1 mysql-bin的日志文件名称和MASTER_LOG_POS的值,在master2上执行CHANGE MASTER TO MASTER_HOST 时使用,这里master1的MASTER_LOG_FILE=’mysql-bin.000010’,MASTER_LOG_POS=107

master2:

#查看master2 mysql-bin的日志文件名称和MASTER_LOG_POS的值,在master1上执行CHANGE MASTER TO MASTER_HOST 时使用,这里master2的MASTER_LOG_FILE=’mysql-bin.000006’,MASTER_LOG_POS=1180

配置mysql主从

slave1:

slave2:

在两个slave上面创建monitor的账号:

在db1 新建用户,稍后用于测试:

在db1创建一个表,在db4测试是否同步成功:

配置mysql-mmm:

配置mmm_agent.conf

monitor:  /etc/mysql-mmm目录下 mmm_agent.conf 注释#this db1

agent:  db1(192.168.1.2)–db4(192.168.1.5) 上mmm_agent.conf 依次为this db1,,this db4

配置mmm_common.conf

monitor:

配置agent:  把此配置文件mmm_common.conf复制到各agent /etc/mysql-mmm

配置mmm_mon.conf

monitor:

启动服务mysql-mmm:
先启agent,再启monitor,顺序不要错了
在各个agent节点启动服务# service mysql-mmm-agent restart
在monitor节点启动监控服务 # service mysql-mmm-monitor start
monitor节点查看

 

查看db1的ip地址:

检查及测试mysql-mmm:

在monitor节点登录可以写入的VIP

在db4查看是否有此数据

模拟主mysql服务关闭,测试VIP是否会移动到master2
在db1 service mysqld stop
monitor查看结果

然后把db1的mysql服务再次启动,在monitor查看

我们先手动把VIP迁移回db1

模拟slave节点当机:如果把db4直接关机,那么就出现下面的状态

Multi-Master Replication Manager for MySQL(mysql-mmm) - 第2张  | linux工匠|关注运维自动化|Python开发|linux高可用集群|数据库维护|性能提优|系统架构

mysql-mmm 数据一致性方面不是很好,
mysql-mmm模拟master2(读)执行的时候加锁lock,往master1(写)插入数据后,把master1关闭(模拟当机),查看数据完整性
1,在master2(读)上面use testdb; lock tables user read;
2,这时候把master1(写)插入一条数据 use testdb; insert into user values (4,”marry”);再service mysqld stop
3,master2上show processlist; unlock tables; select * from testdb.user;
4,master1现在为OFFLINE,master2为写入
5,再把master1 service mysqld start,master1 select * from testdb.user; 数据正常
不过slave插入了2条相同数据(master1 sql服务关闭前插入一条,VIP转移master2后又插入一条)

以前的mysql-mmm problem,现在应该解决了
http://code.openark.org/blog/mysql/problems-with-mmm-for-mysql
http://www.xaprb.com/blog/2011/05/04/whats-wrong-with-mmm/

最后编辑:
作者:bbotte
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。