万字解析,Xenon部署MySQL高可用集群(实战版)
前言:在MySQL运维中,高可用是核心需求之一,传统MHA工具在新版本MySQL适配和无中心化部署上存在局限。Xenon作为RadonDB开源的新一代MySQL高可用工具,基于Raft协议实现无中心化选主、秒级故障切换,结合Semi-Sync和GTID保障数据强一致性,是替代MHA的优选方案。本文将从基础介绍、环境配置、软件安装、集群部署到日常维护、故障切换,完整呈现Xenon集群部署全流程,适配CentOS 7+MySQL 5.7环境,新手也能轻松上手。
一、Xenon基础介绍
1.1 什么是Xenon
Xenon是一款由RadonDB开发团队开源的轻量级MySQL集群高可用管理工具(注:非IBM生产的同名CPU,二者无任何关联),核心定位是解决MySQL集群的高可用管理问题,完美替代传统MHA工具,适配MySQL 5.6、5.7、8.0等多个内核版本,支持物理机、虚拟机、云平台、容器等多种部署方式。
作为生产级可用的高可用工具,Xenon已在RadonDB、MySQL Plus等实际生产环境中稳定应用,开源地址:https://github.com/radondb/xenon,目前已发布9个版本,最新稳定版本为Xenon v1.1.4,该版本优化了高可用逻辑、修复了重建小数据量节点失败的问题,新增启动时指定初始角色的功能,进一步提升了集群稳定性和运维便捷性。
Xenon核心优势:
-
无中心化部署:基于Raft协议实现去中心化管理,无需依赖第三方管理节点,部署简单且无单点故障;
-
数据强一致:基于无损半同步(Semi-Sync)复制机制,确保主节点事务至少被半数从节点确认后再提交,从根源避免数据丢失;
-
秒级故障切换:主节点故障时,无需人工干预,可实现秒级自动选主和主从切换,最大程度减少业务中断时间;
-
高效备份恢复:集成XtraBackup工具,支持streaming备份与恢复,备份速度快,且支持定时备份配置;
-
运维友好:支持CLI命令行管理,可实现集群状态监控、节点添加/删除、手动切换等操作,降低运维成本。
1.2 Xenon核心架构与特点
Xenon架构设计简洁高效,无需复杂依赖组件,核心围绕“高可用、易部署、强一致”三大目标,每个MySQL节点会部署一个Xenon代理(agent),负责监控节点状态、参与选主和执行故障切换,核心特点如下:
-
无中心化选主与秒级切换:基于Raft协议实现去中心化管理,Xenon代理实时监控节点状态,主节点故障时,自动触发选主流程,无需人工干预,秒级完成主从切换,最大程度减少业务中断时间。
-
数据强一致性保障:依赖无损半同步(Semi-Sync)复制机制,主节点的事务必须至少被半数从节点确认接收后,才会向客户端返回事务提交成功,从根源上避免数据丢失。同时,Xenon采用增强半同步架构,不会降级为异步复制,进一步提升数据安全性,适配金融级等对数据安全性要求较高的场景。
-
自动化故障切换与备份恢复:通过配置项leader-start-command和leader-stop-command调用脚本,可自动完成故障切换的全流程,无需人工介入。集成XtraBackup工具,可实现高效的streaming备份与恢复,备份速度优势显著,且支持定时备份配置,完全适配生产环境需求。
-
广泛的版本兼容性:支持MySQL 5.6、5.7、8.0多个内核版本,适配不同企业的MySQL部署环境;同时支持物理机、虚拟机、云平台、容器等多种部署方式,灵活性极高,可满足不同场景的部署需求。

