一 整體架構
二 proxysql層
proxysql+keepalived對外提供vip
1 這里有一點要注意,雖然keepalived有腦裂危險,但是對於向proxysql這種無狀態中間件確實沒什么影響
2 需要維護至少兩份配置文件,保證每個節點的配置文件都唯一
三 mysql層
mysql+mha做故障轉移
四 proxysql故障轉移原理
0 定義好mysql集群寫服務器組合讀服務器組的對應關系
1 proxysql監控讀mysql的read_only值
2 如果發現從庫的 read_only 變為0、主庫變為1,則認為角色互換了,自動改寫 mysql_servers 表里面 hostgroup 關系,達到自動 Failover 效果。
五 優勢
1 MHA不再需要VIP,避免腦裂風險
2 proxysql動態維護mysql_server表
六 整體過程
1 主庫down機,觸發MHA切換
2 MHA切換完成,新主會設置成read_only=0
3 proxysql監控到read_only=0,動態更改mysql_servers(更改原主和新主的hostgroup_id)
4 集群繼續提供服務
5 修復舊主
1 以只讀方式啟動舊主
2 根據MHA日志修復舊主(如果是GTID復制,直接change即可)
6 proxysql可以動態調整權重,減少主庫讀比例
六 注意點
1 當MHA切換后,舊主啟動前一定要設置read_only=1,否則會導致舊主也被proxysql認為主,加入寫組中。
2 當MHA切換后,最好還是調整下權重比例,不會動態進行維護
七 補充
1 cetus和proxysql對比,cetus對於MHA的利用更有優勢