参考文档:
本文对mmm方案做简单介绍,并做1个简单的验证。
MMM(Multi-Master Replication Manager for MySQL)是一组集监控,故障切换,管理MySQL多主复制的脚本套件,同时具备对读请求进行负载均衡的能力,同时为MySQL提供了良好的读、写分离架构。
注意:
MMM套件主要功能是通过以下三个脚本实现的:
CentOS-6.7-x86_64
MySQL版本是5.6.36: https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.36.tar.gz
Role |
Hosts |
IP |
Attributes |
VIP |
Description |
master1 |
master |
10.11.4.196 |
write |
10.11.4.191 |
通过VIP进行写操作 |
master2 |
backup |
10.11.4.197 |
write | read |
10.11.4.192 10.11.4.193 |
master2在master1无故障时只提供读服务,master1故障时接管写VIP |
slave |
slave |
10.11.4.198 |
read |
||
monitor |
mmm |
10.11.4.199 |
monitor |
- #4台服务器配置相同
- [root@master ~]# vim /etc/hosts
- 10.11.4.196 master
- 10.11.4.197 backup
- 10.11.4.198 slave
- 10.11.4.198 mmm
User |
Password |
Privileges |
Description |
mmm_monitor |
mmm_monitor |
REPLICATION CLIENT |
监控数据库状态,包括主从延时等 |
mmm_agent |
mmm_agent |
SUPER,REPLICATION CLIENT,PROCESS |
修改write服务器的read_only状态,重新定向新主库等 |
repl |
repl |
REPLICATION SLAVE |
主从/主主复制用户(已预配置) |
- #只需要在3台db服务器创建账户即可,监控服务器不需要 [root@master~]#mysql - uroot - p Enter password:
- mysql > GRANT REPLICATION CLIENT ON * . * TO 'mmm_monitor'@'10.11.4.%'IDENTIFIED BY 'mmm_monitor';
- mysql > GRANT SUPER,
- REPLICATION CLIENT,
- PROCESS ON * . * TO 'mmm_agent'@'10.11.4.%'IDENTIFIED BY 'mmm_agent';
- mysql > flush privileges;
- #默认的yum源中没有mmm,需要先安装epel;
- #数据库服务器只需要安装mysql-mmm-agnet
- [root@master ~]# wget http://mirrors.ustc.edu.cn/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
- [root@master ~]# rpm -ivh epel-release-6-8.noarch.rpm
- [root@master ~]# yum -y install mysql-mmm-agent
- #监控服务器可以安装全部mmm方案组件,实际上只启动mysql-mmm-monitor组件
- [root@mmm ~]# wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
- [root@mmm ~]# rpm -ivh epel-release-6-8.noarch.rpm
- [root@mmm ~]# yum -y install mysql-mmm*
Path |
Description |
/usr/libexec/mysql-mmm/ |
脚本路径 |
/usr/share/perl5/vendor_perl/MMM/ |
MMM的Perl路径 |
/usr/sbin/ |
可执行命令 |
/etc/init.d/ |
启动服务 |
/etc/mysql-mmm/ |
配置文件 |
/var/log/mysql-mmm/ |
日志文件 |
- #mmm_common.conf文件,在监控服务器与数据库服务器上都需要配置,且配置一致;
- #以下为按规划做的配置
- [root@mmm ~]# vim /etc/mysql-mmm/mmm_common.conf
- # 积极的master角色的标示,全部db服务器都需要开启read_only参数,监控代理会自动将writer服务器的read_only属性关闭.
- active_master_role writer
- <host default>
- # cluster接口
- cluster_interface br0
- # pid路径
- pid_path /var/run/mysql-mmm/mmm_agentd.pid
- # 执行文件路径
- bin_path /usr/libexec/mysql-mmm/
- # 复制用户
- replication_user repl
- # 复制用户密码
- replication_password repl
- # 代理用户,用于更改read_only属性等操作
- agent_user mmm_agent
- # 代理用户密码
- agent_password RepAgent
- </host>
- # "host"参数后带角色服务器的host名
- <host master>
- # 角色服务器的IP地址
- ip 10.11.4.196
- # 服务器的角色属性
- mode master
- # 与角色对等属性的服务器的host名,这里指master2,即backup
- peer backup
- </host>
- # 双主中的另一台服务器,概念一致
- <host backup>
- ip 10.11.4.197
- mode master
- peer master
- </host>
- # 从库的host名,如果有多个从库可重复配置
- <host slave>
- ip 10.11.4.198
- # 服务器角色属性
- mode slave
- </host>
- # writer角色配置
- <role writer>
- # 可进行写操作的服务器的host名;
- # 如果不想切换写操作此处可只配置1台服务器,可以避免因为网络延时而进行write的切换,但master出现故障时,MMM就没有writer了,只提供对外的read操作.
- hosts master, backup
- # 写操作vip
- ips 10.11.4.191
- # 同时只允许一个主存在,只提供一个写vip
- mode exclusive
- </role>
- # reader角色配置
- <role reader>
- # 可进行读操作的服务器的host名;
- hosts backup, slave
- # 读操作vip;
- # vip与host没有一一对应关系;
- # vip与host数目也没有对应关系,vip可以对于host数,此时部分host可分配到多个vip
- ips 10.11.4.192, 10.11.4.193
- # 负载均衡模式
- mode balanced
- </role>
- #同时可以将此配置文件拷贝到其余3台服务器:
- [root@mmm ~]# scp /etc/mysql-mmm/mmm_common.conf master:/etc/mysql-mmm/
- [root@mmm ~]# scp /etc/mysql-mmm/mmm_common.conf backup:/etc/mysql-mmm/
- [root@mmm ~]# scp /etc/mysql-mmm/mmm_common.conf slave:/etc/mysql-mmm/
- #mmm_mon.conf文件,监控服务器文件配置
- [root@mmm ~]# vim /etc/mysql-mmm/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
- # cluster状态文件,mmm_control show操作的原始数据
- status_path /var/lib/mysql-mmm/mmm_mond.status
- # 被监控的db服务器IP地址
- ping_ips 10.11.4.196,10.11.4.197,10.11.4.198
- # 不设置时,默认值是60s;
- # 故障恢复后,offline超过60s的节点会一直处于AWAITING_RECOVERY的状态,需要手动set_online;
- # offline低于60s的节点,且非flapping状态,会自动online
- auto_set_online 20
- # 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>
- # 监控db服务器的用户
- monitor_user mmm_monitor
- # 监控db服务器的用户密码
- monitor_password mmm_monitor
- </host>
- # 0是正常模式,1是debug模式
- debug 0
- #mmm_agent.conf文件,3台db服务器上的代理文件配置
- [root@master ~]# vim /etc/mysql-mmm/mmm_agent.conf
- include mmm_common.conf
- # this后面的参数是当前服务器的host名;
- # 在3台db服务器根据host名修改即可,监控服务器不需要
- this master
- #监控服务器默认开机启动没有设置;
- #配置文件如有改动,监控端或db服务器都需要重启进程
- [root@mmm ~]# chkconfig --level 35 mysql-mmm-monitor on
- [root@mmm ~]# service mysql-mmm-monitor start
- #3台db服务器操作类似
- [root@master ~]# chkconfig --level 35 mysql-mmm-agent on
- [root@master ~]# service mysql-mmm-agent start
- #mmm_agent服务打开本地tcp9989端口,供监控/管理端访问,需要防火墙放行;
- #3台db服务器操作类似
- [root@master ~]# vim /etc/sysconfig/iptables
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 9989 -j ACCEPT
- [root@master ~]# service iptables restart
- #查看ping,mysql,复制线程是否正常
- [root@mmm ~]# mmm_control checks all
- #各角色已经拿到vip
- [root@mmm ~]# mmm_control show
- #backup节点的状态是”ADMIN_OFFLINE”;
- #slave节点同时获得2个读vip
- [root@mmm ~]# mmm_control set_offline backup
- [root@mmm ~]# mmm_control show
- #backup节点的状态在恢复到"ONLINE"前,有一个短暂的"REPLICATION_FAIL"状态
- [root@mmm ~]# mmm_control set_online backup
- [root@mmm ~]# mmm_control show
- #当前对应的master是master节点
- [root@slave ~]# mysql -uroot -pxxxxxx -e 'show slave status\G;'
- #write角色已经切换到backup节点
- [root@mmm ~]# mmm_control move_role writer backup
- [root@mmm ~]# mmm_control show
- #当前对应的master是backup节点
- [root@slave ~]# mysql -uroot -pxxxxxx -e 'show slave status\G;'
监控端:/var/log/mysql-mmm/mmm_mond.log
代理端:/var/log/mysql-mmm/mmm_agentd.log
除常用的mmm_control命令外,mmm方案还提供如下命令:
mmm_backup :备份文件
mmm_restore :还原文件
mmm_clone :克隆文件
来源: http://www.linuxidc.com/Linux/2017-10/147547.htm