MySQL高可用解决方案(2)Xenon集群部署教程

TangLu MySQL 2021-10-09 2092 0

一、Xenon介绍

Xenon是青云开源的一款MySQL高可用中间件,项目地址是https://github.com/radondb/xenon。Xenon包含了快速故障转移并且确保数据一致性、基于Xtrabackup快速重构从节点、便捷的节点管理等特性,并且使用的是tcp协议,可以在云环境中使用(Keepalived使用的是vrrp协议,已经被很多云厂商禁止),最后部署简单、便于运维。在部署Xenon前需确保满足以下条件:

· 所有节点安装GO

yum install golang  #go版本需要>=1.8


· 所有节点安装好Xtrabackup

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y
yum install percona-xtrabackup-24.x86_64 -y


· 所有节点为mysql用户配置SSH免密,并且增加sudo权限

visudo
mysql   ALL=(ALL)       NOPASSWD: ALL


· MySQL复制架构必须为GTID模式


· MySQL需要用mysqld_safe启动,避免Xenon拉起mysql时发生冲突,或者先关闭mysql再用Xenon拉起mysql


· MySQL半同步插件需安装(仅安装即可,Xenon会自动配置半同步)

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';


二、Xenon部署与配置

1、所有节点安装Xenon

wget https://github.com/radondb/xenon/archive/refs/tags/v1.1.4.tar.gz  
tar zxf xenon-1.1.4.tar.gz
mv xenon-1.1.4 /usr/local/xenon
cd /usr/local/xenon
make build
ls bin/   #在xenon/bin下如果创建出xenon、xenoncli命令代表安装成功

#方法2
yum install git
git clone https://github.com/radondb/xenon.git
cd xenon
make build   #安装完成后会生成bin/xenon和bin/xenoncli


2、所有节点修改xenon配置文件

cp /usr/local/xenon/conf/xenon-simple.conf.json /usr/local/xenon/conf/xenon.json
echo "/usr/local/xenon/conf/xenon.json" > /usr/local/xenon/bin/config.path #该配置用于告诉xenoncli应该在哪里找配置文件

cat xenon.json
{
	"server":
	{
		"endpoint":"172.22.1.171:8801"         #填写节点自身IP
	},

	"raft":
	{
		"meta-datadir":"raft.meta",
		"heartbeat-timeout":1000,
		"election-timeout":3000,
		"leader-start-command":"",           #成为leader后需要执行的命令
		"leader-stop-command":""             #非leader后需要执行的命令
	},


	"mysql":    
	{
		"admin":"root",                      #mysql账号,因为会涉及change master等操作,需要给一个高权限用户
		"passwd":"123456",
		"host":"172.22.1.171",                  #主库IP
		"port":3306,
		"basedir":"/usr/local/mysql",        #数据库目录
		"defaults-file":"/etc/my3306.cnf",   #数据库配置文件
		"ping-timeout":1000,
		"master-sysvars":"tokudb_fsync_log_period=default;sync_binlog=default;innodb_flush_log_at_trx_commit=default",    #成为master后需要自动修改的数据库变量
		"slave-sysvars": "tokudb_fsync_log_period=1000;sync_binlog=1000;innodb_flush_log_at_trx_commit=2"                 #成为slave后需要自动修改的数据库变量
	},

	"replication":    #主从复制账号
	{
		"user":"repl",
		"passwd":"repl"
	},

	"backup":    #xtrabackup备份和自动还原配置
	{
		"ssh-host":"172.22.1.171",            #每个节点的IP信息
		"ssh-user":"mysql",                 #SSH用户
		"ssh-passwd":"123456",               #SSH密码,不过已经配置了免密这里不会生效
		"ssh-port":22,
		"backupdir":"/data/mysql3306/data",  #mysql datadir
		"xtrabackup-bindir":"/bin",  #xtrabackup的路径
		"backup-iops-limits":100000,
		"backup-use-memory": "1GB",
		"backup-parallel": 2
	},

	"rpc":
	{
		"request-timeout":500
	},

	"log":
	{
		"level":"INFO"
	}
}


4、所有节点启动Xenon,,因为Xenon的raft节点间通信需要xenon进程启动,所以需要在三个节点上都执行。如果数据库没启动它会自动拉起来,注意启动Xenon的用户需要和启动MySQL的是同一个,比如都是mysql用户

nohup /usr/local/xenon/bin/xenon -c /usr/local/xenon/conf/xenon.json > /usr/local/xenon/xenon.log 2>&1 &


5、所有节点添加集群成员,因为Xenon的raft节点间通信需要xenon进程启动,所以需要在三个节点上都执行

xenoncli cluster add 172.20.1.172:8801,172.20.1.171:8801,172.20.1.184:8801    #这里的地址就是配置文件中endpoint的地址,多个成员用逗号分隔


6、查看集群状态,正常情况下会看到有一个LEADER节点且可写,其它为FOLLOWER节点且只读

/usr/local/xenon/bin/xenoncli cluster status

企业微信截图_20211009172308.png


7、查看数据库状态也能看到三个节点的不同

xenoncli cluster mysql  #查看节点角色、从库线程状态
xenoncli cluster gtid  #查看各个节点GTID信息

2.png


8、关闭主库进行测试,可以看到Xenon做了主从切换动作

3.png

评论