MMM 和 MHA 两种架构的作用
对主从复制集群中 Master 的健康进行监控 当 Master 宕机后把写 VIP 迁移到新的 Master 重新配置集群中的其他 Slave 对新的 Master 同步
MMM 架构搭建
1、MMM 架构的故障转移步骤
Slave 服务器上的操作 完成原主上已复制日志的恢复 使用 Change Master 命令配置新主 -主备服务器上的操作 设置 read_only=off 迁移写 VIP 到新主服务器上
2、 MMM 架构需要的资源
| 资源 | 数量 | 说明 |
|---|---|---|
| 主 DB | 2 | 用于主备模式的主主复制配置 |
| 从 DB | 0-N | 可以配置 0 台或 N 台从服务器 |
| IP 地址 | 2N+1 | N 为 MySQL 服务器的数量 |
| 监控用户 | 1 | 用于监控数据库状态的 MySQL 用户(replication client) |
| 代理用户 | 1 | 用于 MMM 的 agent 端,用于改变 read_only 状态(super/replication client/process) |
| 复制用户 | 1 | 用于配置 MySQL 复制的 MySQL 用户(replication slave) |
3、MMM 架构的配置步骤
配置主主复制的集群架构 安装 Centos 的 yum 扩展包(很重要) 安装所需的 Perl 支持 安装 MMM 工具包 配置并启用 MMM 服务
4、配置
4.1、服务器版本和 mysql 版本
# 服务器版本
[root@oscar ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
# mysql 版本
mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.21 |
+-----------+
# MMM和MHA 是比较老主从复制管理工具,对 MySQL8.0 的认证方式还不支持,所以默认认证插件需要修改:
default-authentication-plugin=mysql_native_password
4.2、分别修改 3 台服务器 hosts 文件,增加主机名和 IP 地址间的关系
[root@oscar ~]# vim /etc/hosts
172.18.225.142 mysql-01-master
172.18.225.143 mysql-02-backup
172.18.225.144 mysql-03-slave
172.18.225.145 mysql-04-monitor
4.3、mysql-01-master 和 mysql-02-backup 互为主备
# 查看master_lo、master_log_pos
mysql> show master status \G
# 在 172.18.225.142 我服务器上执行
mysql> change master to master_host='172.18.225.143',master_log='mysql-bin-000003',master_log_pos=811;
# 启动复制链路
mysql> start slave user='repl_oscar' password='Repl@666';
# 查看
mysql> show slave status \G
# 在 172.18.225.143 我服务器上执行
mysql> change master to master_host='172.18.225.142',master_log='mysql-bin-000003',master_log_pos=811;
# 启动复制链路
mysql> start slave user='repl_oscar' password='Repl@666';
# 查看
mysql> show slave status \G
4.4、把 mysql-03-slave 配置为 mysql-01-master 的从库
# 把 mysql-01 上的 master.sql 文件传到 mysql-03
[root@oscar ~]# scp master.sql root@172.18.255.144:/root
# 在mysql-03上恢复主库数据备份文件
[root@oscar ~]# mysql -uroot -p <master.sql
# 在mysql-03 上配置复制链路
change master to master_host='172.18.225.142',master_log='mysql-bin-000012',master_log_pos=710;
# 启动复制链路
mysql> start slave user='repl_oscar' password='Repl@666';
# 查看
mysql> show slave status \G
配置高可用架构的时候要关闭防火墙
查看服务器防火墙状态
[root@oscar ~]# systemctl status firewalld
[root@oscar ~]# sestatus
mysql-01-master 和 mysql-02-backup 互为主备,修改其自增 ID 的步长和起始值,防止 ID 重复
mysql> show variables like 'auto%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_generate_certs | ON |
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| autocommit | ON |
| automatic_sp_privileges | ON |
+--------------------------+-------+
# mysql-01-->1、3、5、7
mysql> set persist auto_increment_increment=2;
mysql> set persist auto_increment_offset=1;
# mysql-02--->2、4、6、8
mysql> set persist auto_increment_increment=2;
mysql> set persist auto_increment_offset=2;
4.5、安装 MMM 组件(4 台服务器都要安装 yum 扩展包)
监控端全部安装,但是监控端只需要用到 mysql-mmm-monitor,mysql-mmm-agent 不需要启动。数据库端只需要安装 mysql-mmm-agent
yum 源:https://dl.fedoraproject.org/pub/epel/
[root@oscar ~]# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@oscar ~]# rpm -ivh epel-release-latest-7.noarch.rpm
[root@oscar ~]# cd /etc/yum.repos.d/
[root@oscar yum.repos.d]# vi epel.repo
gpgcheck=0
在监控服务器执行(mysql-04) 把它配置成监控服务器
# 安装MMM工具包
[root@oscar ~]# yum -y install mysql-mmm*
在数据库服务器上执行(mysql-01、mysql-02、mysql-03) 安装 MMM agent 包
[root@oscar ~]# yum -y install mysql-agent
4.6、建立 MMM 数据库所使用的账号(在主库上来创建,可同步到其他服务器)
| 用户 | 权限 | 说明 |
|---|---|---|
| mmm_monitor | replication client | 用于监控 MySQL 数据库状态,包括主延时等 |
| mmm_agent | super,replication client,process | 修改 write 服务器的 read_only 状态,执行从库重新定向新的主库等 |
| repl | replication slave | 主从、主主之间的复制用户 |
# 监控
# 创建
mysql> create user mmm_monitor@'172.18.225.%' identified by '123456';
# 授权
mysql> grant replication client on *.* to mmm_monitor@'172.18.225.%';
# 代理
mysql> create user mmm_agent@'172.18.225.%' identified by '123456';
mysql> grant super,replication client,process on *.* to mmm_agent@'172.18.225.%';
# 同步账号
mysql> create user repl@'172.18.225.%' identified by '123456';
mysql> grant replication slave on *.* to repl@'172.18.225.%';
4.7、文件配置
db 服务器配置文件:mmm_agent.conf,mmm_common.conf 监控服务器的配置文件:mmm_mon.conf,mmm_common.conf(该文件所有服务器一样)
[root@oscar ~]# cd /etc/mysql-mmm
# 编辑 mmm_common.conf
[root@oscar ~]# vi mmm_common.conf
active_master_role writer ###积极的master角色的标示,所有的db服务器都需要开启read_only参数,对于writer服务器监控代理会自动将read_only属性关闭。
<host default>
cluster_interface eth0 #####群集的网络接口
pid_path /var/run/mysql-mmm/mmm_agentd.pid ####pid路径
bin_path /usr/libexec/mysql-mmm/ #####可执行文件路径
replication_user repl #######复制用户
replication_password 123456 #######复制用户密码
agent_user mmm_agent #######代理用户,用于更改只读操作
agent_password 123456 #######代理用户密码
</host>
<host master> ##########master1的host名
ip 172.18.225.142 #####master1的ip
mode master ########角色属性,master代表是主
peer backup ########与master1对等的服务器的host名,也就是master2的服务器host名
</host>
<host backup> ####和master的概念一样
ip 172.18.225.143
mode master
peer master
</host>
<host slave> #####从库的host名,如果存在多个从库可以重复一样的配置
ip 172.18.225.144 ####从的ip
mode slave #####slave的角色属性代表当前host是从
</host>
<role writer> ####writer角色配置
hosts master,backup ####能进行写操作的服务器的host名,如果不想切换写操作这里可以只配置master,这样也可以避免因为网络延时而进行write的切换,但是一旦master出现故障那么当前的MMM就没有writer了只有对外的read操作。
ips 192.168.137.100 #####对外提供的写操作的虚拟IP
mode exclusive #####exclusive代表只允许存在一个主,也就是只能提供一个写的IP
</role>
<role reader> #####read角色配置
hosts mysql-01-master,mysql-02-backup,mysql-03-slave ######对外提供读操作的服务器的host名,当然这里也可以把master加进来
ips 192.168.1.82,192.168.1.83,192.168.1.84 ###对外提供读操作的虚拟ip,这两个ip和host不是一一对应的,并且ips也hosts的数目也可以不相同,如果这样配置的话其中一个hosts会分配两个ip
mode balanced ###balanced代表负载均衡
</role>
# 同时把 mmm_common.conf 拷贝到其他服务器上,包括监控服务器
[root@oscar ~]# scp /etc/mysql-mmm/mmm_common.conf root@172.18.225.142:/etc/mysql-common/
[root@oscar ~]# scp /etc/mysql-mmm/mmm_common.conf root@172.18.225.143:/etc/mysql-common/
[root@oscar ~]# scp /etc/mysql-mmm/mmm_common.conf root@172.18.225.145:/etc/mysql-common/
从 master 服务器中编辑 mmm_agent.conf
[root@oscar ~]# cd /etc/mysql-mmm
# 编辑 mmm_common.conf
[root@oscar ~]# vi mmm_agent.conf
修改 节点db,就是mmm_common.conf文件中配置的节点(db)和 ip
this db1
此处配置只修改 db 服务器,监控服务器不需要修改,this 后面的 host 名改成当前服务器的 host 名,backup 和 slave 也改成对应的服务器的 host 名。
4.8、配置监控服务器
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
status_path /var/lib/mysql-mmm/mmm_mond.status #####群集的状态文件,也就是执行mmm_control show操作的显示来源。
ping_ips 172.18.225.142,172.18.225.143,172.18.225.144,172.18.225.145 ######被监控的db服务器的ip地址
auto_set_online 0 ####设置自动online的时间,默认是超过60s就将它设置为online,默认是60s,这里将其设为0就是立即online
</monitor>
<host default>
monitor_user mmm_monitor ####监控db服务器的用户
monitor_password 123456 ####监控db服务器的密码
</host>
debug 0 #######debug 0正常模式,1为debug模式
4.9、启动 MMM (各节点启动方式一样)
# 查看状态
[root@oscar ~]# systemctl status mysql-mmm-agent
# 启动
[root@oscar ~]# systemctl start mysql-mmm-agent
最后还要启动监控服务(mysql-04)
[root@oscar ~]# systemctl start mysql-mmm-monitor
[root@oscar ~]# systemctl status mysql-mmm-monitor
监控 MMM
[root@oscar ~]# systemctl status mysql-mmm-monitor
[root@oscar ~]# mmm_control show
# 查看虚拟IP
[root@oscar ~]# ip addr
MMM 架构的优点:
提供了读写 VIP 的配置,使读写请求都可达到高可用。 工具包相对完善,不需要额外开发脚本 完成故障转移后,可以持续对 MySQL 进群进行高可用监控
MMM 架构的缺点:
故障切换简单粗暴易丢事务 主备使用 5.7 以后的半同步复制 不支持 GTID 的复制方式 自行修改 perl 脚本实现 社区不活跃,很久未更新版本
MMM 架构的适用场景:
使用基于日志点的主从复制方式 使用主主复制架构 需要考虑读高可用的场景
文章转载自零点小思随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