补充说明:Xenon推荐采用三节点(一主两从)架构,这种架构可防止单一从节点故障导致系统无法正常工作,确保至少有一个从节点能与主节点保持数据同步,进一步提升集群高可用性,也是生产环境中最常用的部署架构。
1.3 Xenon工作原理
Xenon的高可用能力,本质是基于「Raft协议 + Semi-Sync半同步复制 + GTID事务标识」三者结合实现的,核心逻辑是“心跳监控 + 自动选主 + 主从切换”,确保集群在主节点故障时能快速恢复正常服务,核心工作流程如下:
-
心跳管理:Raft协议基于心跳机制维护集群节点状态,主节点(Leader)会定期向所有从节点(Follower)发送心跳信号,心跳间隔可通过配置调整;从节点持续监听主节点的心跳,若超时未收到心跳,则判定主节点不可用。
-
选举触发:当从节点超时未收到主节点的心跳信号时,会判定主节点不可用,此时该从节点会发起主节点选举请求,向其他非空闲(非IDLE)节点请求选票。
-
选主规则:选举过程中,Xenon会优先校验各候选节点的GTID(全局事务标识)值,GTID值越高,说明该节点的数据同步越完整,优先当选为新的主节点;同时,只有获得超过半数非空闲节点的选票,候选节点才能成功当选主节点,有效防止脑裂问题。
-
主从切换:新主节点当选后,会立即终止选举流程,拒绝其他节点的选举请求,随后自动完成主从关系更新、VIP漂移(若配置)等操作,整个过程无需人工干预,秒级完成,确保业务无感知。
三节点(一主两从)集群工作原理示例
为更直观理解Xenon的故障切换流程,以生产环境最常用的三节点(一主两从)集群为例,详细说明故障切换的完整过程:
初始集群状态
-
主节点(Leader):GTID集合为 {1,2,3,4,5}(表示已执行完这5个事务);
-
从节点1(Follower1):GTID集合为 {1,2,3,4,5}(与主节点数据完全同步);
-
从节点2(Follower2):GTID集合为 {1,2,3}(数据同步滞后,未执行事务4、5)。
故障切换过程
-
主节点(Leader)发生故障,停止发送心跳信号;
-
从节点1和从节点2均超时未收到心跳,同时发起主节点选举请求;
-
Xenon校验两个从节点的GTID值,发现从节点1的GTID值更高(数据更完整),优先将其作为新主节点候选人;
-
从节点1获得超过半数(2票,自身+从节点2)的选票,成功当选新主节点;
-
新主节点(原从节点1)终止选举流程,拒绝从节点2的选举请求;
-
自动完成主从切换:原从节点2切换为新主节点的从节点,同步新主节点的后续事务,集群恢复正常服务。
二、MySQL主从复制核心(GTID详解)
Xenon的选主和数据同步依赖GTID(全局事务标识),因此在部署Xenon前,需先理解GTID的核心概念和工作原理,这是确保集群数据一致性的关键。
2.1 什么是GTID
GTID(Global Transaction ID)是已提交事务的全局唯一编号,由UUID+TID两部分组成:
-
UUID:MySQL实例的唯一标识,保存在MySQL数据目录下的auto.cnf文件中,每个MySQL节点的UUID唯一;
-
TID:该MySQL实例上已提交的事务数量,随事务提交单调递增。
GTID复制方式从MySQL 5.6.5版本开始支持,通过GTID保证每个主库提交的事务在集群中有唯一ID,强化了数据库主备一致性、故障恢复能力和容错能力。相比传统复制,GTID复制更便于运维,可通过GTID直接定位事务的起源节点和事务数量,无需手动查找binlog文件和偏移量。
2.2 GTID工作原理
GTID复制的核心流程分为4个步骤,确保主从节点数据同步一致:
-
主节点(master)更新数据时,会在事务执行前生成GTID,与事务内容一同记录到binlog日志中;
-
从节点(slave)的I/O线程连接主节点,获取主节点的binlog日志,将其写入本地的relay log(中继日志)中;
-
从节点的SQL线程从relay log中读取GTID,对比本地binlog日志中是否有该GTID的记录;
-
若本地已有该GTID记录,说明该事务已执行,从节点会忽略该事务;若本地无该GTID记录,从节点则执行该GTID对应的事务,并将其记录到本地binlog中,完成数据同步。
三、Xenon部署前操作系统配置(三节点均需执行)
部署Xenon集群前,需先完成操作系统环境配置,确保三节点之间通信正常、权限合规,为后续软件安装和集群部署奠定基础。
3.1 系统环境说明与服务器规划
基础环境
-
操作系统:CentOS 7(最小化安装,建议关闭防火墙和SELinux);
-
MySQL版本:二进制安装MySQL 5.7.35(Xenon推荐版本,稳定性最优);
-
XtraBackup版本:2.4.24(与MySQL 5.7适配,用于数据备份和节点补齐);
-
Go版本:1.13+(用于编译安装Xenon,Xenon由Go语言开发)。
服务器IP规划(三节点)
|
IP地址 |
端口号 |
主机名 |
角色 |
说明 |
|---|---|---|---|---|
|
192.168.38.137 |
3306 |
xenon1 |
node节点 |
集群节点,参与选主和数据同步 |
|
192.168.38.141 |
3306 |
xenon2 |
node节点 |
集群节点,参与选主和数据同步 |
|
192.168.38.142 |
3306 |
xenon3 |
node节点 |
集群节点,参与选主和数据同步 |
|
192.168.38.143 |
3306 |
无 |
VIP(虚拟IP) |
跟随主节点漂移,业务连接MySQL的统一入口 |
注意:VIP地址会跟随Xenon集群启动,默认绑定在Xenon选举出的主节点上,业务程序连接MySQL时,无需连接具体节点IP,直接连接该VIP地址即可,实现主节点故障时业务无感知切换。
开始之前必须保证防火墙关闭:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
3.2 创建专用MySQL系统用户
为保证Xenon运行权限安全,需在三个节点分别创建统一的mysql系统用户(非MySQL数据库用户),专门用于运行Xenon服务、执行集群切换操作,步骤如下(三台节点均执行):
# 创建mysql系统用户
useradd mysql
# 设置mysql用户密码(输入两次密码,无回显,密码务必牢记,后续Xenon配置会用到)
passwd mysql
![]()
说明:此用户为Linux系统用户,并非MySQL数据库的root用户或普通用户,仅用于Xenon服务的运行和集群管理,避免使用root用户运行Xenon,降低权限泄露风险。
3.3 配置集群主机hosts文件
为让三个节点能够通过主机名互相访问,避免依赖DNS解析(防止DNS故障导致集群通信异常),需在所有节点配置hosts映射,步骤如下(三台节点均执行):
# 编辑hosts文件
vi /etc/hosts
在文件末尾添加以下配置(根据实际IP和主机名修改,此处对应上述IP规划):
127.0.0.1 localhost
192.168.38.137 xenon1
192.168.38.141 xenon2
192.168.38.142 xenon3
保存退出(vi编辑器按Esc,输入:wq!强制保存退出),配置完成后,可在任意节点执行ping xenon1、ping xenon2等命令,验证节点间能否通过主机名正常通信。
3.4 配置节点间SSH免密互信
Xenon集群切换、节点通信(如数据同步、节点管理)依赖mysql用户的免密SSH登录,所有免密配置均针对mysql用户(非root用户),步骤如下(三台节点依次执行):
1. xenon1节点操作
# 切换至mysql用户
su - mysql
# 生成SSH密钥
ssh-keygen
vi ~/.ssh/config
StrictHostKeyChecking no
# 将公钥分发至xenon2、xenon3节点,实现免密登录
ssh-copy-id xenon2
ssh-copy-id xenon3
2. xenon2节点操作
su - mysql
ssh-keygen
vi ~/.ssh/config
StrictHostKeyChecking no
ssh-copy-id xenon1
ssh-copy-id xenon3
3. xenon3节点操作
su - mysql
ssh-keygen
vi ~/.ssh/config
StrictHostKeyChecking no
ssh-copy-id xenon1
ssh-copy-id xenon2
免密验证
任意节点切换为mysql用户,执行以下命令,无需输入密码即可执行成功,说明免密配置生效:
su - mysql
ssh xenon2 date
ssh xenon3 date
![]()
若执行命令后正常输出日期信息,无密码输入提示,即为配置成功。
3.5 配置mysql用户sudo权限
Xenon进行主从切换时,需要自动漂移VIP(虚拟IP),而VIP操作(如绑定、解绑IP)需要root权限,因此必须给mysql用户授予ip命令的sudo免密权限,步骤如下(三台节点均执行):
# 编辑sudoers配置文件
vi /etc/sudoers
在文件末尾添加以下配置(确保无语法错误,否则会导致sudo命令失效):
mysql ALL=(ALL) NOPASSWD: /usr/sbin/ip
保存退出(vi编辑器按Esc,输入:wq!强制保存退出,sudoers文件为只读文件,需强制保存)。
权限验证
执行以下命令,测试sudo权限是否生效:
su - mysql -c "sudo ip a"
![]()
若正常输出本机网卡IP信息(包括已配置的节点IP),说明mysql用户的sudo权限配置成功。
四、Xenon及相关软件安装(三节点均需执行)
Xenon集群依赖MySQL、XtraBackup和Xenon本身三个核心软件,需按顺序完成安装,确保版本适配,以下步骤以xenon1节点为例,xenon2、xenon3节点操作完全一致。
4.1 二进制方式安装MySQL 5.7.35
Xenon推荐使用MySQL二进制版本部署,安装简洁、便于统一管理,避免源码编译带来的复杂配置,步骤如下:
1. 下载并解压MySQL二进制包
# 进入MySQL安装目录
cd /usr/local/
# 下载MySQL 5.7.35二进制包
# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz
# 解压MySQL安装包
tar zxvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz
# 重命名目录,简化后续操作
mv mysql-5.7.35-linux-glibc2.12-x86_64 mysql
# 创建MySQL所需目录(数据目录、配置目录、日志目录)
mkdir -p /usr/local/mysql/data
mkdir -p /usr/local/mysql/etc
mkdir -p /usr/local/mysql/logs
2. 后续MySQL配置步骤(三节点统一执行)
解压完成后,需完成配置文件编写、权限修改、初始化等操作,确保MySQL正常运行:
-
编写MySQL核心配置文件my.cnf
# 进入MySQL配置目录
cd /usr/local/mysql/etc
# 创建并编辑my.cnf文件
vi my.cnf
# 删掉系统默认配置
rm -rf /etc/my.cnf
配置如下:
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
pid-file=/usr/local/mysql/mysql.pid
user=mysql
port=3306
bind-address=0.0.0.0
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-name-resolve
lower_case_table_names=1
max_connections=1000
log_error=/usr/local/mysql/logs/error.log
# GTID 必须开启
gtid_mode=ON
enforce_gtid_consistency=ON
# 半同步复制
plugin-dir=/usr/local/mysql/lib/plugin
plugin-load-add=rpl_semi_sync_master.so
plugin-load-add=rpl_semi_sync_slave.so
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
rpl_semi_sync_master_timeout=10000
rpl_semi_sync_master_wait_for_slave_count=1
# binlog
log-bin=mysql-bin
binlog_format=row
log-slave-updates=1
expire_logs_days=7
binlog_checksum=none
# 从库默认只读
server-id=1 # xenon1=1 xenon2=2 xenon3=3 【唯一关键】
# read_only=1
# super_read_only=1
relay_log_purge=1
- 初始搭建阶段临时注释掉
read_only、super_read_only - 集群组建完成后 Xenon 会自动管控主从读写,无需手动配置
注意:三个节点的server-id必须唯一,不可重复,否则会导致主从复制失败。
递归修改MySQL目录权限将MySQL所有目录的权限归属mysql用户,避免权限不足导致MySQL启动失败:
chown -R mysql:mysql /usr/local/mysql/
初始化MySQL,修改默认初始密码
# 初始化MySQL
/usr/local/mysql/bin/mysqld \
--defaults-file=/usr/local/mysql/etc/my.cnf \
--initialize \
--user=mysql \
--datadir=/usr/local/mysql/data
# 启动MySQL服务
/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/etc/my.cnf &
# 查看临时密码
grep 'temporary password' /usr/local/mysql/logs/error.log
# 登录MySQL
/usr/local/mysql/bin/mysql -u root -p
# 修改root用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@123456';
FLUSH PRIVILEGES;
# 授权root用户远程登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Root@123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# 退出MySQL
exit
设置MySQL开机自启,验证运行状态
# 复制MySQL启动脚本到/etc/init.d/目录
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# 修改默认的启动脚本
vi /etc/init.d/mysqld
# 内容如下
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
conf=/usr/local/mysql/etc/my.cnf
$bindir/mysqld_safe --datadir="$datadir" --socket="$socket" --pid-file="$pid_file" --defaults-file=/usr/local/mysql/etc/my.cnf >/dev/null 2>&1 &
# 赋予执行权限
chmod +x /etc/init.d/mysqld
# 设置开机自启
chkconfig --add mysqld
chkconfig mysqld on
# 验证MySQL运行状态
service mysqld status
若输出“active (running)”,说明MySQL启动成功。
![]()
4.2 安装XtraBackup 2.4.24备份工具
XtraBackup是Percona公司开发的MySQL热备份工具,Xenon集成该工具实现数据备份、恢复和集群节点数据补齐,必须在三个节点全部安装,推荐使用YUM源安装(简洁高效),步骤如下:
# 安装Percona YUM源
yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
# 启用Percona XtraBackup仓库
percona-release enable original release
# 安装XtraBackup 2.4.24
yum install -y percona-xtrabackup-24
# 验证安装是否成功
xtrabackup --version
若输出“xtrabackup version 2.4.24”相关信息,说明安装成功。安装完成后,Xenon可自动调用xtrabackup命令完成集群备份、数据迁移和节点补齐操作,无需手动配置。

