0

我有一个标准的 mongoDB 副本集,有 3 个成员(在 EC2 中)一切正常,但有时主节点的 CPU > 100。在我看来,这个实例不健康,所以副本集应该选择另一个主节点。但是不会发生。

我想 mongo 仅在无法通过网络访问时才考虑不健康,因为如果我关闭实例,则选举工作正常。

使用 Cloudwatch,我可以在触发 CPU 警报时设置一个事件(停止/重启实例),但我认为这更像是一种解决方法而不是解决方案。

那么,当 mongodb 考虑成员不健康时呢?

4

1 回答 1

1

这有点复杂,但通常副本集的成员在停止响应副本集 heartbeats时会被认为是不健康的。这些信息每 2 秒发送一次,预计会在 10 秒内得到响应(参考)。

心跳是故意轻量级的,不需要大量资源来制定回复,因此即使是繁忙的系统也可以保持健康状态。

退一步说,超过 100 的 CPU 不一定不健康,尤其是在现代多核系统上。通常,通过您是否看到缓慢的查询或其他类型的性能下降来衡量数据库实例的健康状况是一个更好的主意。尽一切办法追踪 CPU 峰值的来源并尝试解决/减轻它们,但通常 CPU 利用率不会成为数据库性能的一个很好的晴雨表(当然,除非所有内核都处于 100% 并且数据库结束急需 CPU)。

最后,没有必要关闭 MongoDB 实例或使其不健康地选出一个新的主节点,而只需rs.stepDown()在主节点上发出命令——它将标记自己不符合选举条件,并且将选择一个新的主节点。

于 2014-10-20T15:50:01.770 回答