原創:知數堂
上一篇文章,我們詳細介紹了 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.uj5u.com/shujuku/300874.html
標籤:MySQL
