1、背景
-
Orchestrator默认仅提供MySQL主从复制的扩展管理。在发生故障转移时,会重新组织扩展,选出新主库并指定其他从库连接到它。
-
但Orch自身不会进行任何DNS更改或VIP漂移。切换后,应用程序可能连接到错误的数据库。那么是否可以按照MHA+VIP类似的方式,来使用Orchestrator呢?
-
建议开启无损半同步(rpl_semi_sync_master_wait_point=AFTER_SYNC)。
2、Hooks脚本
Orch支持hooks——在恢复过程中调用的外部脚本。这些是通过shell调用的命令数组,尤其是bash。
OnFailureDetectionProcesses:当检测故障转移现象时执行(在决定是否进行故障转移之前)。
PreGracefulTakeoverProcesses:graceful master takeover时执行,在master变成read-only之前立即执行。
PreFailoverProcesses:在orch进行恢复操作之前立即执行。在这个过程中任何的失败(非零退出代码)都会终止恢复。提示:这使得有机会根据系统的某些内部状态中止恢复。
PostMasterFailoverProcesses:在主恢复成功结束时执行
PostIntermediateMasterFailoverProcesses:在中间主恢复成功结束时执行
PostFailoverProcesses:在任何成功的恢复结束时执行(包括以及补充到PostMasterFailoverProcesses、PostIntermediateMasterFailoverProcesses)
PostUnsuccessfulFailoverProcesses:在任何不成功的恢复结束时执行
PostGracefulTakeoverProcesses:在有计划地、优雅地主库切换的时候会执行,在旧主库位于新主库之后执行
通过这些Hooks,我们可以根据当前的架构来定义、调用自己的外部脚本,让应用找到新的Master。
3、元数据信息表
Orch切换时,生产环境不可能把所有ip端口信息写到脚本中,建议维护一套生产环境的元数据信息库。
建表语句:
CREATE TABLE `vip_info_table` (
`id` int NOT NULL AUTO_INCREMENT,
`ip` varchar(255) COLLATE utf8_bin NOT NULL,
`port` int NOT NULL,
`vip` varchar(255) COLLATE utf8_bin NOT NULL,
`interface` varchar(255) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
);
4、VIP切换配置
4.1 hook脚本配置
脚本名 | 说明 |
---|---|
orch_hook.py | 使用python2.7环境,依赖元数据信息库获取ip端口等信息 |
orch_vip.sh | 通过执行ip addr del/add命令卸载/添加vip |
将脚本复制到/usr/local/orchestrator目录下,并赋予执行权限:
chmod 777 orch_hook.py
chmod 777 orch_vip.sh
修改/etc/orchestrator.conf.json配置文件:
## 修改后如下
"PostFailoverProcesses": [
"echo '(for all types) Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Successor: {successorHost}:{successorPort}' >> /tmp/recovery.log",
"python /usr/local/orchestrator/orch_hook.py {failedHost} {failedPo