写点什么

高可用 | 关于 Xenon 高可用的一些思考

发布于: 2 小时前
高可用 | 关于 Xenon 高可用的一些思考

原创:知数堂

上一篇文章,我们详细介绍了 Xenon 实现 MySQL 高可用架构的常用操作。本篇将对关于 Xenon 高可用的一些思考及高频问题进行解答。

问题 1:宕机时 binlog 有 gap 会补日志吗?

Xenon 不会补日志,Xenon 只会从包含最大 GTID 的所有 Follower 中选举一个 Follower,使之成为 Leader 。重新配置主从复制,并把 VIP 切换到新的主节点上。


注意: 如果此时主从有延时,当主库异常,新主上存在还未应用的 Relay Log 时,新主将会被置为 Read-Only 状态,等待 Relay 应用完毕后,才会开启 Read-Write 状态。这样可保障数据强一致性。

问题 2:宕机节点如何恢复?

Xenon 会自动把恢复的节点以 Follower 角色加入集群,也可以用 rebuildme 命令重建。

问题 3:3 个节点允许几个节点宕机?

3 个节点最多允许 1 个节点宕机。


关于节点个数,Xenon 目前不支持 2 节点,最少 3 个节点,最多没有明确上限,可配置超过 13 个节点。但考虑到从节点的数据来自主节点,因此建议配置 3 或 5 个节点。

问题 4:Xenon 主节点宕机后,会出现主从切换异常的场景吗?

除非集群 3 个节点之间网络互相不通,或者超过半数节点的 MySQL 宕机了,否则肯定能完成选主切换。

若出现主从切换异常,请优先排查集群间网络连通情况。

问题 5:Xenon 推荐使用哪个版本,受 MySQL 版本影响吗?

推荐使用 Xenon 最新的 Release 版本,当前是 v1.1.4 版本

  1. 优化了高可用选举逻辑,可更快选出主节点;

  2. 新增按指定角色启动特性,以确保升级 Xenon 期间不会触发 MySQL 主从切换。


参考链接:https://github.com/radondb/xenon/blob/Main/docs/how_xenon_upgrades.md

问题 6:目前 Xenon 支持 MySQL 哪些版本,支不支持 MySQL 8.0?

Xenon 同时支持 MySQL 5.6、5.7、8.0 版本,而 MySQL 官方预计在 2021 年 10 月后将不再维护 5.7 版本。


因此选择使用 Xenon 时,优先推荐 MySQL 8.0 版本。

问题 7:主节点宕机又恢复是如何运行的,会自动加入集群吗?

例如,主节点 a 正常时,a->b,a->c。若 a 宕机了,切换成了 b 为主节点,则有 b->c。a 恢复后,会自动作为从节点加入集群,则有 b->a。

问题 8:为适配 Xenon,MySQL 哪些参数需要特别设置?

为适配 Xenon 性能,MySQL 部分参数需提前配置,特别是在金融业务应用场景下。以下提供部分 my.cnf 参数配置作为参考。

[client]socket = /data/mysql/mysql.sock[mysqld]federatedbasedir = /opt/mysqldatadir = /data/mysql/socket = /data/mysql/mysql.socklog-error = /data/mysql/mysql-error.logslow_query_log_file = /data/mysql/mysql-slow.logread_only = ONbinlog_format = rowlog-bin-index=mysql-bin.indexlog-bin=/data/mysql/mysql-bininnodb_open_files=655360open_files_limit=655360core-file
#semi-sync, validate-password, audit-logplugin-load="semisync_Main.so;semisync_Follower.so"rpl_semi_sync_Main_enabled=OFFrpl_semi_sync_Follower_enabled=ONrpl_semi_sync_Main_wait_no_Follower=ONrpl_semi_sync_Main_timeout=1000000000000000000
#replskip-Follower-startgtid-mode = ONenforce-gtid-consistency = ONFollower_parallel_type = LOGICAL_CLOCKlog-Follower-updates
#relay logrelay_log=/data/mysql/mysql-relay-binrelay_log_index=mysql-relay-bin.indexMain_info_repository=TABLErelay_log_info_repository=TABLE
#fixed configslow_query_log=1tmp_table_size=32Mtmpdir=/data/mysqlserver_id = 197039727innodb_log_files_in_group=2skip-name-resolve=1innodb_ft_max_token_size=84innodb_use_native_aio=1innodb_ft_min_token_size=3interactive_timeout=3600transaction-isolation=REPEATABLE-READcharacter_set_server=utf8mb4Follower_parallel_workers=8max_connect_errors=655360autocommit=1innodb_flush_method=fsyncsync_Main_info=1000lower_case_table_names=0default-time-zone=+08:00innodb_log_file_size=50331648log_timestamps=systemlog_bin_trust_function_creators=1wait_timeout=3600long_query_time=3expire_logs_days=3
复制代码

问题 9:Xenon 集群中与时间相关的参数有哪些?

请参考:

{"log": {"level": "DEBUG"},"server": {"endpoint": "192.168.0.5:8801"},"replication": {"passwd": "Qc0_499f273e","user": "repl_926fb44"},"rpc": {"request-timeout": 1000},"mysql": {"admit-defeat-ping-count": 3,"admin": "root","basedir": "/opt/mysql","defaults-file": "/etc/mysql/my.cnf","ping-timeout": 1000,"passwd": "","host": "localhost","Main-sysvars": "tokudb_fsync_log_period=default;sync_binlog=default;innodb_flush_log_at_trx_commit=default","Follower-sysvars": "tokudb_fsync_log_period=1000;sync_binlog=1000;innodb_flush_log_at_trx_commit=1","port": 3306},"raft": {"leader-start-command": "sudo ip a a 192.168.0.253/32 dev eth0 && sudoarping -c 3 -A 192.168.0.253 -I eth0","election-timeout": 5000,"leader-stop-command": "sudo ip a d 192.168.0.253/32 dev eth0","admit-defeat-hearbeat-count": 5,"heartbeat-timeout": 1000,"meta-datadir": "/data/raft/","purge-binlog-disabled": true},"backup": {"ssh-host": "192.168.0.5","ssh-user": "ubuntu","ssh-passwd": "","mysqld-monitor-interval": 5000,"backup-use-memory": "3072M","ssh-port": 22,"xtrabackup-bindir": "/opt/xtrabackup/bin","backup-parallel": 2,"backupdir": "/data/mysql/","backup-iops-limits": 100000}}
复制代码

相关阅读

发布于: 2 小时前阅读数: 2
用户头像

https://radondb.com 2021.06.21 加入

一个面向云原生、容器化的数据库开源社区!

评论

发布
暂无评论
高可用 | 关于 Xenon 高可用的一些思考