一 整体架构
二 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的利用更有优势