前言:在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),负责监控节点状态、参与选主和执行故障切换,核心特点如下:

  1. 无中心化选主与秒级切换:基于Raft协议实现去中心化管理,Xenon代理实时监控节点状态,主节点故障时,自动触发选主流程,无需人工干预,秒级完成主从切换,最大程度减少业务中断时间。

  2. 数据强一致性保障:依赖无损半同步(Semi-Sync)复制机制,主节点的事务必须至少被半数从节点确认接收后,才会向客户端返回事务提交成功,从根源上避免数据丢失。同时,Xenon采用增强半同步架构,不会降级为异步复制,进一步提升数据安全性,适配金融级等对数据安全性要求较高的场景。

  3. 自动化故障切换与备份恢复:通过配置项leader-start-command和leader-stop-command调用脚本,可自动完成故障切换的全流程,无需人工介入。集成XtraBackup工具,可实现高效的streaming备份与恢复,备份速度优势显著,且支持定时备份配置,完全适配生产环境需求。

  4. 广泛的版本兼容性:支持MySQL 5.6、5.7、8.0多个内核版本,适配不同企业的MySQL部署环境;同时支持物理机、虚拟机、云平台、容器等多种部署方式,灵活性极高,可满足不同场景的部署需求。

补充说明:Xenon推荐采用三节点(一主两从)架构,这种架构可防止单一从节点故障导致系统无法正常工作,确保至少有一个从节点能与主节点保持数据同步,进一步提升集群高可用性,也是生产环境中最常用的部署架构。

1.3 Xenon工作原理

Xenon的高可用能力,本质是基于「Raft协议 + Semi-Sync半同步复制 + GTID事务标识」三者结合实现的,核心逻辑是“心跳监控 + 自动选主 + 主从切换”,确保集群在主节点故障时能快速恢复正常服务,核心工作流程如下:

  1. 心跳管理:Raft协议基于心跳机制维护集群节点状态,主节点(Leader)会定期向所有从节点(Follower)发送心跳信号,心跳间隔可通过配置调整;从节点持续监听主节点的心跳,若超时未收到心跳,则判定主节点不可用。

  2. 选举触发:当从节点超时未收到主节点的心跳信号时,会判定主节点不可用,此时该从节点会发起主节点选举请求,向其他非空闲(非IDLE)节点请求选票。

  3. 选主规则:选举过程中,Xenon会优先校验各候选节点的GTID(全局事务标识)值,GTID值越高,说明该节点的数据同步越完整,优先当选为新的主节点;同时,只有获得超过半数非空闲节点的选票,候选节点才能成功当选主节点,有效防止脑裂问题。

  4. 主从切换:新主节点当选后,会立即终止选举流程,拒绝其他节点的选举请求,随后自动完成主从关系更新、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)。

故障切换过程
  1. 主节点(Leader)发生故障,停止发送心跳信号;

  2. 从节点1和从节点2均超时未收到心跳,同时发起主节点选举请求;

  3. Xenon校验两个从节点的GTID值,发现从节点1的GTID值更高(数据更完整),优先将其作为新主节点候选人;

  4. 从节点1获得超过半数(2票,自身+从节点2)的选票,成功当选新主节点;

  5. 新主节点(原从节点1)终止选举流程,拒绝从节点2的选举请求;

  6. 自动完成主从切换:原从节点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个步骤,确保主从节点数据同步一致:

  1. 主节点(master)更新数据时,会在事务执行前生成GTID,与事务内容一同记录到binlog日志中;

  2. 从节点(slave)的I/O线程连接主节点,获取主节点的binlog日志,将其写入本地的relay log(中继日志)中;

  3. 从节点的SQL线程从relay log中读取GTID,对比本地binlog日志中是否有该GTID的记录;

  4. 若本地已有该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正常运行:

  1. 编写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集群高可用运行,助力运维人员降低集群运维成本。

如果本章内容对你有帮助,欢迎点赞收藏,如有疑问,可在评论区留言交流~

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