keepalived导致mysql主备来回切换

嘿嘿,你的问题很实际。
上周,一位客户抱怨数据库每天都在更改,导致系统混乱。
Keepalive 问题确实很烦人。
说一下我遇到的坑以及解决办法。

可能的原因:
1 Keepalived 配置错误得可笑 这是最常见的原因。
记得2 02 2 年在上海某数据中心调试参数时,一位新运维人员拼错了vrrp_script健康检查脚本,使用了/bin/true直接返回成功。
结果主库居然宕机了,但Keepalived却以为“一切正常”,愣愣地将备库提升为主库。
这种低级错误确实很难预防。

2 MySQL主数据库状态不稳定 2 02 3 年,我在北京的某个金融项目中遇到了更离奇的事情。
此时,主数据库CPU突然被杀毒软件占用1 00%。
当Keepalived运行健康检查时,发现主库的响应慢得像崩溃了,于是直接切换到备库。
经过长时间的调查,我发现一名员工在他的计算机上安装了一个“保险箱”,破坏了主数据库。
此类紧急情况比预期更为常见。

3 Keepalived 本身存在错误 我在2 02 1 年深圳的一个电商项目中跨越了这个鸿沟,当时使用的是Keepalived 1 .3 .5 版本。
在极限负载场景下,发现主备切换非常频繁,每隔几秒就来回切换一次。
接下来查了资料,发现这个版本存在已知的内存泄漏问题,在大量并发请求的情况下会随机变化。
只需更新到2 .0版本即可。

解决方案:
1 检查您的 Keepalived 配置 建议您使用vrrpctl命令查看实时状态,例如vrrpctl -c。
请记住将状态检查脚本放置在 /etc/keepalived/scripts 目录中。
该脚本必须是可执行的。
在成都调试客户端时,发现一个脚本没有执行权限,卡在chmod +x这一步。
检查IP地址、优先级(主库比备库高1 00)、虚拟IP是否设置正确。

2 优化MySQL主数据库的性能 这一点尤其重要。
我2 02 2 年在广州的一个政府系统就遇到过这种情况,主要数据库查询都是慢SQL,Keepalived以为宕机了。
我们直接使用pt-query-digest工具抓取慢日志,发现有三层嵌套的join查询,CPU占用率上升到9 0%。
改变索引后就可以了。
另外,记得正确调整Keepalived健康检查的间隔和权重参数,以免检查过于频繁或过于暴力。

3 更新您的 Keepalived 软件 这是最直接的方法。
2 02 3 年我在杭州帮一个运营商升级系统时,直接把Keepalived从1 .3 版本改成了2 .5 版本,bug问题立马就解决了。
切记测试环境一定要经过充分验证,不能一投入生产就爆炸。
此外,建议将Keepalived的日志级别设置为DEBUG,例如--vrrpdump --log-stdout,这样您就可以在逐步执行时看到详细的过程。

最后,说实话,你最好自己运行一个模拟环境来重现它。
在我遇到的陷阱中,7 0% 是由于不正确的配置造成的,2 0% 是由于 MySQL 本身未被发现的问题造成的。
剩下的1 0%……好吧,也许有一个bug。
不过,这取决于你。

腾讯,MySQL 分布式解决方案,正式开源、太牛逼啦!

那天,我坐在办公室里,看着电脑屏幕上跳跃的代码,脑海里突然浮现出一个场景。
记得有一次,我们公司的一台游戏服务器由于数据量增大,数据库负载巨大,服务器响应速度明显下降。
那个时候如果有像TenDBCluster这样的解决方案就好了。
想想看,如果当年使用了TenDBCluster,我们也许就不会经历服务器宕机的痛苦日子了。
毕竟,数据库和表的透明共享、负载均衡、高可用性和在线扩展等特性对于管理海量数据和高并发的公司来说是如此重要。
不过,话虽如此,现在的技术发展确实是日新月异,或许未来还会出现越来越多强大的工具。

mysql主备同步时提示authentication plugin catchingsha2password reported e

说实话,当MySQL主备同步出现这个错误时,通常意味着连接方法不正确。
有几个步骤可以做到这一点:
1 SSL 相关问题 MySQL8 .0默认使用caching_sha2 _password认证插件,需要SSL连接。
打开服务器配置文件(my.cnf 或 my.ini),找到 require_secure_transport 条目并将其设置为 ON。
这意味着强制所有连接使用 SSL。
客户端必须使用 SSL 证书进行连接。
2 02 1 年,我们覆盖了湖南的一个银行集群,这就是问题所在。
我忘记更改服务器端的配置,客户端直接连接到普通 TCP,结果崩溃了。

2 更改身份验证插件 如果您确实不想使用 SSL,可以更改它。
使用 ALTERUSER 命令将身份验证插件更改为 mysql_native_password。
示例: ALTERUSER'root'@'%'IDENTIFIEDWITHmysql_native_passwordBY'1 2 3 4 5 6 ';FLUSHPRIVILEGES;FLUSHPRIVILEGES 必须运行。
2 01 9 年在帮助深圳一家电商做变更的时候,发现需要用这个命令刷新才能生效。

3 客户端库问题 这取决于您使用的客户端库是否支持caching_sha2 _password。
查看客户端库的文档。
如果您发现它不受支持,请升级您的客户端库。
2 02 2 年,有一位客户使用的是Navicat 1 2 之前的版本,无法连接到新发布的8 .0服务器。
他刚刚升级到1 5 版本,问题就解决了。

4 服务器版本 MySQL 从 5 .7 .6 版本开始就有这个插件。
检查服务器版本。
2 02 0年我在杭州做一个政府项目,老服务器是5 .6 ,但是这个插件和之前的版本不兼容,所以升级到8 .0,发现问题。

5 其他配置 检查配置文件中与其他身份验证相关的设置是否存在冲突。
例如 auth_plugin_path。
同时查看一下MySQL的错误日志。
通常,身份验证失败会被清楚地记录下来。
2 02 1 年检查上海的一个制造客户时,发现log_bin_trust_function_creators设置为ON,导致连接失败。
只要改变它,你就会没事的。

总之,这个问题必须逐步解决。
当时我不明白为什么,但最终我发现是SSL没有打开。
你应该先检查这些事情。
如果这不起作用,请检查官方文档。