MMM架构方案与实施
MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器),是关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能基于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。
MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。
MMM项目来自 Google:http://code.google.com/p/mysql-master-master
官方网站为:http://mysql-mmm.org
MMM主要功能由下面三个脚本提供
mmm_mond :负责所有的监控工作的监控守护进程,决定节点的移除等等
mmm_agentd :运行在mysql服务器上的代理守护进程,通过简单远程服务集提供给监控节点
mmm_control :通过命令行管理mmm_mond进程
关于此架构的优缺点:
优点:安全性、稳定性高,可扩展性好,当主服务器挂掉以后,另一个主立即接管,其他的从服务器能自动切换,不用人工干预。
缺点:至少三个节点,对主机的数量有要求,需要实现读写分离,可以在程序扩展上比较难实现。同时对主从(双主)同步延迟要求比较高!因此不适合数据安全非常严格的场合。
实用场所:高访问量,业务增长快,并且要求实现读写分离的场景。
环境部署:
master1 ip :192.168.1.10
master2 ip :192.168.1.20
slave1 ip :192.168.1.30
slave2 ip:192.168.1.40
monitor ip:192.168.1.50
所有主机都要安装MMM的依赖包这里就单以master1为例进行演示其他四台均是如此,无任何的修改变动。
#yum -y install perl-* libart_lgpl.x86_64 rrdtool.x86_64 rrdtool-perl.x86_64
安装perl库,使用centos7的互联网yum源安装
#cpan -i Algorithm::Diff Class::Singleton DBI DBD::mysql Log::Dispatch Log::Log4perl Mail::Send Net::Ping Proc::Daemon Time::HiResParams::Validate Net::ARP
为了防止后续环境中出现报错信息这里进行修改;给出解决方法:
解决方法:
# cpan Proc::Daemon
# cpan Log::Log4perl
在所有主机上配置/etc/hosts文件,添加如下内容:这里还是以master1为例;其他四台均是如此
在这里我们使用monitor对其他四台主机进行ping命令测试,查看是否可以互通:
在master1、master2、slave1、slave2主机上安装mysql5.7和配置复制
master1和master2互为主从,slave1、slave2为master1的从
在每个mysql的配置文件/etc/my.cnf中加入以下内容, 注意server_id不能重复。
master1服务器:
master2服务器
slave1服务器
slave2服务器
在完成了对my.cnf的修改后,通过systemctl restart mysqld重新启动mysql服务
4台数据库主机若要开启防火墙,要么关闭防火墙或者创建访问规则:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
在这里我们采用关闭防火墙;但如果应用在生产环境当中,此做法不可取,可使用上面的方式,开放3306端口
主从配置(master1和master2配置成主主,slave1和slave2配置成master1的从):
在master1上授权:
mysql> grant replication slave on *.* to [email protected]‘192.168.1.%‘ identified by ‘123456‘;
在master2上授权:
mysql> grant replication slave on *.* to [email protected]‘192.168.1.%‘ identified by ‘123456‘;
把master2、slave1和slave2配置成master1的从库:
在master1上执行show master status; 获取binlog文件和Position点
mysql> show master status;
在master2、slave1和slave2执行
mysql> change master to master_host=‘192.168.1.10‘,master_port=3306,master_user=‘rep‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=451;
master2执行:
slave1执行:
slave2执行:
执行成功之后开始验证主从复制结果:
mysql> start slave;
mysql> show slave status\G;
首先对master2进行验证结果let‘s go
接下来是slave1验证:
最后是对slave2进行验证:
通过以上结果表明这四台数据库的主从复制已经搭建好了;但是我们需要的是master1和master2是主主复制,所以接下来还要对master1进行配置:
把master1配置成master2的从库:
在master2上执行show master status ;获取binlog文件和Position点
mysql> show master status;
在master1上执行:
mysql> change master to master_host=‘192.168.1.20‘,master_port=3306,master_user=‘rep‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000002‘,master_log_pos=154;
验证master1和master2的主主复制:
mysql> start slave ;
mysql> show slave status\G;
我们来捋一捋思路;这里master1和master2是主主复制;
slave1和slave2与master1是主从复制的关系,接下来配置MMM的配置;
首先:在4台mysql节点上创建用户{master1、2和 slave1、2}
创建代理账号:
mysql> grant super,replication client,process on *.* to ‘mmm_agent‘@‘192.168.1.%‘ identified by ‘123456‘;
创建监控账号:
mysql> grant replication client on *.* to ‘mmm_monitor‘@‘192.168.1.%‘ identified by ‘123456‘;
这里还是以master1为例,由于他们已经是主从同步的关系了,所以其他三台主机也有这两个账号。
这里呢我们以其中的一台slave2为例查看下是否存在呢?
可以看到在master1上创建的两个账号,在slave2上面已经同步过来了。
mmm_monitor用户:mmm监控用于对mysql服务器进程健康检查
mmm_agent用户:mmm代理用来更改只读模式,复制的主服务器等
二:mysql-mmm的安装
在monitor主机上安装监控程序:
tar -zxf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1
make install
在数据库{master1,master2,slave1,slave2上安装代理}
tar -zxf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1
make install
主:此软件必须在每台MySQL上面进行安装;这个不能同步。
master1服务器;
master2服务器:
slave1服务器:
slave2服务器:
接下来进入激动人心的时刻了,大家提起点精神,开始配置MMM的文件,五台文件要保持一致。{mmm_commin.conf}
所有的配置文件都放到了/etc/mysql-mmm/下面。管理服务器和数据库服务器上都要包含一个共同的文件mmm_common.conf,内容如下:
将以上的文件拷贝到其他四台服务器上确保这五台服务器的此文件内容相同。此外:
还有一个mmm_agent.conf需要修改,其内容是:
includemmm_common.conf
this master1
这里以master1为例:其他三台修改为{master2、slave1、slave2}monitor除外
启动代理进程 其他三台也是monitor除外,这里以master1为例:
在 /etc/init.d/mysql-mmm-agent的脚本文件的#!/bin/sh下面,加入如下内容
加入系统服务
启动服务会报错解决方法:
# cpan Proc::Daemon
# cpan Log::Log4perl
就可以解决
在此重启的结果
以上都是以master1为例,其他三台配置方式和master1方式相同, 但在mmm_agent.conf文件修改不同上面已经指出。
编辑 monitor主机上的/etc/mysql-mmm/mmm_mon.conf
includemmm_common.conf
启动监控进程:
在 /etc/init.d/mysql-mmm-monitor的脚本文件的#!/bin/sh下面,加入如下内容
source /root/.bash_profile
添加成系统服务并设置为自启动
#chkconfig --add mysql-mmm-monitor
#chkconfig mysql-mmm-monitor on
#/etc/init.d/mysql-mmm-monitor start
启动会报错。解决方法
安装下列perl的库
#cpan Proc::Daemon
#cpan Log::Log4perl
在此启动
接下来查看群集状态:
以及服务器上线的命令:
群集状态:
查看所有群集的状态:
接下来可以将主master1的服务器模拟宕机,查看vip是否会漂移到master2上面。这里不再重复。
这就是今天为大家带来的MMM架构,如果有什么疑问可以在评论中提问。