MMM即Multi-Master Replication Manager for MySQL:mysql多主复制管理器,基于perl实现,关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),MMM也能对从服务器进行读负载均衡,所以可以用它来在一组用于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。
优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性。当主服务器挂掉以后,另一个主立即接管,其他的从服务器能自动切换,不用人工干预。
缺点:monitor节点是单点,不过这个你也可以结合keepalived或者haertbeat做成高可用;至少三个节点,对主机的数量有要求,需要实现读写分离,还需要在前端编写读写分离程序。在读写非常繁忙的业务系统下表现不是很稳定,可能会出现复制延时、切换失效等问题。MMM方案并不太适应于对数据安全性要求很高,并且读、写繁忙的环境中。
二、部署实施
1、环境介绍
OS:centos7.2(64位)数据库系统:mysql5.7.13 关闭selinux
主机 |
Ip |
Hostname |
Server--id |
Master1 |
192.168.119.129 |
Master1 |
1 |
Master2 |
192.168.119.130 |
Master2 |
2 |
Slave |
192.168.119.131 |
Slave |
3 |
Montior |
192.168.119.132 |
Montior |
4 |
使用yum进行安装相关的依赖包
安装perl相关的库
字有点小(cpan -i Algorithm::Diff Class::Singleton DBI DBD::mysql Log::Dispatch Log::Log4perl Mail::Send Net::ping Proc::Daemon Time::HiResParams::Validate Net::ARP)
在/etc/hosts里添加地址和主机名
测试能否ping通,进行通信
在master1中添加mysql /etc/my.cnf主配置参数文件
在master2中添加/etc/my.cnf主配置文件
在slave中添加/etc/my.cnf主配置文件
修改完后关闭防火墙,启动mysql服务
其余两台master2、slave按照上图执行
创建主从复制环境,master1是master2、slave的主,master2是master1的主
创建授权连接用户
两台master上都执行
查看master1的状态
在master2上建立连接实现主从复制
启动slave查看是否连接必须为yes
在slave上建立连接实现主从复制
把master2设为主跟上面的步骤一样,只需把ip地址改一下即可
下图是在master1上执行的
上面的已经把主主复制及主从复制做ok了
设置mysql-mmm
在master1上创建代理账号、创建监控账号,因为已经主从复制了就可以在主上面创建了,会同步的
查看那两台是否都存在监控和代理账号
www用户:mmm监控用于对mysql服务器进程健康检查
qqq用户:mmm代理用来更改只读模式,复制的主服务器等
mysql-mmm安装
在montior主机上安装监控程序
在master1、master2、slave中安装代理
配置mmm,要求必须四台主机必须一样的配置文件
安装后的所有配置文件都存放在/etc/mysql-mmm/下面,管理和数据库服务器上都要包含一个共同的文件mmm_common.cof,配置文件如下:
active_master_role writer
cluster_interface eno16777736
pid_path /var/run/mmm_agentd.pid
bin_path /usr/lib/mysql-mmm/
replication_user rep
replication_password 123
agent_user qqq
agent_password 123
ip 192.168.119.129
mode master
peer master2
ip 192.168.119.130
mode master
peer master1
ip 192.168.119.131
mode slave
hosts master1,master2
ips 192.168.119.10
mode exclusive
hosts master1,master2, slave
ips 192.168.119.11,192.168.119.22,192.168.119.33
mode balanced
使用for循环语句分发给其他三台主机
代理文件需要在master1、master2、slave中修改/mmm_agent.conf
this后面添加本地主机名就可以了
启动代理进程 需要进入脚本/etc/init.d/mysql-mmm-agent脚本
把mmm添加为系统服务并设置为自启
能显示出来ok证明前面做的没有问题,在三台代理的主机都设置
编辑monitor主机的/etc/mysql-mmm/mmm_mon.conf
每个参数的意思
ip 127.0.0.1 设置只在本机监听,mmm_mond默认监听9988
pid_path /var/run/mmm_mond.pid
bin_path /usr/lib/mysql-mmm/
status_path /var/lib/misc/mmm_mond.status
ping_ips 192.168.119.129,192.168.119.130,192.168.119.131 用于测试网络可用性 IP 地址列表
auto_set_online 0 设置自动online的时间,默认是60s
check_period 5 检查周期默认为5s
trap_period 10 一个节点被检测不成功的时间持续trap_period秒
timeout 2 检查超时的时间
restart_after 10000 在完成restart_after次检查后,重启checker进程,默认值:10000
max_backlog 86400 记录检查rep_backlog日志的最大次数
monitor_user www 监控db服务器的用户
monitor_password 123 监控db服务器的密码
debug 0 debug 0正常模式,1为debug模式
启动监控进程在/etc/init.d/mysql-mmm-monitor文件中添加
添加成系统服务并设置为自启动
chkconfig --add mysql-mmm-monitor
chkconfig mysql-mmm-monitor on
/etc/init.d/mysql-mmm-monitor start
把服务器上线
检查所有的db服务器群集状态
查看所有的群集状态
查看命令,监控命令参数有很多,可以从网上查找。