记一次线上MySQL+keepalive主从切换导致的断联

 

告警/现象

我们的一个程序在一次MySQL 发生主从切换后直接与MySQL失去连接,且无法自恢复,只能重启程序。

排查

  • 我们使用的是Springboot默认的连接池HiKari,经排查所使用的版本没有出现致命bug。
  • 导火索是数据库发生主从切换,且随时间推进,没有任何恢复连接的迹象,netstat监控表明程序并没有尝试重新连接数据库。
  • 程序日志所报错误没有明显特征,均是业务查询超时报出来的错误。

最终

该问题由数据库发生主从切换后,连接池没有及时丢弃原有连接导致。

数据库连接缺少心跳机制,主从切换后,程序仍认为连接是正常的,没有新建新的连接。

解决的方法是在连接参数上设置connectTimeout和socketTimeout参数。可能会对原本就需要长时间的查询造成影响。

应有更好的方法淘汰这些僵尸连接,目前暂未发现。

posted @ 2024-06-12 22:10  Jackie_JK  阅读(29)  评论(0编辑  收藏  举报