在这篇文章中,我想探索一种与MySQL建立100,000个连接的方法。不限于空闲连接,还有执行查询功能的连接。
你可能会问,使用MySQL的时候真的有必要建立100,000个连接吗?虽然看起来有点过于追求极致,我还是在客户部署的时候看到很多不同的设计方案。有的部署了应用程序连接池,每一个连接池中有100个应用服务和1000个连接。有的应用程序使用了一种很糟糕的技术,“在查询慢时重连或重用”。这有可能会导致雪球效应,并在几秒钟内建立数千个MySQL连接。
所以现在我想设置一个超出预期的目标,看看能否实现。
配置
为此我将使用以下硬件配置:
由packet.net提供的裸机服务器,实例大小:c2.medium.x86
物理内核 @ 2.2 GHz (1 X AMD EPYC 7401P)
内存: 64 GB of ECC RAM
磁盘: INTEL® SSD DC S4500, 480GB
这是一个服务器级的 SATA SSD。
我们将使用到5台主机,下面作出解释,一个用于MySQL服务器的主机,以及四个用于客户端连接的主机。
在服务器上,我将使用带有线程池插件的Percona Server for MySQL 8.0.13-4。这个插件可以支持数千个数据库连接。
初始化服务器设置
网络设置(Ansible格式):
这些是推荐用于10Gb网络和高并发工作负载的典型设置。
systemd限制设置:
还有my.cnf文件中MySQL相关设置: