当前位置: 首页 > news >正文

使用Xenon工具搭建高可用MySQL集群实战(下)

使用Xenon工具搭建高可用MySQL集群实战(上)https://coffeemilk.blog.csdn.net/article/details/152651294

一、安装MySQL数据库且实现无损半同步复制

 1.1、安装MySQL8.0.43

全网最全的关系型数据库MySQL解析及其安装部署的保姆级教程https://coffeemilk.blog.csdn.net/article/details/151891095

#安装部署Mysql8.0.43官方的二进制包实操流程#1-下载Mysql的二进制压缩包到本地的/data目录中,且支持断点续传
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.43-linux-glibc2.28-x86_64.tar.xz -c 0 -P /data#2-进入/data目录解压下载好的Mysql二进制压缩包到指定目录【/usr/local/mysql】(之所以要解压到/usr/local目录下是由于二进制版本的很多编译环境都在该目录下)
cd /data
xz -d mysql-8.0.43-linux-glibc2.28-x86_64.tar.xz
tar -xvf mysql-8.0.43-linux-glibc2.28-x86_64.tar -C /usr/local/mysql/#3-进入/usr/local/mysql目录中修改文件名称为【mysql-8.0.43】且进入该目录下创建data、etc、logs文件夹
cd /usr/local/mysql/
mv mysql-8.0.43-linux-glibc2.28-x86_64 mysql-8.0.43
cd mysql-8.0.43/
mkdir data
mkdir etc
mkdir logs#4-创建Mysql的服务用户mysql
useradd mysql
id mysql#5-进入mysql的etc目录下创建配置文件【my.cnf】
cd /usr/local/mysql/mysql-8.0.43/etc
vi my.cnf[mysqld]
#指定mysql的数据存放路径
datadir=/usr/local/mysql/mysql-8.0.43/data
socket=/tmp/mysql.sock
#指定mysql的报错日志文件
log-error=/usr/local/mysql/mysql-8.0.43/logs/mysqld-error.log
pid-file=/usr/local/mysql/mysql-8.0.43/logs/mysqld.pid
port=13337
user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
#默认时区(东八区)
default-time-zone='+8:00'
#数据库日志时间匹配系统时区
log_timestamps=system
#表名和字段名不区分大小写
lower_case_table_names=1#6-将mysql文件夹及其内容都授权给mysql用户并初始化(注意:初始化后没有任何信息提示表示初始化成功,否则就是有问题的)
chown -R mysql:mysql /usr/local/mysql/mysql-8.0.43
/usr/local/mysql/mysql-8.0.43/bin/mysqld  --defaults-file=/usr/local/mysql/mysql-8.0.43/etc/my.cnf --initialize --user=mysql#7-查看日志文件获取临时密码(复制一份临时密码用于登录和修改密码)
cd /usr/local/mysql/mysql-8.0.43/logs/
tail -f mysqld-error.log#8-手动启用mysql服务测试(如可以指定默认的配置文件【 --defaults-file=/usr/local/mysql/mysql-8.0.43/etc/my.cnf】)
/usr/local/mysql/mysql-8.0.43/bin/mysqld_safe --defaults-file=/usr/local/mysql/mysql-8.0.43/etc/my.cnf#9-查看mysql的进程、网络端口内容(查看到对应的mysql进程与网络端口与我们配置的一致表示正常;确认正常后即可杀死该进程)
ps -ef | grep mysql
netstat -antlp | grep mysql#10-使用root账号临时密码登录mysql数据库后修改密码后退出(查看是否可以登录进去,可登录则表示成功)
/usr/local/mysql/mysql-8.0.43/bin/mysql -uroot -p临时密码
alter user 'root'@'localhost' identified by 'abc123456';
flush privileges;
quit;#11-配置mysql的服务并启动和设置开机自启
vi /etc/systemd/system/mysqld.service[Unit]
Description=MySQL Server 8.0.43
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/mysql-8.0.43/bin/mysqld_safe --defaults-file=/usr/local/mysql/mysql-8.0.43/etc/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -TERM $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target#11.1-重载所有服务
systemctl daemon-reload#11.2-启动mysql服务
systemctl start mysqld.service#11.3-查看mysql服务状态
systemctl status mysqld.service#11.4-设置mysql服务开机自启
systemctl enable mysqld.service #11.5-停止mysql服务
systemctl stop mysqld.service#12-可以重启Linux后查看mysql服务状态看它是否开机重启
reboot now
systemctl status mysqld.service

 1.2、修改MySQL配置文件实现无损半同步复制

       注意:在将如下实现MySQL配置文件实现无损半同步复制的容时,必须确保每台服务器上的【server-id】是唯一的,不能相同!

#修改MySQL配置文件实现无损半同步复制
vi /usr/local/mysql/mysql-8.0.43/etc/my.cnf#无损半同步复制参数(必须确保每台服务器上的【server-id】是唯一的,不能相同!)
#skip-name-resolve
server-id=1
log_bin=/usr/local/mysql/mysql-8.0.43/data/mysql-bin.log
#在 MySQL 8.0及其更高版本expire_logs_days 参数已被废弃,取而代之的是 binlog_expire_logs_seconds,用于更精确地控制二进制日志(binlog)的过期时间(以秒为单位)
#expire_logs_days = 10
#mysql8.0以下版本通过设置全局参数binlog_expire_logs_seconds修改binlog保存时间 以秒为单位;默认2592000 30天 
#14400   4小时;86400  1天;259200  3天;
binlog_expire_logs_seconds=2592000
binlog_format = row
plugin-load="semisync_master.so;semisync_slave.so"
#master_info_repository从 MySQL 8.0.23 开始,该选项已被标记为废弃,最终在 8.3.0 中被完全移除;在MySQL8.0后是MySQL 默认将复制连接的元信息存储在 mysql.slave_master_info 表中,而不再支持将其写入文件【在 MySQL 8.0 之前,要将复制元数据存储库创建为表,必须 在服务器启动时指定master_info_repository=TABLE 和 。relay_log_info_repository=TABLE否则,存储库将创建为名为 master.infoand 的数据目录中的文件,或者使用由选项和 系统变量relay-log.info指定的替代名称和位置 。从 MySQL 8.0 开始,默认将复制元数据存储库创建为表,并且不推荐使用所有这些系统变量。 --master-info-filerelay_log_info_file】
#master_info_repository = TABLE
#relay_log_info_repository = TABLE
relay_log_recovery = 1
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 3000
#skip-slave-start    #mysql5.X版本使用
skip_replica_start
gtid-mode = ON
enforce-gtid-consistency = ON
#slave_parallel_type = LOGICAL_CLOCK    #mysql5.X版本使用
replica_parallel_type= LOGICAL_CLOCK
#slave_parallel_workers = 4    #mysql5.X版本使用
replica_parallel_workers = 4   
#slave_preserve_commit_order = 1    #mysql5.X版本使用
replica_preserve_commit_order = 1
#log-slave-updates    #mysql5.X版本使用
log_replica_updates
无损半同步复制参数内容说明
序号无损半同步复制参数内容说明
1binlog_format = row设置主从基于行的复制,还有基于SQL语句的复制(statement)、基于混合模式复制(mixed),建议选择基于行的复制模式。
2master_info_repository

设置从机保存主节点信息方式,设成file时 会生成master.info 和 relay-log.info2个文件,设成table,信息就会存在mysql.master_slave_info表中。

注意:该参数仅适用于MySQL8.0以下的版本

3relay_log_info_repository

用于保存slave读取relay log的位置信息,可选值为“FILE”、“TABLE”,以便crash重启后继续恢复。

注意:该参数仅适用于MySQL8.0以下的版本

4relay_log_recovery=1当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。
5gtid-mode = ON开启GTID复制。
6enforce-gtid-consistency=ON开启GTID复制,保证GTID的一致性。
17.2.4.2 复制元数据存储库_MySQL 8.0 参考手册

 1.3、关闭MySQL数据库并禁用开机自启

        为什么要关闭MySQL数据库呢?这是因为在部署xenon集群时,mysql库是无需启动的,因为xenon会自动启动或关闭mysql库,所以这里初始化完成后,直接关闭数据库即可。

#需要对三台MySQL的服务器都执行关闭且禁止开机自启的操作#1-关闭数据库服务
systemctl stop mysqld.service
systemctl status mysqld.service#2-禁用MySQL数据库开机自启
systemctl disable mysqld.service

 1.4、其他两台MySQL的安装

       MySQL需要在三个集群节点都进行安装,其实,在第一台上安装完成mysql后,可以直接将【/usr/local/mysql/mysql-8.0.43】目录打包,然后将这个打包好的压缩包拷贝到xenon2和xenon3节点,直接在这两个节点上进行解压即可完成安装。但需要注意一个问题,那就是在【/usr/local/mysql/mysql-8.0.43/data】目录下的【auto.cnf】文件,MySQL启动时,会自动从auto.cnf文件中获取server-uuid值,并将这个值存储在全局变量server_uuid中。因此,这个文件里面的server-uuid值是唯一的,每个节点不能相同也就是说,从xenon1拷贝mysql包到xenon2和xenon3节点后,必须要修改auto.cnf文件中server-uuid的值,确保每个节点都不相同。

#实现将已经安装好的MySQL8.0.43复制到其他服务器上流程#1-打包xenon1已经安装好的MySQL压缩到【/data/mysql-8.0.43.tar.xz】(注意:在压缩已经安装好的MySQL前,先停止MySQL)
systemctl stop mysqld.service
cd /usr/local/mysql    
tar -Jcvf /data/mysql-8.0.43.tar.xz mysql-8.0.43#2-将打包好的MySQL传输到其他服务器上(如:192.168.1.37)
#【注意:一定要修改【/usr/local/mysql/mysql8.0.43/data/auto.cnf】文件里面的编号,保证都是唯一的】
scp /data/mysql-8.0.43.tar.xz root@192.168.1.37:/usr/local/mysql

Linux的压缩与解压缩_linux 压缩文件https://coffeemilk.blog.csdn.net/article/details/149109326

二、安装xtrabackup热备份恢复工具和Xenon及其配置

 2.1、安装xtrabackup热备份与恢复工具

全网最详细完整的MySQL数据库备份恢复工具xtrabackup、innobackupex实操保姆级教程_xtrabackup 使用说明https://coffeemilk.blog.csdn.net/article/details/152024226

        xtrabackup是mysql的一个热备份、恢复工具,可以实现集群的备份和迁移。我们这里通过Percona提供的rpm包进行安装,首先从【https://www.percona.com/downloads】下载对应的MySQL版本和系统的xtrabackup包,然后进行安装即可。

#XtraBackup工具的安装流程#1-下载XtraBackup工具的rpm包到【/data】
wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-34/binary/redhat/9/x86_64/percona-xtrabackup-80-8.0.35-34.1.el9.x86_64.rpm -c 0 -P /data#2-安装下载好的XtraBackup的rpm包(若在安装时提示缺失lz4、perl-DBD-mysql、libev.so.4()错误则执行【yum install lz4 perl-DBD-mysql libev -y】命令安装这两个缺失的依赖包即可)
yum install libev lz4 perl-DBD-mysql -y
cd /data
rpm -ivh percona-xtrabackup-80-8.0.35-34.1.el9.x86_64.rpm#3-查看XtraBackup工具版本(若显示对应的版本信息则表示安装成功)
xtrabackup -v#注意:如果安装的版本不对,需要卸载则进行如下操作:
#1-查看已经安装好的percona包(比如是:percona-xtrabackup-84.x86_64)
yum list installed | grep percona#2-卸载指定的安装包(比如:percona-xtrabackup-84.x86_64)
yum remove percona-xtrabackup-84.x86_64 -y

注意:需要在三台MySQL服务器上都安装xtrabackup。

 2.2、安装高可用工具xenon

xenon/docs/how_to_build_and_run_xenon.md at master · radondb/xenonhttps://github.com/radondb/xenon/blob/master/docs/how_to_build_and_run_xenon.md

#直接使用xenon的源码进行编译安装流程#1-安装xenon的环境依赖
yum install golang -y#2-下载xenon的源码到本机/data目录中
wget https://github.com/radondb/xenon/archive/refs/tags/v1.1.4.tar.gz -c 0 -P /data#3-将xenon解压到【/usr/local】目录中并编译
cd /data
tar -zxvf v1.1.4.tar.gz -C /usr/local/
cd /usr/local/
mv xenon-1.1.4 xenon
cd xenon
go env -w GO111MODULE=off
make build#4-验证编译的xenon是否完成及其指定xenon的配置文件
#4.1-编译xenon完成后可进入【/usr/local/xenon/bin】目录下查看【xenon、xenoncli】两个文件是否存在,存在则表示xenon完成成功。
cd bin#4.2-指定xenon的配置文件名称为【xenon.json】
cd /usr/local/xenon/conf
cp xenon-simple.conf.json xenon.json

#给其余的两台MySQL服务器安装xenon#1-进入当前已经编译好xenon所在父目录中,然后将已经编译好的xenon压缩
/usr/local
tar -zcvf xenon.tar.gz xenon#2-将已经编译好的xenon压缩后传输一份到另外两台服务器(如:192.168.1.37、192.168.1.38)的/usr/local目录中
scp xenon.tar.gz root@192.168.1.37:/usr/localscp xenon.tar.gz root@192.168.1.38:/usr/local

 2.3、配置xenon的配置文件及其说明

        注意:这是我们在第一台(xenon1)服务器上配置的xenon配置文件内容;剩下的两台服务器节点也需要配置上这个内容;但是配置文件中的IP地址与网卡名称需要根据服务器的实际情况修改。

#xenon1主机上的配置文件【/usr/local/xenon/conf/xenon.json】内容{"server":{"endpoint":"192.168.1.36:8801"},"raft":{"meta-datadir":"raft.meta","heartbeat-timeout":1000,"election-timeout":3000,"leader-start-command":"sudo /usr/sbin/ip a a 192.168.1.227/24 dev ens33 && arping -c 3 -A  192.168.1.227 -I ens33","leader-stop-command":"sudo /usr/sbin/ip a d  192.168.1.227/24 dev ens33"},"mysql":{"admin":"root","passwd":"abc123456","host":"127.0.0.1","port":13337,"basedir":"/usr/local/mysql/mysql-8.0.43/","defaults-file":"/usr/local/mysql/mysql-8.0.43/etc/my.cnf","ping-timeout":1000,"master-sysvars":"super_read_only=0;read_only=0;sync_binlog=default;innodb_flush_log_at_trx_commit=default;rpl_semi_sync_slave_enabled=0;rpl_semi_sync_master_enabled=1","slave-sysvars": "super_read_only=1;read_only=1;sync_binlog=1000;innodb_flush_log_at_trx_commit=2;rpl_semi_sync_slave_enabled=1;rpl_semi_sync_master_enabled=0"},"replication":{"user":"repl","passwd":"repl_passwd"},"backup":{"ssh-host":"192.168.1.36","ssh-user":"mysql","ssh-passwd":"qwas%1357","ssh-port":22,"backupdir":"/data/mysqlbackup","xtrabackup-bindir":"/usr/bin","backup-iops-limits":100000,"backup-use-memory": "2GB","backup-parallel": 2},"rpc":{"request-timeout":500},"log":{"level":"INFO"}
}
配置xenon的配置文件
配置段配置段内参数说明
serverendpoint

是指定每个节点的ip和启动xenon服务对应的端口,8801端口保持默认即可。

IP就是三个节点的物理IP地址,需要做修改。

raftmeta-datadir存储 节点加入选举后的原数据信息
heartbeat-timeout心跳超时时间(单位:毫秒)
election-timeout选举超时时间(单位:毫秒)
leader-start-command

是配置集群选举后,master节点绑定VIP地址的命令

注意:这里配置的网卡名称需要修改为xenon.json所在服务器的信息

leader-stop-command

删除VIP地址的命令

mysqladmin指定mysql用户,一般是root
passwd是指定用户的密码,一般是roo用户密码
hosthost保持默认的127.0.0.1即可
portmysql数据库的端口号(默认是3306),我们这里是13336
basedir指定mysql库的程序根目录;我们这里是【/usr/local/mysql/mysql-8.0.43/】
defaults-file是指定mysql库的配置文件路径;我们这里是【/usr/local/mysql/mysql-8.0.43/etc/my.cnf】
ping-timeoutping的超时时间(单位:毫秒)
master-sysvars是设置节点变为master角色时,需要添加的mysql参数配置
slave-sysvars是设置slave节点mysql的参数配置。
replicationuser

主从复制时,对应的复制用户;

这个用户无需自己手动创建,xenon会自动创建此用户以及设置用户对应的密码

passwd主从复制时,对应的复制用户对应的密码
backupssh-host

是本机对应的IP地址。

不同节点的ip不同,必须修改

ssh-user是本机的linux用户;我们这里使用的是 mysql
ssh-passwd是本机的linux用户对应的密码:我们这里是mysql用户的密码
ssh-port是Linux的ssh端口,默认是22
backupdir

是指定通过xtrabackup进行备份时,备份数据的存放路径。

注意:xtrabackup在进行备份的时候,会首先删除这个路径下的所有数据,然后才开始备份

xtrabackup-bindir是指定xtrabackup这个命令所在的路径,默认是/usr/bin
backup-iops-limits备份使用的IO数量限制
backup-use-memory备份使用的物理内存
backup-parallel备用使用的线程
rpcrequest-timeout请求的超时时间(单位:毫秒)
loglevel日志输出级别

 2.4、对xenon授权

#1-对xenon配置必要内容和授权(三个xenon服务器都需要执行这个操作)
mkdir -p /etc/xenon
cp /usr/local/xenon/conf/xenon.json /etc/xenon/
echo "/etc/xenon/xenon.json" > /usr/local/xenon/bin/config.path
mkdir -p /usr/local/xenon/logs#2-对/usr/local/xenon和/etc/xenon/目录进行授权,允许mysql用户完全访问
chown mysql.mysql -R /usr/local/xenon
chown mysql.mysql -R /etc/xenon/

三、xenon集群操作管理

        前提:现在是MySQL数据库全部安装配置完成;xenon也全部安装配置完成。

#检查防火墙,若防火墙开启则需要放开MySQL的13337端口与xenon的8801端口firewall-cmd --zone=public --add-port=13337/tcp --permanent
firewall-cmd --zone=public --add-port=8801/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-port

 3.1、启动xenon集群

  3.1.1、启动xenon对应的MySQL节点构建集群

#以在xenon1(192.168.1.36)节点上启动xenon服务为例说明,并向集群中添加xenon1、xenon2节点;剩余的两个节点也是一样的操作#1-切换到【mysql】用户启动xenon服务
su - mysql#2-进入xenon程序路径启动xenon,并查看启动情况
cd /usr/local/xenon/bin
./xenon -c /etc/xenon/xenon.json > /usr/local/xenon/logs/xenon.log 2>&1 &
ps -ef | grep xenon.json
ps -ef | grep mysqld
netstat -antlp | grep mysqld#3-向xenon集群中添加节点xenon1、xenon2、xenon3和查看集群状态
./xenoncli cluster add 192.168.1.36:8801,192.168.1.37:8801,192.168.1.38:8801
./xenoncli cluster mysql
./xenoncli cluster status

《1》在xenon1(192.168.1.36)节点执行启动xenon集群的所有操作

《2》在xenon2(192.168.1.37)节点使用xenon启动MySQL后回到xenon1查看MySQL集群的状态

《3》在xenon2(192.168.1.37)节点添加【192.168.1.36:8801,192.168.1.37:8801,192.168.1.38:8801】内容到集群中后回到xenon1查看MySQL集群的状态

《4》在xenon3(192.168.1.38)节点添加【192.168.1.36:8801,192.168.1.37:8801,192.168.1.38:8801】内容到集群中后回到xenon1查看MySQL集群的状态

  3.1.2、解决xenon启动后MySQL的集群节点的IO状态为false问题

解决MySQL8.0及其更高版本的两个安全问题——及其配置MySQL实现SSL/TLS加密通信、caching_sha2_password通信https://blog.csdn.net/xiaochenXIHUA/article/details/152812136

        注意:如果xenon查看MySQL的集群时节点的IO状态为false,则需要将该节点的xenon.json进程先杀死,然后进入该节点的MySQL中重新设置主节点Master可获取主库公钥,详细操作如下:

#1-进入该IO为【false】节点的数据库中查看主从复制状态
/usr/local/mysql/mysql-8.0.43/bin/mysql -u root -p
show replica status\G;#2-强制停止xenon进程(通过【ps -ef | grep xenon】命令查看到该xenon的进程信息,如xenon的进程编号是16899)
kill -9 16899#3-停止该从库节点的主从复制后再次查看MySQL的主从复制状态【 Replica_IO_Running: NoReplica_SQL_Running: No】都是No才可以进行后续的步骤
stop replica;
show replica status\G;#4-同步主库内容(注意:global gtid_purged=后面的内容需要先登录主库Master的MySQL后执行【show master status】查看信息后获取)
set global gtid_purged="138e66dd-a381-11f0-8f08-000c296d209f:1-3,
83e288e3-a4ba-11f0-9623-000c296d209f:1-6";#5-重新配置该节点主库内容
change replication source to 
source_host='192.168.1.36',
source_port=13337,
source_user='repl',
source_password='repl_passwd',
source_auto_position=1,
get_source_public_key=1;#6-再次启动该节点的xenon
su - mysql
cd /usr/local/xenon/bin
./xenon -c /etc/xenon/xenon.json > /usr/local/xenon/logs/xenon.log 2>&1 &
./xenoncli cluster mysql

解决MySQL8.0及其更高版本的两个安全问题——及其配置MySQL实现SSL/TLS加密通信、caching_sha2_password通信https://blog.csdn.net/xiaochenXIHUA/article/details/152812136

到这里恭喜你表示xenon控制的MySQL集群搭建成功了。

 3.2、关闭xenon集群

#关闭xenon集群及其对应的Mysql流程(每个节点都要执行)【推荐使用】
#1-切换到mysql用户
su - mysql#2-切换到xenon程序目录中
cd /usr/local/xenon/bin#3-关闭xenon的监控引擎
./xenoncli mysql stopmonitor#4-停止mysql服务
./xenoncli mysql shutdown#5-关闭xenon进程
pkill xenon
#彻底关闭xenon集群流程(每个节点都需要执行)#1-关闭xenon工具
pkill xenon#2-关闭MySQL(若需要强制关闭则添加-9)
killall mysqld#3-查看mysql进程信息和xenon进程
ps -ef | grep xenon
ps -ef | grep mysqld
netstat -antlp | grep mysqld

 3.3、Xenon集群的维护

#查看xenon集群的常用命令
#1-切换到mysql用户
su - mysql#2-进入到xenon程序所在路径
cd /usr/local/xenon/bin#3-查看xenon集群的状态
./xenoncli cluster status#4-查看xenon集群中MySQL的主从复制状态信息
./xenoncli cluster mysql#5-查看xenon集群中mysql的角色和配置信息
./xenoncli cluster xenon#6-集群的主从事务同步状态【Retrieved_GTID_Set:表示从库已经接收到主库的事务编号。Executed_GTID_Set :表示从库自身已经执行的事务编号。】
./xenoncli cluster gtid#7-使用xenon工具添加或移除MySQL节点(注意:只能添加或移除从库,主库是无法移除的)
#注意:要删除某个节点,只需要在集群任意节点执行上面命令即可,但,被删除的节点上,无法删除自己节点的信息,也就是说172.16.213.232这个节点被删除后,在172.16.213.232这个节点执行“xenoncli  cluster mysql”这个命令时,还是能看到此节点的信息。不过不要紧,此节点既然是删除的节点,直接关闭集群服务,停止mysql服务即可,不会对集群产生影响。
./xenoncli cluster  remove 192.168.1.38:8801
./xenoncli cluster add 192.168.1.36:8801,192.168.1.37:8801,192.168.1.38:8801
#登录Mysql中创建用户(如:创建ck用户且可以让192.168.1网段的任意设备登录,且授予该ck用户只能操作testdb数据库及其该库下的所有表,ck用户只拥有插入、更新、查看数据的权限)
/usr/local/mysql/mysql-8.0.43/bin/mysql -uroot -p
select user,host from mysql.user;
create user ck@'192.168.1.%' identified by 'qwas%1357';
grant insert,update,select on testdb.* to ck@'192.168.1.%';
flush privileges;#我们可以使用shell的do while循环来实现数据的插入MySQL集群的表中
while : ; do echo "insert into testdb.cktdb(name,telnumber)values( '测试',round(rand()*10000));" | /usr/local/mysql/mysql-8.0.43/bin/mysql -h 192.168.1.227 -P 13337 -uck -p'qwas%1357';sleep 5;done

 3.4、使用xenon备份MySQL到本地

        xenon集成了备份功能,可以通过指定路径,将集群数据备份到某节点某路径下【建议创建一个定时任务定期备份

#使用xenon备份MySQL到本地【/home/mysql/mysql8.0.43backup/data/2025101020】目录中(目录不存在才创建)
su - mysql
cd /usr/local/xenon/bin
mkdir -p /home/mysql/mysql8.0.43backup/data/2025101020
./xenoncli mysql backup --to=/home/mysql/mysql8.0.43backup/data/2025101020

 3.5、xenon集群故障切换

  3.5.1、手动 Failover/switchover

        xenon集群支持故障检测、故障自动切换,也支持手动触发主从切换。如果想让哪个节点成为master节点,就在哪个节点执行如下命令即可:

#手动指定MySQL节点为主库命令(即:想要哪个Mysql节点成为主库就在哪个节点的执行如下命令)
su - mysql
cd /usr/local/xenon/bin
./xenoncli raft trytoleader

  3.5.2、slave节点故障切换过程

slave节点发生故障的几种情况及其处理方法
序号slave节点发生故障的几种情况及其处理方法
1

slave节点如果网络故障,导致主从同步中断。

这个问题无需处理,只需等待网络恢复后,slave节点会自动去同步master节点的binlog数据,实现主从同步。

2

《1》如果slave节点上mysql库异常关闭,那么xenon进程会尝试重新启动,如果能够启动mysql,那么自动恢复正常。

《2》如果xenon进程无法实现重启的,那么可能是mysql本身有故障,需要检查mysql实例,修复问题,只要mysql能够正常启动,此节点就可以正常加入集群中。

3如果slave节点所在的主机磁盘故障,导致mysql数据丢失,或者由于redo log损坏,导致数据库无法启动的,此种情况就需要重建此节点,这种情况也是最难处理的一种。

接下来针对slave节点发生故障的第三种情况,进行恢复演练:

《1》获取此前的数据备份,通过之前的备份数据,恢复这个节点上mysql实例的正常运行。记住,一定要通过之前对集群的备份数据进行恢复,重新初始化数据库,是无法进行恢复的。

        我们这里假定192.168.1.37节点发生故障,可使用【./xenoncli cluster mysql】命令查看集群情况,可以了解到该节点目前是FOLLOWER角色,也就是slave节点,首先关闭此节点的xenon服务和mysql服务(实际环境中mysql可能无法启动了【手动删除该节点的data目录模拟故障】),然后,将之前的备份恢复到此节点的data目录下,操作过程如下:

