原創(chuàng):知數(shù)堂
| MySQL 高可用的選擇
在 MySQL(5.5 及以下)傳統(tǒng)復(fù)制的時代剪勿,MHA(Master High Availability)在 MySQL 高可用應(yīng)用中非常成熟。在 MySQL(5.6)及 GTID 時代開啟以后兑牡,MHA 卻沒有與新的 MySQL 一起順應(yīng)時潮练对。
MHA 由日本 DeNA 公司 youshimaton 開發(fā)遍蟋,他認為在 GTID 環(huán)境下 MHA 存在的價值不大,MHA 最近一次發(fā)版是 2018 年∶荆現(xiàn)如今使用 MySQL 已離不開 GTID 虚青,無論是從功能、性能角度螺男,還是從維護角度棒厘,GTID 能具備更優(yōu)異的表現(xiàn),針對數(shù)據(jù)業(yè)務(wù)要求不高場景下隧,常使用 GTID+ROW+Semi-Sync 方案奢人。
基于 MHA 和 GTID 發(fā)展現(xiàn)狀,為適應(yīng) MySQL 版本更新的高可用業(yè)務(wù)場景淆院,下面介紹一款可替代 MHA 的高可用方案:MySQL + Xenon
| 什么是 Xenon何乎?
Xenon [?zi?n?n] (https://github.com/radondb/xenon) 是一款由 RadonDB 開發(fā)團隊研發(fā)并開源的新一代 MySQL 集群高可用工具⊥帘纾基于 Raft 協(xié)議進行無中心化選主支救,實現(xiàn)主從秒級切換;基于 Semi-Sync 機制拷淘,保障數(shù)據(jù)不丟失各墨,實現(xiàn)數(shù)據(jù)強一致性。并結(jié)合 MySQL(5.7 及以上版本)并行復(fù)制特性启涯,實現(xiàn) Binlog 并行回放贬堵,大大降低從庫延遲恃轩。
| Xenon 架構(gòu)
- 自動選主
基于 Raft(依賴于 GTID)自動選主,數(shù)據(jù)一致性依賴于增強半同步 Semi-Sync扁瓢。
- 故障自動切換
借助于配置項 leader-start-command
和 leader-stop-command
調(diào)用腳本完成故障切換详恼,也可以結(jié)合 Consul补君,ZooKeeper 自由擴展引几。
- Xtrabackup 備份調(diào)度集成
| Xenon 工作原理
結(jié)合架構(gòu)圖,可看出 Xenon 就是基于 Raft + Semi-Sync + GTID 實現(xiàn)的高可用挽铁,保證大多數(shù)節(jié)點接收到數(shù)據(jù)伟桅。
而 Raft 基于心跳管理,如果從節(jié)點超時收不到主的心跳叽掘,會嘗試發(fā)起選舉楣铁,若得到超過半數(shù)(非 IDLE 節(jié)點)的選票,則會當選為主節(jié)點更扁。
下面以三節(jié)點(一主兩從)Xenon 集群來簡單說明工作原理盖腕。
{Leader, [GTID:{1,2,3,4,5}]
{Follower1, [GTID:{1,2,3,4,5}]
{Follower2, [GTID:{1,2,3}]
- 當 Leader 不可用時,F(xiàn)ollower1 和 Follower2 立即參與競選成為主節(jié)點浓镜。
- Xenon 校驗 GTID 值較高的 Follower 成為新主節(jié)點溃列,示例中 GTID 值較高的是 Follower1。
- 當 GTID 值最高的 Follower 被選舉成為新主時膛薛,將結(jié)束競選听隐。示例中 Follower1 成為新主節(jié)點后,將會拒絕 Follower2 的選舉哄啄。
- 自動完成主從切換雅任。
| Xenon 企業(yè)級核心特性
-
一主多從架構(gòu),確保金融級強一致性
高可用架構(gòu)大多采用一主兩從的初始節(jié)點架構(gòu)設(shè)計咨跌,并通過 MySQL 5.7 版本中的 Semi-Sync 特性實現(xiàn)數(shù)據(jù)的多副本同步復(fù)制沪么,多個從節(jié)點的設(shè)置將極大的屏蔽掉單點故障帶來的影響,確保至少一個從節(jié)點與主節(jié)點始終保持數(shù)據(jù)的完全一致锌半,提供金融級數(shù)據(jù)強一致性成玫。
-
主副本秒級切換,確保業(yè)務(wù)高可用
節(jié)點之間使用 Raft 協(xié)議進行管理拳喻,當主節(jié)點出現(xiàn)故障不可用時哭当,集群會秒級響應(yīng)并選出新的主節(jié)點(與主節(jié)點數(shù)據(jù)完全同步的從節(jié)點),并立即接管讀寫請求冗澈,確保業(yè)務(wù)的連續(xù)高可用钦勘。這一過程,無需設(shè)置后端集群中各節(jié)點的角色亚亲,一切由系統(tǒng)自動切換彻采。集群中最多可以添加 6 個從節(jié)點腐缤,主節(jié)點可讀可寫,從節(jié)點設(shè)置為只讀肛响。同時岭粤,集群提供兩個 VIP,分別是高可用讀 IP 和高可用寫 IP特笋。讀 IP 可將請求在所有節(jié)點之間進行負載分擔(dān)剃浇,提供讀取性能的同時,也消除了單點故障的影響猎物,提供業(yè)務(wù)可靠性虎囚。寫 IP 則始終指向主節(jié)點(Leader)。
-
系統(tǒng)自動運維蔫磨,優(yōu)化系統(tǒng)空間使用效率
通過對 binlog 日志的保留周期
expire_logs_days
的配置(1~4 天)淘讥,主節(jié)點會定期清理不再使用的 binlog 日志,其他從節(jié)點已復(fù)制完畢堤如,提高系統(tǒng)的空間利用率蒲列。
| Xenon 的優(yōu)勢
相比 MHA,Xenon 的優(yōu)勢如下:
- 多版本內(nèi)核支持
支持 MySQL 5.6搀罢、5.7蝗岖、8.0 內(nèi)核版本。
-
多平臺支持
支持物理機魄揉、虛擬機/云平臺剪侮、容器/ Kubernetes 平臺部署。
-
穩(wěn)定性更好
MySQL 新版本特性兼容洛退。
-
性能更佳
與 GTID瓣俯、MTS(并行復(fù)制) 結(jié)合,并行日志復(fù)制兵怯、并行日志回放彩匕。
-
架構(gòu)更簡單
不需要管理節(jié)點,機器成本更低媒区。
-
數(shù)據(jù)更安全
增強半同步復(fù)制不會降級為異步驼仪,保證數(shù)據(jù)零丟失,不會存在 MHA 在 GTID 模式下丟數(shù)據(jù)的風(fēng)險袜漩。
-
故障修復(fù)全自動
Xenon 對于故障節(jié)點會自動先自我修復(fù)绪爸。
-
節(jié)點恢復(fù)快
配合 Xtrabackup 等可以實現(xiàn)快速恢復(fù)。
操作更簡單宙攻,維護成本更低
-
持續(xù)更新
Xenon 由 RadonDB 數(shù)據(jù)庫開發(fā)團隊持續(xù)維護更新奠货。
相關(guān)參考
https://github.com/radondb/xenon/tree/master/docs
https://www.fatalerrors.org/a/separation-of-mha-atlas-for-mysql-high-availability.html
https://code.google.com/archive/p/mysql-master-ha/
https://dev.mysql.com/doc/refman/5.6/en/replication-gtids-concepts.html