MongoDB副本节点变成";(不可达/健康)"



在我当前的项目中,我们有3个节点的MongoDB副本集设置(1个主副本集和2个从副本集(,用于生产环境中的文档管理服务。由于安装程序已存在,因此运行正常。有一个REST API端点,它将文档上传到mongoDB。由于我们需要使用mongodb进行一些性能测试,我通过JMeter启动了负载测试,并创建了一个测试计划,通过模拟5个用户将数据直接插入mongodb。

所有三个节点都已启动并运行,短时间测试没有任何问题。但是当长时间运行负载测试时,一个节点变成";(不可达/健康(">并在其他两个节点中选择了新的PRIMARY,并在没有任何问题的情况下进行负载测试运行,并使用现有的两个节点插入数据。

在开发环境中,通过删除问题节点并将其添加为新节点,确实正确地同步了数据,并将其恢复为辅助节点。但由于这些相同的配置存在于生产环境中,我们真的需要知道是什么导致一个节点变成";(不可达/健康(";。

请注意,在当前系统中,我们没有启用安全性,所有三个节点都在同一台服务器上运行,端口号不同,配置详细信息如下。

节点mongodb01

mongod.conf-对于具有自己的dbpath、日志路径和端口的其他两个节点将是相同的

会员详细信息状态

enter "members" : [
{
"_id" : 2,
"name" : "<host>:27018",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"optime" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"optimeDurable" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2021-11-09T05:24:39.870Z"),
"lastHeartbeatRecv" : ISODate("2021-11-09T03:07:38.381Z"),
"pingMs" : NumberLong(300),
"lastHeartbeatMessage" : "Error connecting to <host>:27018 (10.103.58.45:27018) :: caused by :: Connection refused",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 21,
"configTerm" : 106
},
{
"_id" : 7,
"name" : "<host>:27019",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 498947,
"optime" : {
"ts" : Timestamp(1636435479, 10),
"t" : NumberLong(106)
},
"optimeDate" : ISODate("2021-11-09T05:24:39Z"),
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1636332442, 1),
"electionDate" : ISODate("2021-11-08T00:47:22Z"),
"configVersion" : 21,
"configTerm" : 106,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 8,
"name" : "<host>:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 99236,
"optime" : {
"ts" : Timestamp(1636435479, 5),
"t" : NumberLong(106)
},
"optimeDurable" : {
"ts" : Timestamp(1636435479, 5),
"t" : NumberLong(106)
},
"optimeDate" : ISODate("2021-11-09T05:24:39Z"),
"optimeDurableDate" : ISODate("2021-11-09T05:24:39Z"),
"lastHeartbeat" : ISODate("2021-11-09T05:24:39.371Z"),
"lastHeartbeatRecv" : ISODate("2021-11-09T05:24:39.371Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "<host>:27019",
"syncSourceId" : 7,
"infoMessage" : "",
"configVersion" : 21,
"configTerm" : 106
}
],here

all three nodes runs in the same server-非常有趣的设置,您想在这里实现什么?整个复制点和主/从设置都绕过了单点故障限制,在您的情况下,您没有得到任何好处,只是消耗了底层操作系统资源,一个经过适当调整和优化的实例将更快地工作

查看:

  • MongoDB日志文件,尤其是失败实例
  • 操作系统日志文件
  • 操作系统性能指标(即CPU、RAM、磁盘、网络使用率等(,可以使用JMeter-PerfMon插件来完成,因为您的某个Mongo实例可能开始消耗大量资源,并已被OOMKiller终止

最新更新