使用Xenon实现MySQL高可用
1、Xenon介绍
1.1 介绍
Xenon是开源的MySQL高可用项目,go语言开发,并使用的raft协议.
Xenon具有如下特点:
1.自动故障恢复,零数据丢失
2.快速备份恢复,拉起新实例.
3.可以自动执行MySQL的操作与维护
4.没有中心控制.容易部署实现
5.类似于一个云产品
1.2 Xenon架构图

Xenon架构图
1.3 代码查看及官方文档查看
https://github.com/radondb/xenon
2 环境准备
IP | 软件 | 角色 | read_only | 复制模式 | ssh互信 |
10.10.119.65 | MySQL8.0+Xenon+PXB | M | 0 | GTID+ROW+semi | 1 |
10.10.119.63 | MySQL8.0+Xenon+PXB | S | 1 | GTID+Row+semi | 1 |
10.10.119.101 | MySQL8.0+Xenon+PXB | S | 1 | GTID+Row+semi | 1 |
2.1 搭建MySQL主从复制环境
数据库的安装省略,我使用的是8021数据库
65主库创建复制用户
mysql> create user repl@'%' identified with mysql_native_password by '123';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave,replication client on *.* to repl@'%';
Query OK, 0 rows affected (0.02 sec)
两个从库63和101执行
change master to \
master_host='10.10.119.65', \
master_user='repl', \
master_password='123', \
master_port=3306, \
master_auto_position=1;
2.2 配置半同步复制
2.2.1 安装插件(所有机器都执行)
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
2.2.2 开启半同步复制
set persist rpl_semi_sync_master_enabled=1;
set persist rpl_semi_sync_slave_enabled=1;
2.2.3 从库63和101开启只读
mysql> set global super_read_only=1;
Query OK, 0 rows affected (0.00 sec)
mysql> set global read_only=1;
Query OK, 0 rows affected (0.00 sec)
2.3 安装PXB
wget https://www.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.11/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.11-1.el7.x86_64.rpm
yum localinstall percona-xtrabackup-80-8.0.11-1.el7.x86_64.rpm
yum -y install libdbi-dbd-mysql
2.4 配置host解析和互信
2.4.1 配置hosts解析(所有主机都添加)
[root@xunjian ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.10.119.65 db01
10.10.119.63 db02
10.10.119.101 xunjian
2.4.2 配置互信(主库65执行)
rm -rf /root/.ssh
ssh-keygen
cd /root/.ssh
mv id_rsa.pub authorized_keys
scp -r /root/.ssh 10.10.119.63:/root
scp -r /root/.ssh 10.10.119.101:/root
在这里做完之后我们可以把数据库关掉了.因为Xenon会自动调用mysqld_safe去启动数据库!!!
2.5 安装GO环境(所有机器)
wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
tar -zxf go1.14.4.linux-amd64.tar.gz -C /usr/local/
添加环境变量:
vim /etc/profile
export GOPATH=/usr/local/go/bin
export PATH=$PATH:$GOPATH
3 Xenon的安装配置启动
3.1 安装Xenon 软件(所有机器)
yum -y install git
git clone https://github.com/radondb/xenon.git
unzip xenon-master.zip
cd xenon-master/
make build
实际上参看官方方法就可以了
https://github.com/radondb/xenon/blob/master/docs/how_to_build_and_run_xenon.md
3.2 配置Xenon(所有机器)
[root@db01 ~]# mkdir -p /data/xenon
[root@db01 ~]# cp -r /opt/xenon-master/bin/ /data/xenon/
[root@db01 ~]# mkdir -p /etc/xenon
[root@db01 ~]# cp /opt/xenon-master/conf/xenon- sample.conf.json /etc/xenon/xenon.json
[root@db01 ~]# echo "/etc/xenon/xenon.json" > /data/xenon/bin/config.path
[root@db01 ~]# chown -R mysql:mysql /data/xenon/
[root@db01 ~]# chown -R mysql:mysql /etc/xenon/
3.3 编辑配置文件(注意主机不同修改对应的IP)
{
"server":
{
"endpoint":"10.10.119.63:8801"
},
"raft":
{
"meta-datadir":"raft.meta",
"heartbeat-timeout":1000,
"election-timeout":3000,
"leader-start-command":"/usr/sbin/ip a a 10.10.119.250/24 dev ens192 && arping -c 3 -A 10.10.119.250 -I ens192",
"leader-stop-command":"/usr/sbin/ip a d 10.10.119.250/24 dev ens192"
},
"mysql":
{
"admin":"root",
"passwd":"123",
"host":"localhost",
"port":3306,
"basedir":"/data/app/mysql",
"defaults-file":"/etc/my.cnf",
"ping-timeout":1000,
"master-sysvars":"tokudb_fsync_log_period=default;sync_binlog=default;innodb_flush_log_at_trx_commit=default",
"slave-sysvars": "tokudb_fsync_log_period=1000;sync_binlog=1000;innodb_flush_log_at_trx_commit=2"
},
"replication":
{
"user":"repl",
"passwd":"123"
},
"backup":
{
"ssh-host":"10.10.119.63",
"ssh-user":"mysql",
"ssh-passwd":"mysql",
"ssh-port":22,
"backupdir":"/data/3306/data",
"xtrabackup-bindir":"/usr/bin",
"backup-iops-limits":100000,
"backup-use-memory": "2GB",
"backup-parallel": 2
},
"rpc":
{
"request-timeout":500
},
"log":
{
"level":"INFO"
}
}
配置文件注释:
/usr/sbin/ip a a 10.10.119.250/24 dev ens192 && arping -c 3 -A 10.10.119.250 -I ens192
这是添加VIP的命令
/usr/sbin/ip a d 10.10.119.250/24 dev ens192
删除VIP的命令
注意自己的网卡名称是什么进行对应修改
还有需要注意防火墙是否关闭
没有关闭的话就开启一下对应端口
iptables -I INPUT -p tcp --dport 8801 -j ACCEPT
可以看看官网对配置文件的注释
https://github.com/radondb/xenon/blob/master/docs/how_to_build_and_run_xenon.md
3.4 启动集群
[mysql@db01 ~]$ cd /data/xenon/bin/
[mysql@db01 bin]$ ./xenon -c /etc/xenon/xenon.json > /data/xenon/xenon.log 2>&1 &
[1] 2892
[mysql@db01 bin]$ netstat -lntp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN -
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN -
tcp 0 0 10.10.119.65:8801 0.0.0.0:* LISTEN 2892/./xenon
tcp6 0 0 :::3306 :::* LISTEN 3543/mysqld
tcp6 0 0 :::6000 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 :::5432 :::* LISTEN -
tcp6 0 0 :::33060 :::* LISTEN 3543/mysqld
3.5 配置集群节点
./xenoncli cluster add 10.10.119.65:8801,10.10.119.63:8801,10.10.119.101:8801
3.6 查看集群状态
[mysql@db01 bin]$ ./xenoncli cluster status
+--------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+-------------------+
| ID | Raft | Mysqld | Monitor | Backup | Mysql | IO/SQL_RUNNING | MyLeader |
+--------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+-------------------+
| 10.10.119.63:8801 | [ViewID:3 EpochID:0]@FOLLOWER | RUNNING | ON | state:[NONE] | [ALIVE] [READONLY] | [true/true] | 10.10.119.65:8801 |
| | | | | LastError: | | | |
+--------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+-------------------+
| 10.10.119.65:8801 | [ViewID:3 EpochID:0]@LEADER | RUNNING | ON | state:[NONE] | [ALIVE] [READWRITE] | [true/true] | 10.10.119.65:8801 |
| | | | | LastError: | | | |
+--------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+-------------------+
| 10.10.119.101:8801 | [ViewID:3 EpochID:0]@FOLLOWER | RUNNING | ON | state:[NONE] | [ALIVE] [READONLY] | [true/true] | 10.10.119.65:8801 |
| | | | | LastError: | | | |
+--------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+-------------------+
至此,一个Xenon集群就搭建完毕了.大家可以去开心的使用了.相比于MHA来说确实轻量了很多.更好了.就是如果能搭配上MySQL8017之后的clone plugin舍弃PXB的话就更好了!
相关推荐
-
PHP8种变量类型的详细讲解2025-02-22 00:32:24
-
php+apache 和 php+nginx的区别2025-02-22 00:21:27
-
PHP:与workerman结合实现定时任务2025-02-22 00:15:57
-
Nginx的Rewrite规则与实例2025-02-22 00:15:39
-
MySql中身份证字段的简单脱敏介绍2025-02-22 00:15:36