百木园-与人分享,
就是让自己快乐。

高可用 | 关于 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 版本

  • 优化了高可用选举逻辑,可更快选出主节点;
  • 新增按指定角色启动特性,以确保升级 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]
    federated
    basedir = /opt/mysql
    datadir = /data/mysql/
    socket = /data/mysql/mysql.sock
    log-error = /data/mysql/mysql-error.log
    slow_query_log_file = /data/mysql/mysql-slow.log
    read_only = ON
    binlog_format = row
    log-bin-index=mysql-bin.index
    log-bin=/data/mysql/mysql-bin
    innodb_open_files=655360
    open_files_limit=655360
    core-file

    #semi-sync, validate-password, audit-log
    plugin-load=\"semisync_Main.so;semisync_Follower.so\"
    rpl_semi_sync_Main_enabled=OFF
    rpl_semi_sync_Follower_enabled=ON
    rpl_semi_sync_Main_wait_no_Follower=ON
    rpl_semi_sync_Main_timeout=1000000000000000000

    #repl
    skip-Follower-start
    gtid-mode = ON
    enforce-gtid-consistency = ON
    Follower_parallel_type = LOGICAL_CLOCK
    log-Follower-updates

    #relay log
    relay_log=/data/mysql/mysql-relay-bin
    relay_log_index=mysql-relay-bin.index
    Main_info_repository=TABLE
    relay_log_info_repository=TABLE

    #fixed config
    slow_query_log=1
    tmp_table_size=32M
    tmpdir=/data/mysql
    server_id = 197039727
    innodb_log_files_in_group=2
    skip-name-resolve=1
    innodb_ft_max_token_size=84
    innodb_use_native_aio=1
    innodb_ft_min_token_size=3
    interactive_timeout=3600
    transaction-isolation=REPEATABLE-READ
    character_set_server=utf8mb4
    Follower_parallel_workers=8
    max_connect_errors=655360
    autocommit=1
    innodb_flush_method=fsync
    sync_Main_info=1000
    lower_case_table_names=0
    default-time-zone=+08:00
    innodb_log_file_size=50331648
    log_timestamps=system
    log_bin_trust_function_creators=1
    wait_timeout=3600
    long_query_time=3
    expire_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 && sudo
    arping -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
    }
    }

    相关阅读

    • Xenon 实现 MySQL 高可用架构 常用操作篇
    • Xenon 实现 MySQL 高可用架构 部署篇
    • Xenon 后 MHA 时代的选择

    来源:https://www.cnblogs.com/radondb/p/15304298.html
    图文来源于网络,如有侵权请联系删除。

    未经允许不得转载:百木园 » 高可用 | 关于 Xenon 高可用的一些思考

    相关推荐

    • 暂无文章