说明:若Percona YUM源下载失败,可尝试更换国内源(如阿里云源),或手动下载RPM包安装。
4.3 源码编译安装Xenon(三节点均需执行)
Xenon由Go语言开发,需先配置Go环境,再进行源码编译安装,三个节点操作完全一致,步骤如下:
1. 安装Go语言运行环境(Go 1.13+)
# 下载Go 1.13.15版本(
wget https://mirrors.aliyun.com/golang/go1.13.15.linux-amd64.tar.gz
# 解压Go安装包至/usr/local/目录
tar zxvf go1.13.15.linux-amd64.tar.gz -C /usr/local/
# 配置Go环境变量
vi /etc/profile
# 在文件末尾添加以下配置
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH
export GOPATH=/home/mysql/go
# 需要先给GOPATH授权
mkdir -p /home/mysql/go
chown -R mysql:mysql /home/mysql
# 使环境变量生效
source /etc/profile
# 验证Go环境是否配置成功
go version
若输出“go version go1.13.15 linux/amd64”,说明Go环境配置成功。
![]()
2. 下载Xenon源码
Xenon最新稳定版本为v1.1.4,源码下载地址:https://github.com/radondb/xenon/releases/,步骤如下:
# 创建Xenon源码目录
mkdir -p /home/mysql/xenon-source
# 进入目录,下载Xenon v1.1.4源码包
cd /home/mysql/xenon-source
wget https://github.com/radondb/xenon/archive/refs/tags/v1.1.4.tar.gz
# 解压源码包
tar zxvf v1.1.4.tar.gz
cd xenon-1.1.4
# 安装依赖
yum install -y gcc gcc-c++ git
3. 编译与安装Xenon
将Xenon安装至/usr/local/xenon目录,便于统一管理,步骤如下:
# 编译Xenon(执行make命令,自动编译生成二进制文件)
make
# 创建Xenon安装目录
sudo mkdir -p /usr/local/xenon
# 拷贝二进制文件和配置文件到安装目录
sudo cp bin/xenon /usr/local/xenon/
sudo cp conf/xenon.json /usr/local/xenon/
4. 核心说明
-
xenon.json:Xenon集群核心配置文件,三个节点需根据自身角色修改配置,是后续集群部署的关键;
-
安装路径:统一安装在/usr/local/xenon目录,便于后续运维和管理;
-
权限注意:编译和安装过程中,若出现权限不足,可使用sudo命令(mysql用户已配置sudo权限);
-
版本适配:必须使用Xenon v1.1.4版本,与MySQL 5.7.35和XtraBackup 2.4.24适配,避免版本不兼容导致集群异常。
五、Xenon配置过程详解(重点,三节点均需配置)
Xenon安装完成后,需修改核心配置文件xenon.json,配置集群节点信息、MySQL连接信息、Raft协议参数等,确保三个节点能正常组建集群,步骤如下:
5.1 配置xenon.json核心文件
# 进入Xenon安装目录,编辑xenon.json配置文件
cd /usr/local/xenon
vi xenon.json
以下是适配本次三节点集群的完整配置:
{
"log": {
"level": "info",
"path": "/usr/local/xenon/log",
"max-size": 1024,
"max-days": 7
},
"mysql": {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "Root@123456",
"timeout": 3,
"read-timeout": 3,
"write-timeout": 3,
"heartbeat-interval": 1000,
"gtid": true,
"semi-sync": true
},
"raft": {
"self": {
"ip": "192.168.38.137",
"id": 1,
"port": 8801
},
"peers": [
{"ip":"192.168.38.137","id":1,"port":8801},
{"ip":"192.168.38.141","id":2,"port":8801},
{"ip":"192.168.38.142","id":3,"port":8801}
],
"election-timeout": 3000,
"heartbeat-interval": 500,
"admit-defeat-ht-cnt": 3,
"admit-defeat-ping-cnt": 3
},
"vip": {
"ip": "192.168.38.143",
"netmask": "255.255.255.0",
"interface": "ens33", # 用 ip a 查看自己真实网卡
"leader-start-command": "sudo ip addr add {{.VIP}}/{{.Netmask}} dev {{.Interface}}",
"leader-stop-command": "sudo ip addr del {{.VIP}}/{{.Netmask}} dev {{.Interface}}"
},
"backup": {
"type": "xtrabackup",
"xtrabackup": {
"path": "/usr/bin/xtrabackup",
"backup-dir": "/usr/local/xenon/backup",
"stream": true,
"compress": true,
"user": "root",
"password": "Root@123456",
"port": 3306
},
"schedule": {
"enable": true,
"cron": "0 0 * * *",
"retention": 7
}
},
"replication": {
"user": "repl",
"password": "Repl@123456",
"port": 3306,
"timeout": 3
}
}
配置说明(重点关注)
-
mysql部分:配置MySQL的连接信息,user和password需与MySplugin-dirQL root用户信息一致,确保Xenon能正常连接MySQL;
-
/usr/local/xenon/backup不存在 → rebuild 失败需要
mkdir -p /usr/local/xenon/backup
-
raft部分:self节点需填写当前节点的IP和ID,peers部分填写所有集群节点的信息,election-timeout和heartbeat-interval按默认配置即可;
-
vip部分:配置VIP地址、子网掩码和网卡名称,leader-start-command和leader-stop-command用于自动绑定和解绑VIP,无需修改;
-
backup部分:配置XtraBackup路径和备份参数,schedule开启定时备份,可根据实际需求调整备份时间和保留天数;
-
replication部分:配置主从复制用户信息,需手动在MySQL中创建
CREATE USER 'repl'@'%' IDENTIFIED BY 'Repl@123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
5.2 对Xenon目录进行授权
为确保mysql用户能正常读写Xenon配置文件、日志和备份文件,需对Xenon安装目录和配置目录进行授权,步骤如下(三台节点均执行):
# 授权/usr/local/xenon目录,归属mysql用户
chown -R mysql:mysql /usr/local/xenon/
# 授权/etc/xenon目录(若不存在则创建)
mkdir -p /etc/xenon
chown -R mysql:mysql /etc/xenon/
授权完成后,切换回mysql用户,确保能正常读写xenon.json配置文件。
六、启动Xenon集群与状态监控
Xenon集群启动需遵循固定顺序,确保集群能正常组建,避免出现选举异常,所有操作均在mysql用户下完成(禁止使用root用户),步骤如下:
6.1 启动Xenon集群(按顺序执行)
1.xenon1节点操作
mkdir -p /usr/local/xenon/log
chown -R mysql:mysql /usr/local/xenon
su - mysql
nohup /usr/local/xenon/xenon -c /usr/local/xenon/xenon.json > /usr/local/xenon/log/xenon.log 2>&1 &
2.xenon2节点操作
su - mysql
nohup /usr/local/xenon/xenon -c /usr/local/xenon/xenon.json > /usr/local/xenon/log/xenon.log 2>&1 &
3.xenon3节点操作
su - mysql
nohup /usr/local/xenon/xenon -c /usr/local/xenon/xenon.json > /usr/local/xenon/log/xenon.log 2>&1 &
4.xenon1节点操作
curl -X POST http://192.168.38.137:8080/v1/cluster/add \
-d "nodes=192.168.38.141:8080"
5.xenon1节点操作
curl -X POST http://192.168.38.137:8080/v1/cluster/add \
-d "nodes=192.168.38.142:8080"
6.2 集群状态监控
集群启动完成后,可通过Xenon CLI命令查看集群状态,验证集群是否正常组建,在任意节点(mysql用户)执行以下命令:
查看集群整体状态
curl http://192.168.38.137:8080/v1/cluster/status
查看当前主节点 Leader
curl http://192.168.38.137:8080/v1/cluster/leader
查看所有节点角色健康状态
curl http://192.168.38.137:8080/v1/cluster/nodes
查看 GTID 全局同步状态
curl http://192.168.38.137:8080/v1/cluster/gtid
正常状态说明
-
集群状态显示“healthy”,说明集群正常;
-
有一个节点为“leader”(主节点),另外两个为“follower”(从节点);
-
三个节点的GTID值一致(或从节点GTID值不小于主节点,无明显滞后);
-
VIP地址绑定在主节点上,可通过“ip a”命令查看主节点的网卡信息,确认VIP已绑定。
ip a | grep 192.168.38.143
七、Xenon集群日常维护
集群部署完成后,日常运维主要包括集群状态监控、节点管理、备份管理、集群关闭等操作,以下是常用维护命令(均在mysql用户下执行):
7.1 监控集群状态
7.1.1 查看集群整体健康状态
curl http://192.168.38.137:8080/v1/cluster/status
7.1.2 查看当前主节点(Leader)信息
curl http://192.168.38.137:8080/v1/cluster/leader
7.1.3 查看集群所有节点详细状态(含角色 / 健康度)
curl http://192.168.38.137:8080/v1/cluster/nodes
7.1.4 查看全局 GTID 同步一致性
curl http://192.168.38.137:8080/v1/cluster/gtid
7.1.5 实时查看 Xenon 运行日志
tail -f /usr/local/xenon/log/xenon.log
7.2 集群节点管理(添加 / 删除)
7.2.1 向集群中添加节点(分步添加,禁止一次性加 3 个)
第一步:xenon1 添加 xenon2
curl -X POST http://192.168.38.137:8080/v1/cluster/add \
-d "nodes=192.168.38.141:8080"
第二步:xenon1 添加 xenon3
curl -X POST http://192.168.38.137:8080/v1/cluster/add \
-d "nodes=192.168.38.142:8080"
7.2.2 从集群中移除节点
示例:移除 xenon3
curl -X POST http://192.168.38.137:8080/v1/cluster/remove \
-d "nodes=192.168.38.142:8080"
7.3 节点数据重建(Rebuild)
当节点数据异常、同步中断时,从主节点全量恢复数据(需指定真实主节点 IP)
示例:将 xenon3 从 xenon1(主节点)重建数据
curl -X POST http://192.168.38.137:8080/v1/cluster/rebuild \
-d "source=192.168.38.137:8080&target=192.168.38.142:8080"
7.4 高可用切换(Switchover / Failover)
7.4.1 计划内手动切换主库(Switchover,主库正常时使用)
示例:将主库从 xenon1 切换至 xenon2
curl -X POST http://192.168.38.137:8080/v1/cluster/switchover \
-d "target=192.168.38.141:8080"
7.4.2 主库故障强制切换(Failover,主库宕机时使用)
示例:主库 xenon1 宕机,强制切换至 xenon3
curl -X POST http://192.168.38.141:8080/v1/cluster/failover \
-d target=192.168.38.142:8080"
7.5 服务启停(标准操作)
7.5.1 启动 Xenon 服务(mysql 用户,三台节点分别执行)
su - mysql
nohup /usr/local/xenon/xenon -c /usr/local/xenon/xenon.json > /usr/local/xenon/log/xenon.log 2>&1 &
7.5.2 停止 Xenon 服务
curl -XPOST http://127.0.0.1:8080/v1/cluster/stop
7.5.3 启动 / 停止 MySQL 服务
启动 MySQL
service mysqld start
停止 MySQL
service mysqld stop
查看 MySQL 运行状态
service mysqld status
八、Xenon集群故障切换实践
Xenon集群的核心价值在于实现MySQL高可用,故障切换是保障集群稳定运行的关键操作。本章将围绕三类核心故障场景,详细讲解手动切换(Failover/switchover)、slave节点故障切换、master节点故障切换的完整实操流程,结合具体命令和校验步骤,确保运维人员能快速上手、高效处理故障,所有操作均在mysql用户下执行(禁止使用root用户直接操作)。
8.1 手动切换(Failover/switchover)
手动切换分为两种场景:Failover(主节点故障时的强制切换)和Switchover(主节点正常时的计划内切换),二者操作逻辑不同,需根据实际场景选择,核心依赖Xenon CLI命令完成,无需手动修改主从关系。
8.1.1 Switchover(计划内手动切换,主节点正常)
适用场景:主节点正常运行,但需进行计划内维护(如硬件升级、系统重启),需手动将主节点角色切换至指定从节点,确保业务不中断,切换过程无数据丢失。
实操步骤(以当前主节点为xenon1,切换至从节点xenon2为例):
# 1. 查看当前集群状态,确认主节点、从节点状态正常
curl http://192.168.38.137:8080/v1/cluster/nodes
# 2. 执行手动switchover,将主切换到xenon2
curl -X POST http://192.168.38.137:8080/v1/cluster/switchover \
-d "target=192.168.38.141:8080"
# 3. 查看新主节点
curl http://192.168.38.141:8080/v1/cluster/leader
# 4. 查看所有节点状态
curl http://192.168.38.141:8080/v1/cluster/nodes
# 5. 查看GTID一致性
curl http://192.168.38.141:8080/v1/cluster/gtid
# 6. 验证VIP已漂移到新主节点
ip a | grep 192.168.38.143
注意事项:
-
Switchover切换前,必须确认主节点、目标从节点状态正常,且从节点与主节点GTID同步一致,避免切换后数据不一致;
-
切换过程中,Xenon会自动完成主从关系更新、VIP漂移,无需手动干预,业务连接VIP可实现无感知切换;
-
切换完成后,原主节点(xenon1)会自动降级为从节点,同步新主节点(xenon2)的数据,无需手动重建。
8.1.2 Failover(故障手动切换,主节点故障)
适用场景:主节点(如xenon1)发生故障(MySQL服务崩溃、网络中断、硬件故障),自动切换未触发(或需要手动干预),需强制将从节点提升为新主节点,快速恢复集群服务。
实操步骤(以主节点xenon1故障,切换至从节点xenon3为例):
# 1. 确认主库故障
service mysqld status
# 2. 在健康节点执行强制切换
curl -X POST http://192.168.38.141:8080/v1/cluster/failover \
-d "target=192.168.38.142:8080"
# 3. 查看新主节点
curl http://192.168.38.142:8080/v1/cluster/leader
# 4. 查看集群节点状态
curl http://192.168.38.142:8080/v1/cluster/nodes
# 5. 验证VIP
ip a | grep 192.168.38.143
注意事项:
-
Failover切换前,必须确认主节点确实故障,避免误操作导致集群脑裂(两个主节点并存);
-
指定--target时,需选择状态正常、GTID与故障主节点最接近的从节点,确保数据完整性;
-
切换完成后,故障主节点恢复前,需持续监控新主节点和剩余从节点的同步状态。
8.2 Slave节点故障切换过程
Slave节点(从节点)故障是集群中最常见的故障场景之一,单个从节点故障不会影响主节点服务和业务访问(三节点架构下,剩余1个从节点可正常同步),核心处理逻辑是“故障排查→节点修复→数据同步→重新加入集群”,无需触发主从切换。
实操步骤(以从节点xenon3故障为例,集群初始状态:xenon1为主节点,xenon2、xenon3为从节点):
8.2.1 故障排查与确认
# 查看节点状态
curl http://192.168.38.137:8080/v1/cluster/nodes
# 检查MySQL
service mysqld status
service mysqld restart
tail -f /usr/local/mysql/logs/error.log
# 检查网络
ping 192.168.38.137
ping 192.168.38.141
telnet 192.168.38.137 3306
常见故障原因:MySQL服务崩溃、Xenon服务未启动、网络中断、磁盘空间不足、配置文件错误。
8.2.2 故障修复与节点重建
故障原因排查并修复后(如重启服务、修复网络、清理磁盘),需将故障从节点(xenon3)重建,同步主节点(xenon1)的数据,确保与集群数据一致,再重新加入集群。
# 启动MySQL
service mysqld start
# 启动Xenon
su - mysql
curl -XPOST http://127.0.0.1:8080/v1/cluster/stop
nohup /usr/local/xenon/xenon -c /usr/local/xenon/xenon.json > /usr/local/xenon/log/xenon.log 2>&1 &
# 从主节点重建数据
curl -X POST http://192.168.38.137:8080/v1/cluster/rebuild \
-d "source=192.168.38.137:8080&target=192.168.38.142:8080"
# 验证状态
curl http://192.168.38.137:8080/v1/cluster/nodes
curl http://192.168.38.137:8080/v1/cluster/gtid
8.2.3 补充说明
-
若故障从节点无法修复(如硬件损坏),需部署新节点替换,新节点需完成操作系统配置、软件安装(MySQL、XtraBackup、Xenon)和配置,再执行上述重建步骤,加入集群;
-
三节点集群中,单个从节点故障期间,主节点服务正常,业务不受影响,仅需尽快修复故障节点,恢复“一主两从”的高可用架构;
-
重建节点时,确保主节点状态正常,避免主节点故障导致重建失败。
8.3 Master节点故障切换过程
Master节点(主节点)是集群的核心,主节点故障会导致业务无法写入(读业务可通过从节点正常提供),需快速触发故障切换,将健康的从节点提升为新主节点,恢复集群写入能力。Xenon支持自动切换和手动切换,优先使用自动切换,自动切换未触发时,执行手动Failover。
实操步骤(以主节点xenon1故障为例,集群初始状态:xenon1为主节点,xenon2、xenon3为从节点):
8.3.1 故障确认与自动切换验证
# 查看集群状态
curl http://192.168.38.141:8080/v1/cluster/nodes
# 查看是否产生新主
curl http://192.168.38.141:8080/v1/cluster/leader
# 查看VIP
ip a | grep 192.168.38.143
自动切换触发条件(默认配置):
-
主节点心跳超时(超过raft.election-timeout配置的3000ms);
-
至少有一个从节点状态正常(healthy),且GTID与故障主节点差异在允许范围内;
-
集群中超过半数节点正常(三节点集群需至少2个节点正常)。
8.3.2 故障主节点修复与重新加入集群
主节点故障修复后,不可直接重启并加入集群(会导致脑裂),需将其降级为从节点,同步新主节点的数据,再重新加入集群。
# 修复启动MySQL
service mysqld start
# 启动Xenon
su - mysql
pkill -f xenon
nohup /usr/local/xenon/xenon -c /usr/local/xenon/xenon.json > /usr/local/xenon/log/xenon.log 2>&1 &
# 从新主库同步数据(假设新主是xenon2)
curl -X POST http://192.168.38.141:8080/v1/cluster/rebuild \
-d "source=192.168.38.141:8080&target=192.168.38.137:8080"
# 验证状态
curl http://192.168.38.141:8080/v1/cluster/nodes
curl http://192.168.38.141:8080/v1/cluster/gtid
8.3.3 关键注意事项
-
主节点故障切换后,需立即通知业务方,确保业务连接指向VIP(而非原主节点IP),避免业务中断;
-
故障主节点修复后,必须先执行rebuild同步新主节点数据,再加入集群,严禁直接重启后加入,防止脑裂;
-
若自动切换未触发,需排查原因(如从节点状态异常、网络中断、Xenon配置错误),修复后再执行手动Failover;
-
切换完成后,需查看Xenon日志(/usr/local/xenon/log/xenon.log),确认切换过程无异常报错。
本文详细讲解了Xenon集群故障切换的核心场景、实操流程、验证方法及关键注意事项,全程基于CentOS7+MySQL5.7+Xenon v1.1.4实战,所有命令和操作步骤均可直接复制使用。Xenon作为替代MHA的优选MySQL高可用方案,其故障切换具备操作便捷、数据一致、业务无感知的优势,涵盖手动切换(Switchover/Failover)、Slave节点故障处理、Master节点故障切换三大核心场景,掌握本章内容后,可快速排查集群故障、高效完成切换操作,保障MySQL集群高可用运行,助力运维人员降低集群运维成本。
如果本章内容对你有帮助,欢迎点赞收藏,如有疑问,可在评论区留言交流~
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)