# MySQL HA

## 1 名词说明

#### Switchover, Failover和Failback

当一个系统宕掉之后，手动的切换到冗余或者备份系统，这个过程称之为 Switchover。

如果是自动切换，不需要人工干预，那么称之为 Failover。

> When a manual process is used to switch from one system to a redundant or standby system in case of a failure, we are talking about switchover. Automatic switchover, without human intervention, is called failover.

原系统恢复之后，从备份系统切换回去的过程称之为Failback。

## 2 常见方案

| 组件类型        | GitHub                                   | XDB                           |
| ----------- | ---------------------------------------- | ----------------------------- |
| 负载均衡        | load blance                              | dbproxy                       |
| 配置中心        | consul（一个KV存储，K是cluster\_id, V是master是谁） | zonemaster + zookeeper        |
| 配置推送        | consul的钩子脚本                              | xagent-operate/config\_update |
| 故障感知        | orchestrator 集中式向实例拉取                    | xagent 本地感知后通过 zk 协调相互通信      |
| 切换后拓扑变更     | orchestrator 的钩子脚本联动consul               | xagent 写 zk 联动配置中心            |
| 选leader策略   | orchestrator多实例部署，并使用raft协议保证只有leader在切  | 依赖zookeeper进行选主               |
| 拓扑信息backend | mysql/sqlite                             | zookeeper                     |

## 3 开源方案

* <https://github.com/mysql/mysql-operator>&#x20;
* [https://github.com/radondb/xenon](https://github.com/radondb/xenon?tab=readme-ov-file) (raft)
* <https://github.com/yandex/mysync> (依赖 zk or etcd)
* <https://github.com/percona/orchestrator>
* <https://github.com/signal18/replication-manager>

<br>

<br>
