MMM简介:
MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。
MySQL本身没有提供replication failover的解决方案,通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。

Mmm高可用架构说明 :

mmm_mon   负责所有的监控工作的监控守护进程,决定节点的移除等等
mmm_agent    运行在mysql服务器上的代理守护进程,通过简单远程服务集提供给监 控节点
mmm_control  通过命令行管理mmm_mond进程
mysql-mmm 监管端会提供多个虚拟IP,包括一个可写,多个可读,这些IP会绑定在可用mysql上,当一台发生宕机时,监管会将VIP迁移至其他mysql上
实验拓扑:
Mysql-MMM高可用群集
实验环境

主机 操作系统 IP地址 虚拟IP
mysql- master1(db1) CentOS-7-x86_64 192.168.37.128 192.168.37.150
mysql- master2(db2) CentOS-7-x86_64 192.168.37.130 192.168.37.150
mysql- slave1(db3) CentOS-7-x86_64 192.168.37.131 192.168.37.160
mysql- slave2(db4) CentOS-7-x86_64 192.168.37.132 192.168.37.160
monitor CentOS-7-x86_64 192.168.37.1326 ---

实验过程:
一、主从服务器安装mariadb
1、配置ALL源(yum源):

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2、配置epel源

yum -y install epel-release

3、加载元数据缓存

yum clean all && yum makecache

4、安装mariadb

yum install mariadb-sever mariadb -y

5、关闭防火墙、安全功能

systemctl stop firewalld.service
setenforce 0

二、修改配置文件
6、vim /etc/my.cnf

[mysqld]
log_error=/var/lib/mysql/mysql.err #错误日志
log=/var/lib/mysql/mysql_log.log #访问日志
log_slow_queries=/var/lib/mysql_slow_queris.log #慢日志
binlog-ignore-db=mysql,information_schema #mysql,information_schema 不生成二进制日志文件
character_set_server=utf8 #字符集
log_bin=mysql_bin #开启二进制文件
server_id=1 #进行修改
log_slave_updates=true #同步开启
sync_binlog=1 #同步二进制日志,1设为安全值
auto_increment_increment=2 #自增列,起点为1,增量为2
auto_increment_offset=1

7、配置文件复制到其他三台服务器

scp /etc/my.cnf root@192.168.37.130:/etc/
scp /etc/my.cnf root@192.168.37.131:/etc/
scp /etc/my.cnf root@192.168.37.131:/etc/
#复制时需要输入对方的root密码,并修改其他三台服务器的server-id

8、开启mariadb服务

systemctl start mariadb.service

三、主服务器授权同步
9、在master1上授权

grant replication slave on . to 'replication'@'192.168.37.%' identified by '123456';
show master status; #查看master2 的日志及位置参数

Mysql-MMM高可用群集

change master to master_host='192.168.37.130',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;
start slave; #开启同步
show slave status\G ; #查看master1同步情况

Mysql-MMM高可用群集

10、在master2上授权

grant replication slave on . to 'replication'@'192.168.37.%' identified by '123456';
show master status; #查看master1的日志及位置参数

Mysql-MMM高可用群集

change master to master_host='192.168.37.128',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=410;
start slave; #开启同步
show slave status\G ; #查看master2同步情况

Mysql-MMM高可用群集
四、从服务器同步主服务器
11、两台从服务器执行同样操作:

change master to master_host='192.168.37.128',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=410;
#注意要同步的主服务器的日志及位置参数变化,使用最新的。

Mysql-MMM高可用群集
Mysql-MMM高可用群集
12、测试四台服务器同步:在master1中新建数据库school,查看其它服务器是否也存在数据库school
Mysql-MMM高可用群集
Mysql-MMM高可用群集
测试成功!
五、安装MMM高群集(四台服务器)
13、yum安装mmm

yum install mysql-mmm* -y

14、编辑配置文件

vim /etc/mysql-mmm/mmm_common.conf

<host default>

cluster_interface ens33 #网卡
pid_path /run/mysql-mmm-agent.pid
bin_path /usr/libexec/mysql-mmm/
replication_user replication #授权的mysql用户
replication_password 123456 #授权用户密码
agent_user mmm_agent #代理用户
agent_password 123456
</host>
<host db1>
ip 192.168.37.128
mode master
peer db2
</host>

<host db2>
ip 192.168.37.130
mode master
peer db1
</host>

<host db3>
ip 192.168.37.131
mode slave
</host>

<host db4>
ip 192.168.37.132
mode slave
</host>

<role writer>
hosts db1, db2
ips 192.168.37.150
mode exclusive
</role>

<role reader>
hosts db3, db4
ips 192.168.37.160, 192.168.100.37.170
mode balanced

15、然后将配置复制给其它服务器,复制完回车后,输入对方root密码

scp mmm_common.conf root@192.168.37.130:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.37.131:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.37.132:/etc/mysql-mmm/

六、安装monitor
16、配置ALL源(yum源):

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

17、配置epel源

yum -y install epel-release

18、加载元数据缓存

yum clean all && yum makecache

19、yum安装mmm

yum install mysql-mmm* -y

20、在master1上复制给monitor

scp mmm_common.conf root@192.168.37.136:/etc/mysql-mmm/

21、编辑配置文件

vim /etc/mysql-mmm/ mmm_mon.conf

Mysql-MMM高可用群集

22、在所有数据库上为mmm_agent授权

grant super,replication client,process on . to 'mmm_agent'@'192.168.37.%' identified by '123456';

23、在所有数据库上为mmm_monitor授权

grant replication client on . to 'mmm_monitor'@'192.168.37.%' identified by '123456';
flush privileges; #授权后刷新权限

Mysql-MMM高可用群集
24、在所有服务器上修改mmm_agent.conf

vim /etc/mysql-mmm/mmm_agent.conf
this is db1/2/3/4

25、在所有服务器上启动mysql-mmm-agent

systemctl start mysql-mmm-agent.service #开启服务
systemctl enable mysql-mmm-agent.service #开机自启动

26、在monitor上启动监控服务

systemctl start mysql-mmm-monitor.service
systemctl stop firewalld.service
setenforce 0

27、查看各节点情况

mmm_control show
#如果不能连接 在master1上执行 mysql>flush privileges;

Mysql-MMM高可用群集

28、虚拟IP手动切换

mmm_control move_role writer db2 #虚拟IP转给db2

Mysql-MMM高可用群集

29、故障测试:
1)断掉主服务器sdb1,则虚拟IP会漂移到主服务器sdb2,但是如果sdb1恢复,不会抢占,只可以手动切换。
Mysql-MMM高可用群集

2)断掉从服务器sdb3,则虚拟IP会漂移到从服务器sdb4,如果sdb3恢复,则重新抢占。
Mysql-MMM高可用群集

这样,如果其中一台主服务器或者从服务器宕机,虚拟IP会漂移到另一台可用的服务器上,从而实现高可用群集。