#1-手动模拟xenon集群中192.168.1.37故障【以下操作在故障节点192.168.1.37操作】
su - mysql
cd /usr/local/xenon/bin
./xenoncli mysql stopmonitor
./xenoncli mysql shutdownps -ef | grep xenon.json
ps -ef | grep mysqld
netstat -antlp | grep mysqldcd /usr/local/mysql/mysql-8.0.43/
mv data data.old
rm -rf ./data#2-将之前使用xenon备份的MySQL数据复制一份到该故障节点(192.168.1.37【xenon2】)的【/usr/local/mysql/mysql-8.0.43/data】目录中
#2.1-先进入原来使用xenon备份的MySQL节点中(192.168.1.36【xenon1】)的路径下将备份的mysql数据压缩一份
cd /home/mysql/mysql8.0.43backup/data
tar -Jcvf 2025101020.tar.xz 2025101020
scp 2025101020.tar.xz  mysql@xenon2:/usr/local/mysql/mysql-8.0.43/#2.2-进入到该故障节点的【/usr/local/mysql/mysql-8.0.43】目录中,将xenon备份的Mysql数据【2025101020.tar.xz】解压到【/usr/local/mysql/mysql-8.0.43/data】目录中
cd /usr/local/mysql/mysql-8.0.43
tar -xvf 2025101020.tar.xz
mkdir -p data
cp -p -r 2025101020/* data
ll data#3-数据库恢复完成后,启动xenon服务,mysql服务会自动启动
su - mysql
cd /usr/local/xenon/bin
./xenon -c /etc/xenon/xenon.json > /usr/local/xenon/logs/xenon.log 2>&1 &
./xenoncli cluster mysql

        上面步骤恢复完成后,可能会自动实现master节点数据同步到此节点,那么恢复完成。但也可能出现xenon2节点主从复制失败的情况(主要是sql进程异常),失败原因是多方面的,跟使用的备份有很大关系,但解决这个问题的方法是一样的,此时需要执行第二个步骤

        第二步,如果出现了主从同步失败,那么,最快的方法,就是在这个节点执行重建,也就是在此节点执行”xenoncli mysql rebuildme“命令,但前提是此节点xenon服务和mysql服务已经正常启动。执行重建,命令如下:

#重建节点
su - mysql
cd /usr/local/xenon/bin
./xenoncli mysql rebuildme

        执行”xenoncli mysql rebuildme“命令进行重建后,若重建成功,此节点数据和master节点完全一致。slave节点恢复成功。

  3.5.3、master节点故障切换过程

        如果master节点发生故障,那么xenon集群会自动进行主从选举,重新选举出一个新的master节点,同时把其他的slave节点同步的IP信息修改为新的master节点。这个过程都是自动完成的。这里master节点的故障切换恢复过程与上面【slave节点发生故障的第三种情况,进行恢复演练】操作流程一致。

        当还原了使用xenon恢复的mysql数据后,若主从复制的SQL线程报异常等无法正常加入集群主从同步正常的各种问题时【最简单、直接的方法就是在此故障节点上直接执行重建】:

#重建节点操作【哪个节点有故障很难恢复就直接在哪个故障节点执行重建操作】
#注意:执行重建的前提是此故障节点的xenon服务和mysql服务已经正常启动
su - mysql
cd /usr/local/xenon/bin
./xenoncli mysql rebuildme

 3.6、Rebuild 重建节点

        当某个节点发生故障时,可以通过 rebuildme重建此节点(如:某节点硬件故障,硬件恢复后,如果之前数据无法恢复),此时可以利用之前的备份,然后让此节点加入集群,最后,就可以使用rebuildme命令来将此节点恢复到最新数据状态。

#在需要做重建的节点执行如下命令即可进行重建:
su - mysql
cd /usr/local/xenon/bin
./xenoncli mysql rebuildme 
xenon的重建命令执行后涉及到的重建节点详细步骤
序号xenon的重建命令执行后涉及到的重建节点详细步骤内容
1禁用 raft,将 Xenon 状态设为 LEARNER;
2若 mysql 进程存在,则 stop mysql;
3清空 MySQL 数据目录【data】;
4执行 xtrabackup --backup 以 xbstream 方式获取对端数据;
5执行 xtrabackup --prepare,应用 redo log;
6启动 mysql;
7执行 stop slave; reset slave all;
8执行 reset master,以 xtrabackup_binlog_info 文件中的 GTID 为准设置 gtid_purged;
9启用 raft,将 Xenon 状态设为 FOLLOWER 或 IDLE;
10等待 Xenon 自动 change master to 到主节点;
11执行 start slave。

        在进行节点重建的时候,默认情况下,xenon会从集群节点中选取一个最新的slave节点进行数据复制和拷贝,但我们也可以指定从哪个节点进行数据的复制和拷贝,指定节点复制,重建当前 MySQL 节点【通常不建议使用】。具体执行的命令如下:

 ./xenoncli mysql rebuildme --from=192.168.1.38:8801

        注意,在执行节点重建时,此节点的mysql服务、xenon服务需要处于启动状态,也就是说重建的节点一定是集群的成员,否则无法执行重建,因此,故障节点在恢复重建之前,最好能通过之前的mysql备份,将mysql服务启动起来。然后执行重建。

http://www.dtcms.com/a/465501.html

相关文章:

  • PINN物理信息神经网络风电功率预测!引入物理先验知识嵌入学习的风电功率预测新范式!Matlab实现
  • 【C++进阶系列】:万字详解智能指针(附模拟实现的源码)
  • 深圳网站建设-中国互联申请网站建设费用的请示
  • 有没有做那个的视频网站泉州建设网站的公司
  • 标识符、表达式和语句
  • 多台服务器文件共享存储
  • 中远智达网站建设项目管理软件开源
  • 购物网站开发教学视频鸿扬家装网站建设
  • 随机森林所有参数含义以及如何进行采样和网格搜索;
  • Pinna与Vuex之间的相同点与不同点
  • 多模态医疗大模型Python编程合规前置化与智能体持续学习研究(中)
  • 缠中说禅技术分析工具czsc(一)
  • Windows安装Redis保姆级教程
  • 2025瑞芯微开发者大会万象奥科展出RK3506邮票孔核心板
  • 公司网站是怎么做的logo设计网页
  • 旅游攻略网站开发背景苏州网站制作电话
  • Room持久化库中,@Transaction注解的正确使用场景是?
  • Oracle实用参考(13)——Oracle for Linux (RAC)到Oracle for Linux(单实例)间OGG单向复制环境搭建(1)
  • Oracle中的ROUND函数
  • 上位机 OCR 通讯实战
  • Google 智能体设计模式:知识检索(RAG)
  • 山西网站建设找哪家商丘做网站公司新站seo快速收录网页内容页的方法
  • 健身网站的建设方案充电宝关键词优化
  • LOTVACUUM HDSeries 系列HD550系列真空泵韩国Manual
  • 视觉新范式:ResNet+Transformer双路径融合,顶刊解析遥感分割与动作识别新SOTA
  • 网站备案怎么转入常州网站建设书生商友
  • Neo4j图数据库上手指南
  • 计算机基础知识 | 计网 | 状态检测防火墙(Stateful Firewall)
  • 给公司做网站销售怎样啦中国建设银行演示网站
  • RSA加密从原理到实践:Java后端与Vue前端全栈案例解析