又一次现场同时反馈,现场项目中的组件报错
{
"error": "Error 9001: Max connect timeout reached while reaching hostgroup 10 after 10000ms",
"code": 2,
"details"" []
}
网上查了下SQL 9001的错误,众说纷纭,有几个比较实用的解决办法,但是可能无法应用在生产环境。
- 重启Proxy
- 单节点运行Proxy
- Proxy没有加载MGT节点,需要重新
load mysql servers to runtime;
为什么会出现 9001 错误?
如果 mysql_servers.max_connections 达到最大,一些连接一直等待直到达到 mysql-connect_timeout_server_max ,然后proxysql回抛出 SQL 9001 错误。
因为整个平台中的MySQL部署方式是 [MariaDB Galera Cluster + Proxysql] 来实现的,看了下mysql和proxy的日志,发现。
排查了MySQL的最大连接数限制,发现MySQL的最大连接数是1000
MariaDB [mysql]> SHOW VARIABLES LIKE 'max_connections';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| max_connections | 1000 |
+-------------------+-------+
1 row in set (0.001 sec)
Proxy配置的也是1000,并且MySQL分配给该服务的用户没有限制用户连接数
最后问了下infra的同事,了解到mysql配置中限制了exporter用户(负责监控的)连接数,需要修改下mysql对于监控用户的限制。
具体是修改MySQL user表中的数据
# 设置为0表示
Update mysql.user SET max_user_connections=0 WHERE User = 'xxx';