使用Xenon实现MySQL高可用集群
1、Xenon 介绍
xenon 架构介绍 ,每个MySQL 节点安装了一个agent ,agent的作用:ping 一下本来MySQL是否存活,然后把本地的gtid 获取出来,写入到local index ,看各节点的local index的gtid 谁大,谁大谁做作为主库。
每个agent 都有一个心跳信息,主库的Leader 和 从库的Follower 的心跳时间是可以配置的,超过了多长时间,就认为主库不存活,然后从节点选举主库。
xenon 为什么要用三节点:其实用了增强半同步架构,最少有一个从节点,给主库ACK响应。两个从节点,就是为了防止,一个从节点挂了,主库不对外工作了。
xenon 的约束
- 针对金融环境,基于GTID,增强半同步的复制架构。
- mysql与xenon使用同一个用户启动(例如:都使用mysql用户启动,或都使用root用户启动,正常都使用mysql用户)
- 要使用mysqld_safe启动mysql
实际 xenon 环境使用:
- 如果需要读写分离可以结合 ProxySQL
- xenon 做高可用
2、架构环境说明
IP | Centos | HostName | MySQL | xtrabackup | user | 备注 |
10.0.0.150 | Centos 7.8 | mysql-150 | MySQL 8.0.19 | 8.0.11 | mysql | 主库 |
10.0.0.151 | Centos 7.8 | mysql-152 | MySQL 8.0.19 | 8.0.11 | mysql | 从库 |
10.0.0.152 | Centos 7.8 | mysql-152 | MySQL 8.0.19 | 8.0.11 | mysql | 从库 |
vip:10.0.0.100,对外提供服务的IP
3、MySQL 安装准备
注:MySQL 8.0.19 安装省略
3.1、MySQL 主从复制搭建
- 基于 GTID+ROW 主从复制架构
- 参数设置:(从库操作151,152,设置一下参数)
- 配置成主从:(151和152 change 到 150)
注:这里配置主从复制省略
3.2、MySQL 半同步复制配置
1、安装插件(所有机器150,151,152)
2、启动半同步(所有机器)
注:其实这里只需要所有节点安装半同步插件,并不需要启动半同步。xenon 会自动配置半同步
3.3、系统配置
- 修改三台主机的mysql账号指定shell 为/bin/bash ,并改密码(三台机密码改成一样):
- 修改 mysql 环境变量:从其它普通账号复制 .bash* 到mysql 用户家目录(三台机器操作)
- 添加mysql账号的sudo权限 (所有机器操作)
3.4、配置 hosts 解析
所有机器配置
3.5、各节点配置 ssh 互信
3.5.1、150 配置
其实配置可以像 151配置,152配置那样, 但是上面写了一个详细过程是为了了解 配置ssh 信任,而方便排错
3.5.1、151 配置
3.5.1、152 配置
4、xenon 配置准备
4.1、配置 golang 环境
4.2、安装xtrabackup
所有节点安装
4.3、安装 xenon
所有节点安装,以MySQL-150 为安装为例
- 安装git (所有节点)
- 安装 xenon (所有节点)
4.4、配置xenon
所有机器配置xenon,下面以150为例,其它机器,只需改成本机IP即可
其他节点的配置文件修改
4.5、开启 xenon 并配置集群
1. 启动xenon,用mysql用户启动
2. 添加 xenon 节点成员
3. 查看 vip 信息
4. 查看xenon集群状态信息
5、检验 xenon 环境
5.1、检测 VIP 切换
1、查看VIP信息
2、进行模拟故障
关闭 150 数据库,看看 VIP 是不是切换到其他机器
从上图可知:VIP 切换成功了
xenon 会自动把宕机的数据库给启动起来,Leader:10.0.0.152
5.2、数据库重建
5.2.1、模拟删除主库数据目录
这是我的实验操作,生产环境谨慎这样操作
从上图得知:Leader: 10.0.0.151
5.2.2、进行数据库重建
重建成功截图如下
从上面的得知,rm -rf 数据库目录
,只需要xenoncli mysql rebuildme
,数据库目录就自动重建成功了,并也自动加入了xenon 管理的高可用集群。