MHA在使用过程中,遇到过哪些坑

背景介绍

上回介绍了黑枸杞少年月月如何用Python写出DB平台的过程。

这回给大家介绍一个乙方同学顺子,顺子因被外派长期驻点外地。

与家人聚少离多,这样他也有了很多的时间用来研究技术。

例如:如何优雅吃羊腿;怎么样可以让本地的同学请吃羊腿;吃羊腿的步骤;等等这次他将用自己血泪教训带我们趟过MHA的坑,且看:MHA坑知多少!

MHA 简介

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高

MHA坑知多少

2.1、 masterha_check_repl(1130,1045)

故障原因:

此账号没有权限登录到对应的机器上

处理方法:

为对应的用户授权即可

2.2、masterha_check_repl(Can't exec "mysqlbinlog")

故障原因:

从当前的环境变量中找不到 mysqlbinlog 命令

解决方法:

将 mysqlbinlog 的路径添加到 环境变量中

2.3、 masterha_check_repl(rep no exist or does not have REPLICATIONSLAVE privilege)

故障原因

缺少 REPLICATION SLAVE 权限

解决方法:

为同步账号添加 REPLICATION SLAVE 权限即可, 注意,是所有节点都添加, 保证主从切换后都可以正常使用。

2.4、event_scheduler

故障原因:

这个是由于部属的 mha 版本没有跟上 数据库的版本. 在检测长连接时, 由于系统新增加了event_scheduler 功能,且属于打开的状态,那么此用户会一直存在, mha 检测时将其列为长连接,所以出现上面错误

解决方法:

临时解决方法: 禁用 event_scheduler, set global event_scheduler = 0;

长久之计,按下面方式修改源码:

2.5、 mha 管理 vip, 节点之间的网卡名不一样,切换会失败。

解决方法:

* 改网卡名

* 改切换脚本

2.6、 mha 管理 vip, ssh 默认端口非22

切换会失败

解决方法:

* 改默认端口

* 改切换脚本

注: 在线切换 和 故障切换脚本QQ群中提供 群号:748415432

2.7、 使用 GTID 时切换的坑

gtid_mode=1; auto_position=0 模式, 配置 binlog server 选项

虽然打开了 GTID, 但同步依旧使用的是log_file + position 模式同步数据, 切换时依旧自动转成 auto_position=1 模式, 转换后很有可能出来 1236 同步错误. 下面两段代码解释了为什么会依旧使用 auto_position=1 模式 .

2.8、 gtid_mode=1; auto_position=0模式,

配置 binlog server 选项, 同时配置了 use_gtid_auto_pos=0

看似解决了上面的问题, 但引入了一个最大的问题, 不补尝原主实例的差异数据了, 这就是说, 原主库任何情况下出现异常都属于机器挂的情况‘

2.9、 gtid_mode=1; auto_position=1模式,

没有配置 binlog server 选项, 依旧补不了日志。

2.7 ~ 2.9 解决方案:

开启 gitd 后, 最好的方案就是 基于 gtid 同步, 且使用 auto_position=1, 同时配置 binlog server 选项。

2.10、如果新实例,则需要执行一个事务,才可以被识别为开启 了 GTID 模式

[server default]

# 这边是 连接 MySQL 的账号与密码, 如果端口发生改变, 也要写上相应的端口, 默认为 330

port=3306

user=rootpassword=123456# 这边是连接机器的 ssh 用户,密码使用互信方式实现

ssh_user=root# 这边复制账号

repl_user=repl
repl_password=123456

master_binlog_dir= /data/mysql/mysqldata3306/binlog
master_ip_failover_script= /etc/mha/scripts/
master_ip_failover_new
master_ip_online_change_script= /etc/mha/scripts/master_online_change_new
manager_workdir=/etc/mha/app1manager_log=/etc/mha/log/mha/manager.log
[server1]

hostname=192.168.1.20

candidate_master=1

master_binlog_dir= /data/mysql/mysqldata3306/binlog
[server2]

hostname=192.168.1.2
1candidate_master=1

master_binlog_dir= /data/mysql/mysqldata3306/binlog
[server3]

hostname=192.168.1.22

candidate_master=1

master_binlog_dir= /data/mysql/mysqldata3306/binlog
[server4]

hostname=192.168.1.23

candidate_master=1

master_binlog_dir= /data/mysql/mysqldata3306/binlog
[binlog1]

hostname=192.168.1.20

[binlog2]

hostname=192.168.1.21

[binlog3]

hostname=192.168.1.22

[binlog4]

hostname=192.168.1.23

结尾

想要完美的避开上面的坑, 建议:

* 使用高版本的 MHA, 可以解决上面切换的坑.

* 如果打开了 GTID 模式,则使用 auto_position=1 同步模式,同时 MHA 的配置文件中 配置[binlog1] 选项, 地址写上原主库地址就好, 不需要真实配置一个 binlog server 服务器

原文发布于微信公众号 - 3306pai(pai3306)

原文发表时间:2018-09-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微服务生态

论代码级性能优化变迁之路(一)

大家好,很久没有和大家一起讨论技术了,那么今天我将和大家一起探讨我负责的某项目的性能变迁之路。

8920
来自专栏软件测试经验与教训

看图说话:持久式XSS(跨站)漏洞示例

读书与实践是获取知识的主要渠道,学习的权力只掌握在每个人自己手中,让学习成为一种生活的习惯,这比任何名牌大学的校徽重要得多!

26320
来自专栏用户2442861的专栏

套接字中SO_REUSEPORT和SO_REUSEADDR的区别

http://blog.csdn.net/Yaokai_AssultMaster/article/details/68951150

17720
来自专栏张善友的专栏

通过企业分布式缓存共享运行时数据

许多企业都结合使用 Microsoft .NET Framework 和 Java 应用程序,尤其是那些出于各种考虑不能只依赖于单一技术的大中型企业。 通常,企...

25580
来自专栏美团技术团队

LsLoader——通用移动端Web App离线化方案

背景 由于JavaScript(以下简称JS)语言的特性,前端作用域拆分一直是前端开发中的首要关卡。从简单的全局变量分配,到RequireJS实现的AMD模块方...

470170
来自专栏linux驱动个人学习

Android分区

实现手机必需的通信功能,大家通常所的刷RADIO就是刷写modem分区,在所有适配的ROM中这部分是不动,否则会造成通话不稳定

16020
来自专栏FreeBuf

Kali Linux渗透基础知识整理(四):维持访问

*本文原创作者:sysorem 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限。使用木马程序、后门程序和rootkit来达到这一目的。...

38580
来自专栏cs

wechat作弊

菜鸟一个最多跳60多分,看到 微信小游戏跳一跳外挂教程(安卓版)的教程,自己尝试了一下,ubuntu17环境,python2,python3公存在,开始失败了,...

37990
来自专栏FreeBuf

文件监控程序V2.0改进版(网站防挂马好手)

前言 技多不压身,多掌握几种不同的编程语言,不但有助于开拓我们的视野,还可以让我们在工作时,自己写一些小程序来帮我们减少工作量。 前段时间给一个客户维护服务器,...

62750
来自专栏编程之旅

Liunx的文件权限

之前讲过为了统一开发环境生产环境以及更换开发机器的情况,我把环境统一由Vagrant部署在Linux的虚拟机中,但是由于我对Linux系统没有系统的学习过,对于...

11910

扫码关注云+社区

领取腾讯云代金券