当前位置: 首页 > 知识库问答 >
问题:

MongoDB连接计数未在副本集中的节点之间均衡

颛孙越
2023-03-14

我现在正在使用MongoDB Spring Data MongoDB构建一个web应用程序。

此应用程序有一个API,它是一个简单的MongoDB查询:

db.myCollectionName.aggregate([{ "$sample" : { "size" : 100}}, { "$project" : { "myFieldName" : 1, "_id" : 0}}])

我们从myCollectionName和projectmyFieldName中随机挑选了100个文档。这是一个简单的读取请求

总共收集了大约1亿条记录,afak我正确地使用了$sample操作符:

  • $sample是管道的第一阶段

我们的mongoDB集群是一个3节点副本集,一个节点处理写请求,另外两个节点处理读请求。

我正在使用JMeter测试我的应用程序,试图计算应用程序最多可以支持多少TPS

报告显示,当并发数为100时,应用程序的TPS性能最好,达到1000,平均95pct延迟为180ms。工作负载平均分配给两个辅助节点。操作数约为500,每个辅助节点的连接数约为180。

同时,在应用程序方面,工作负载相当低,仅使用了30%的cpu和内存。

接下来,我尝试再添加一个辅助节点,看看TPS是否会线性增加,现在奇怪的事情发生了:

当并发数超过100后,系统的TPS不会线性增加。TPS保持在1000,每个辅助节点只处理400个操作(相同的操作计数)。随着并发数的增加,应用程序的平均95%的可用性也开始下降,从180ms降至~450ms。

同时,我注意到,在每个辅助节点中,连接计数并不是均匀建立的。一个辅助节点建立了300多个连接,而另外两个节点只有180个。此外,当并发数超过150时,在连接更多的节点上开始出现慢速查询。

我可以确认,应用程序端的工作负载相当低,有3个辅助节点,应用程序仍然没有达到负载限制。MongoDB客户端配置的最大连接数是2000,据我所知,应该足够了。

共有1个答案

公良光熙
2023-03-14

回顾https://github.com/mongodb/specifications/blob/master/source/server-selection/server-selection.rst在“服务器选择算法”下。

首先,检查驱动程序看到的每个服务器的延迟。如果需要,使用localThresholdMSURI选项增加窗口。

然后,可能是数据收集不正确,或者是服务器出现问题,因为

此外,当并发数超过150时,在连接更多的节点上开始出现慢速查询。

如果您有一个节点能够维持400个连接但具有相同的工作负载则无法维持

完成此操作后,请注意服务器选择算法中的以下内容:

在随机选择的两台服务器中,选择操作数较低的一台。如果两台服务器的operationCount相同,请在两台服务器之间任意选择。

这应该将查询路由到负载较少的节点。如果节点报告的负载不正确,或者您可能弄错了从哪里读取的负载,这自然不会很好地工作。

 类似资料:
  • 我已经创建了一个mongodb副本集在3虚拟机,manasger1,worker1,worker2.副本集工作正常,我可以登录到服务器: 当我运行nodejs应用程序时,它会连接到副本集。问题是,当我为我的应用程序创建一个容器时,我遇到以下异常,我的容器停止运行,我不能再连接到副本集主副本集,而是连接到次副本集。 我用猫鼬打开了一张发行票据寻求帮助,但他们的解决方案不起作用(他们要求我从ip地址更

  • 问题内容: 我为城市建立了邻接矩阵,并在它们之间建立了联系。例如AB,BC,CD。现在,我想知道是否可以计算未连接的城市之间的距离。是否可以计算未连接节点之间的矩阵距离并找到路径? 城市班 主要方法 这是我运行main方法时的输出,我认为一切都很好。 现在我想计算从A到D的距离,但我不知道该怎么做。我将不胜感激。谢谢! 问题答案: 要在加权图中找到最短路径(路线的每个部分都有不同的权重),可以使用

  • 我的EKS集群变得不健康,因为所有豆荚都有“容器创建”错误,这可能与CNI问题有关。 在版本1.5.5中,conflist文件的位置更改为/etc/cni/10-aws.conflist,但节点仍然处于“notready”状态。 我的EKS版本是1.14,平台版本是EKS.2。 Ipamd日志: 有人对这个问题有什么线索吗?

  • 我试图使用node.js与mongoDB和以下教程在http://howtonode.org/express-mongodb 打开连接的代码是 但是我看不到任何连接被关闭。但当我看到mongo控制台上的日志时,我可以看到一些连接在一段时间后打开和关闭。 连接会自动关闭吗?当大量客户端尝试访问服务器时会有问题吗?应该在哪里关闭连接? 谢谢 图措

  • 我正在尝试将NodeJS连接到MySQL数据库,该数据库根据MySQL工作台启动并运行。但是,通常的创建连接代码模板不起作用。 你知道为什么会这样吗? 我尝试在part以查看它是否实际连接。但是终端窗口仍然会出现相同的错误: 我们认为它连接正常还是不连接? 我只想连接,这样我就可以学习如何编写代码,将每首歌的歌词放入Watson Tone analyzer中,并将结果输出到MySQL中的一个新表中

  • 王国连通性 对查尔斯国王来说,这是繁荣的一年,他正在迅速扩大他的王国。一个美丽的新王国最近已经建成,在这个王国里有许多城市由多条单向道路连接。两个城市可能由多条道路直接连接,这是为了确保高度连接。 在这个新王国中,查尔斯国王将其中一个城市作为他的金融首都,另一个作为战争首都,他希望这两个首都之间有高度的连通性。一对城市的连通性,比如城市A和城市B,被定义为从城市A到城市B的不同路径的数量。如果可能