我有一个包含三个mongos进程和两个副本集的MongoDB集群(2.6.3),没有启用分片。
特别是,我有7个主机(都是Ubuntu Server 14.04):
此处的客户端应用程序是Zato Cluster,每个服务器中运行4个gunicorn worker,每个worker使用两个PyMongo.MongoClient
实例访问MongoDB。
这些MongoClient
对象的创建如下:
MongoClient(mongo_hosts, read_preference=ReadPreference.SECONDARY_PREFERRED, w=0, max_pool_size=25)
MongoClient(mongo_hosts, read_preference=ReadPreference.SECONDARY_PREFERRED, w=0, max_pool_size=10)
这个mongo_hosts在所有服务器中都是'host1:27017,host2:27017,host2:27017'
。
因此,我总共有12个MongoClient
个实例max_pool_size=25
(每个服务器4个),另外12个max_pool_size=10
个实例(每个服务器也有4个)
我的问题是:
当Zato集群启动并开始接收请求时(每个最多10 rq / sec,使用简单的循环法进行平衡),会创建一堆新连接,然后大约15-20个连接保持永久打开状态在每个mongos。
然而,在一些随机点并且没有明显原因的情况下,在所有三个mongos
中突然同时丢失了几个连接,然后连接总数不断变化,直到它在某些连接后再次稳定分钟(从5到10)。
虽然这种情况发生了,但即使我在MongoDB日志中看不到慢速查询(mongos和mongod都没有),平台的性能也会大幅降低。
我一直在隔离这个问题,并且已经尝试过:
'localhost:27017
'在每个MongoClient中查看问题是否只在一个客户端中。问题仍然存在,并且它同时影响三个mongos
,所以它看起来像是服务器端的东西。所以,最后的问题是:
MongoClient
允许定义max_pool_size
,但我找不到对min_pool_size
的任何引用。有可能这样定义吗?也许将连接数量设为静态可以解决我的性能问题。关于MongoDB版本的注意事项:我目前正在运行MongoDB 2.6.3但是在从2.6.1升级之前我已经遇到过这个问题,所以在上一版本中没有介绍过。