Mysql_MHA_Docker 实现主从及高可用

Mysql_MHA实现主从及高可用

该 Mysql 主从及高可用框架及其中使用的脚本仅供初期测试使用,暂未考虑生产模式使用场景。

使用资源

1,Mysql_MHA

MHA(Master High Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,在 MySQL 故障切换过程中,MHA 能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA 能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

2,mha4mysql-manager及mha4mysql-node

官方文档:地址

3,breeze2/mha4mysql-manager:0.57镜像

Manager工具包主要包括以下几个工具:

masterha_check_ssh              检查MHA的SSH配置状况
masterha_check_repl             检查MySQL复制状况
masterha_manger                 启动MHA
masterha_check_status           检测当前MHA运行状态
masterha_master_monitor         检测master是否宕机
masterha_master_switch          控制故障转移(自动或者手动)
masterha_conf_host              添加或删除配置的server信息

4,breeze2/mha4mysql-node:0.57镜像

Node 工具包(这些工具通常由 MHA Manager 的脚本触发,无需人为操作)主要包括以下几个工具:

save_binary_logs                保存和复制master的二进制日志
apply_diff_relay_logs           识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog              去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs                清除中继日志(不会阻塞SQL线程)

5,docker与docker-compose

使用方法

Linux 系统下:

1,切换 docker-compose.yml 所在目录

$ cd mhsql-mha-docker

2,启动容器

# docker-compose up -d

3,启动各容器sshd服务并将生成的公钥写入其他容器 /root/.ssh/authorized_keys 文件

# sh ./scripts/ssh_start.sh
# sh ./scripts/ssh_share.sh

4,检查 MHA 中 ssh 连接情况

# sh ./scripts/mha_check_ssh.sh

或者进入容器 mha_manager 中

# docker exec -it mha_manager bash
(容器中)
# masterha_check_ssh --conf=/etc/mha/app1.conf

5,配置 Mysql 数据库主从[ master(主库),backup(备用主库),slave(从库)]

# sh ./scripts/mysql_set_mbs.sh

6,检查 MHA 中 repl 情况

# sh ./scripts/mha_check_repl.sh

或者进入容器 mha_manager 中

# docker exec -it mha_manager bash
(容器中)
# masterha_check_repl --conf=/etc/mha/app1.conf

7,启动 MHA Manager

sh ./scripts/mha_start_manager.sh

或者进入容器 mha_manager 中

# docker exec -it mha_manager bash
(容器中)
# masterha_manager --conf=/etc/mha/app1.conf

未来拓展

本文档解决的是 Mysql 原官方社区版的主从及高可用问题。后续可以采用 MHA + maxscale 的方式,该方案能以最小的代价对现有系统进行变更,进一步提高系统的可用性和稳定性。且 maxscale 与 MHA 兼容性好。

另外通过 MHA + keepalived 方式也可进一步提升可用性。

问题处理

Slave failed to initialize relay log info structure from the repository

解决方法:(该脚本待修改,仅供测试使用)

# sh ./script/origin_clear.sh

ssh: connect to host 10.5.0.10 port 22: No route to host

解决方法:

10.5.0.10容器处在关闭状态

Got Error so couldn’t continue failover from here

解决方法:

查看 MHA 日志确认具体原因,可能为 ssh 无法访问,MHA_Manager 容器中关键脚本缺失等

你可能感兴趣的:(数据库)