分布式集群架构下的mysql错误 "too many connections"

项目采用微服务和分布式集群部署,新增服务上线后其他服务消息积压。经查看日志,发现是数据库无法写入,原因一是连接空闲超5分钟被服务器释放,连接池未校验有效性;二是数据库服务器端最大连接数设置过小。提醒在分布式架构中要从系统整体考虑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

项目采用微服务,分布式集群的方式进行部署,每个服务有2至3个节点。

问题

新增了一个服务,开了两个节点,发布到线上环境后,过了一段时间,发现其他服务的消息积压了。

原因

经过查看各个相关服务的日志,发现数据库无法写入,日志中首先出现了Communications link failure,The last packet successfully received from the server… 字样,之后半个小时左右出现了 Too many connections ,此时是连接都连接不上。如此,导致了数据无法写入数据库,从而消息会一直积压。
进一步思考,从上一次该连接成功获取数据库服务器返回数据的时间来看,服务器的允许连接的最大空闲时间是5分钟,导致连接空闲5分钟之后被数据库服务器释放,而连接池未校验连接的有效性就分配给了线程使用,从而产生了该错误。
至于too many connections,则是数据库服务器端max_connections设置的太小了。

总结

在分布式集群架构中,考虑事情需要从整个系统考虑,就拿上面说的情况作为例子,我增加了一个服务,该服务的最大数据库连接数为20,如果只从单个服务考虑,那数据库方面就可能被疏忽(该服务集群部署n个节点就需要20*n的数据库连接,这样其他集群服务也需要使用数据库连接时足够吗,数据库是否分配足够呢),不然就会有很可怕的事情出现!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值