一、Mysql-mmm集群技术概述
概述:
MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,可以说是mysql主主复制管理器。
虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的read负载均衡。
MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟ip,同时它还可以备份数据,实现两节点之间的数据同步等。由于MMM无法完全的保证数据一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度的保证业务可用性的场景。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lHcbfikn-1624164805432)(en-resource://database/847:1)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sN1vrBC5-1624164805434)(en-resource://database/849:1)]
二、Mysql-mmm优缺点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lw5kGeaI-1624164805435)(en-resource://database/851:1)]
三、Mysql-mmm内部工作架构
进程类型:
mmm_mond:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监管机上运行
mmm_agentd:运行在每个mysql服务器上(Master和Slave)的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行
mmm_control:一个简单的脚本,提供管理mmm_mond进程的命令
工作架构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-znebewIi-1624164805436)(en-resource://database/853:1)]
工作原理:
mysql-mmm的监管端会提供多个虚拟IP(VIP),包括一个可写VIP,多个可读VIP
通过监管的管理,这些IP会绑定在可用mysql之上
当某一台mysql宕机时,监管会将VIP迁移至其他mysql
四、案例搭建Mysql-mmm+mysql 5.6双主高可用集群
案例环境:
准备五台MySQL服务器
分别是:
192.168.1.1 | master1 |
---|---|
192.168.1.2 | master2 |
192.168.1.3 | slave1 |
192.168.1.4 | slave1 |
192.168.1.5 | monitor |
192.168.1.6 | client |
案例步骤:
部署master1节点的ntp服务以及域名解析(在此只举例master1):
hostnamectl set-hostname master1
bash
cat <<END >>/etc/hosts
192.168.1.1 master1
192.168.1.2 master2
192.168.1.3 slave1
192.168.1.4 slave2
192.168.1.5 monitor
END
配置master2、slave1、slave2、monitor节点同步ntp时间及域名解析(在此只列举master2单台主机配置)
yum -y install ntp
sed -i '/^server/s/^/#/g' /etc/ntp.conf
grep "^#server" /etc/ntp.conf
cat <<END >>/etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 8
END
systemctl start ntpd
systemctl enable ntpd
netstat -anptu | grep ntpd
yum -y install ntpdate
ntpdate 192.168.1.1
以上master2、slave1、slave2、monitor都要操作
配置master1实现双主复制
master1:
vi /etc/my.cnf
server-id=1
log-bin=mysql-bin
log-slave-updates
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
relay-log=relay1-log-bin
relay-log-index=slave-relay1-bin.index
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cc5VoqoZ-1624164805437)(en-resource://database/855:1)]
注解:
sync_binlog=1 ##主机每次提交事务的时候把二进制日志的内容同步到磁盘上,所以即使服务器崩溃,也会把时间写入到日志中;
auto_increment_increment=2 ##以下两参数用于主主复制中,用于错开增值,防止键值冲突
master1:
systemctl restart mysqld
mysql -uroot -p123456
mysql> grant replication slave on *.* to 'master'@'192.168.100.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File