暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 搭建MMM架构

零点小思随笔 2021-05-07
1460

MMM 和 MHA 两种架构的作用

  • 对主从复制集群中 Master 的健康进行监控
  • 当 Master 宕机后把写 VIP 迁移到新的 Master
  • 重新配置集群中的其他 Slave 对新的 Master 同步

MMM 架构搭建

1、MMM 架构的故障转移步骤

  • Slave 服务器上的操作
    • 完成原主上已复制日志的恢复
    • 使用 Change Master 命令配置新主 -主备服务器上的操作
    • 设置 read_only=off
    • 迁移写 VIP 到新主服务器上

2、 MMM 架构需要的资源

资源数量说明
主 DB2用于主备模式的主主复制配置
从 DB0-N可以配置 0 台或 N 台从服务器
IP 地址2N+1N 为 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_monitorreplication client用于监控 MySQL 数据库状态,包括主延时等
mmm_agentsuper,replication client,process修改 write 服务器的 read_only 状态,执行从库重新定向新的主库等
replreplication 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论