1. 问题现象
应用连接mysqlrouter报错:连接到router的连接超过了router配置
2. 问题排查
2.1 版本说明
mysql:8.0.39
mysqlrouter:8.0.39
2.2 架构说明
2.3 检查router日志
mysql router 参数文件未配置max_total_connections,该参数8.0.27增加,如未配置则使用默认512,导致router实际生效连接数比预期小很多,不符合应用预先配置的连接数产生了报错;
3. 问题原因
- 未配置全局参数
max_total_connections
-
该参数在 MySQL Router 8.0.27 版本新增,用以设置Router实例的全局总连接数上限。
-
默认值为512,若未显式配置,当应用连接数超过此阈值时即触发"Too many connections"错误。
- 局部路由配置
max_connections
与全局参数冲突
-
文档日志中显示类似警告:
WARNING: [routing:xxx] max_connections(10240) > max_total_connections(512). no effect.
复制 -
单独在某个路由配置(如
[routing:读写组]
)中设置的max_connections
高于全局限制时,参数会被全局限制覆盖而导致实际生效值低于预期。
4. 解决方案
- 新增全局连接限制配置
在MySQL Router的配置文件(如 mysqlrouter.conf )的 [DEFAULT] 段添加:
[DEFAULT] # 全局总连接数 = 应用连接数预估峰值 + 冗余 max_total_connections = 10240
复制
- 校准路由组配置
确保每个路由组(如 [routing:读写组])的 max_connections 参数不高于 max_total_connections:
[routing:读写组] bind_address = 0.0.0.0:6446 destinations = metadata-cache://mycluster/default?role=PRIMARY routing_strategy = round-robin # 单路由允许的最大连接数 ≤ 全局总连接数 max_connections = 5000
复制
- 重启Router生效
mysqlrouter -c /path/to/mysqlrouter.conf --user=mysqlrouter --reload
复制
5. 注意事项
- 系统资源限制
- 从 MySQL Router 8.0.22 开始,理论支持5万+连接,但实际受限于:
-
操作系统的 poll() 或 epoll 文件描述符上限(需调整/etc/security/limits.conf)。
-
CPU核心数(建议 [IO] threads 配置为物理核数的2倍)。
-
- 全局与局部优先级
- max_total_connections(全局) > max_connections(路由级)
即使某路由设定了高连接数,全局限制仍会生效,需同步调整。
- 生产环境验证
部署前通过压力测试工具(如 sysbench )模拟真实负载,观察日志是否有连接溢出警告:
tail -f /var/log/mysqlrouter/mysqlrouter.log | grep "max_total_connections"
复制
最后修改时间:2025-03-25 09:56:00
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。