11 Mysql配置MMM高可用

介绍

实现原理
MMM(Master-Master Replication Manager for MySQL)MySQL主主复制管理器。MMM是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的)

MMM的监管端是会提供多个虚拟IP(VIP),包括一个可写VIP,多个可读VIP,通过监管的管理,这些IP会绑定在可用mysql之上,当某一台mysql宕机时,会将VIP迁移至其他mysql

实验一般来是2主2从,可以实现:
写高可用
当一台主宕机,写VIP立刻飘移到另外一台主库,从库指向另一台主库
读高可用
当一台读宕机,立刻将读VIP漂移到其他服务器上。

概念:
mmm_mond:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。因此脚本需要在监管机上运行

mmm_agentd:运行在每个mysql服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行。

mmm_control:一个简单的脚本,提供管理mmm_mond进程的命令。

架构图

11 Mysql配置MMM高可用

MMM实现MySQL高可用案例实验

实验准备:

mysql-1 主:192.168.1.10
mysql-2 主:192.168.1.11
mysql-3 从:192.168.1.12
mysql-4 从:192.168.1.13
mysql-monitor:192.168.1.14
write-VIP:192.168.1.100
read-VIP:192.168.1.200 192.168.1.201

实验流程

这里我直接使用mariadb实现

首先配置双主+两从
四台mysql服务器下载maridb
yum -y install mariadb mariadb-server

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

11 Mysql配置MMM高可用

log-bin=mysql-bin
server-id=1
其他三台server-id分别为2、3、4

开启mariadb
systemctl start mariadb

生产环境中增加从库要先将主库上的数据锁表备份到从库中

锁的知识:
lock table read | write
共享锁又称:读锁。当一个事务对某几行上读锁时,允许其他事务对这几行进行读操作,但不允许其进行写操作,也不允许其他事务给这几行上排它锁,但允许上读锁。
排它锁又称:写锁。当一个事务对某几个上写锁时,不允许其他事务写,但允许读。更不允许其他事务给这几行上任何锁。包括写锁。

操作:
主库锁表:
mysql
flush tables with read lock;
主库导出数据(10):
mysqldump -uroot --all-databases --opt > mysql_all.$(date +%F).sql
scp mysql_all.当前日期.sql 192.168.1.11:/root
从库导入(11):
mysql -uroot < mysql_all.当前日期.sql
主库解锁
unlock tables;

相互授权,互为主从
主1(10):
mysql
flush master;
show master status;

11 Mysql配置MMM高可用

授权
grant replication slave on *.* to 'slave'@'192.168.1.%' identified by '123';flush privileges;

接受授权
change master to master_host='192.168.1.11',master_user='slave',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=245;

开启从模式

show slave status\G

11 Mysql配置MMM高可用

主2(11):

show master status;

11 Mysql配置MMM高可用

授权
grant replication slave on *.* to 'slave'@'192.168.1.%' identified by '123';flush privileges;

接受授权
change master to master_host='192.168.1.10',master_user='slave',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=245;

开启从模式
start slave;

查看从库状态
show slave status\G

11 Mysql配置MMM高可用

两个从库(12、13)指定到10为主库
mysql
change master to master_host='192.168.1.10',master_user='slave',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=245;
start slave;
show slave status\G

11 Mysql配置MMM高可用

测试同步复制,10端创建一个库,查看其它三个库是否存在
10:
create database abc;

11、12、13:
show databases;

11 Mysql配置MMM高可用

配置MMM

所有主机都使用阿里网络源

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache

配置mmm-agent(10-13)

在四台MySQL服务上安装mysql-mmm-agent,先在10端配置
yum -y install mysql-mmm-agent

先在14上安装mysql-mmm-monitor,之后再配置(这一步提前便于直接scp)
yum -y install mysql-mmm-monitor
 cd /etc/mysql-mmm/
cp -p mmm_common.conf mmm_common.conf.bak
vim /etc/mysql-mmm/mmm_common.conf

active_master_role      writer

<host default>
    cluster_interface       ens33
    pid_path                /run/mysql-mmm-agent.pid
    bin_path                /usr/libexec/mysql-mmm/
    replication_user        slave
    replication_password    123
    agent_user              mmm_agent
    agent_password          123
</host>

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

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

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

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

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

<role reader>
    hosts   db3,db4
    ips     192.168.1.200,192.168.1.201
    mode    balanced
</role>
11 Mysql配置MMM高可用
11 Mysql配置MMM高可用
11 Mysql配置MMM高可用

传给其他主机
scp mmm_common.conf 192.168.1.11:/etc/mysql-mmm/
scp mmm_common.conf 192.168.1.12:/etc/mysql-mmm/
scp mmm_common.conf 192.168.1.13:/etc/mysql-mmm/
scp mmm_common.conf 192.168.1.14:/etc/mysql-mmm/

修改10、11、12、13 /etc/mysql-mmm/mmm_agent.conf为db1、db2、db3、db4
vim /etc/mysql-mmm/mmm_agent.conf

11 Mysql配置MMM高可用

四台数据库给mmm_agent授权

mysql
grant  super,replication  client,process  on  *.*  to  'mmm_agent'@'192.168.1.%'  identified  by '123';flush privileges;
exit

四台mysql启动agent服务:
systemctl start mysql-mmm-agent

配置mmm-monitor(14)
vim /etc/mysql-mmm/mmm_mon.conf

11 Mysql配置MMM高可用

开启监控
systemctl start mysql-mmm-monitor.service

查看监控状态
mmm_control show

11 Mysql配置MMM高可用

测试

测试写入高可用:
关闭10的服务,写VIP飘到了11上,在12、13上查看从服务状态主服务器是11端,重启10端mysql关闭11端mysql可以发现VIP又飘了回去
10端:

11 Mysql配置MMM高可用

11端:

11 Mysql配置MMM高可用

此时13、14的库状态自动切换为11为主:

11 Mysql配置MMM高可用

15端:

11 Mysql配置MMM高可用

关闭11库,开启10库飘回去

11 Mysql配置MMM高可用
11 Mysql配置MMM高可用

12、13重新换主库目标

11 Mysql配置MMM高可用

测试读取高可用:关闭mysql3的mysql服务,发现读VIP飘到了mysql4上
首先

11 Mysql配置MMM高可用
11 Mysql配置MMM高可用

关掉12的mysql服务
12端

11 Mysql配置MMM高可用

13端

11 Mysql配置MMM高可用

14端

11 Mysql配置MMM高可用

发布者:LJH,转发请注明出处:https://www.ljh.cool/6576.html

(0)
上一篇 2020年7月29日 下午3:51
下一篇 2020年8月21日 下午1:00

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注