使用Xenon实现MySQL高可用

100人浏览   2024-08-07 11:17:32

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的话就更好了!

相关推荐