mongodb - MongoError:在副本集中找不到主节点
问题描述
我有 2 个应用程序服务器,它们连接到一个副本集(Primary、Secondary 和 Arbitrer)。
我面临的问题是
[ 'MongoError: no primary found in replicaset',
' at ../server/node_modules/mongodb-core/lib/topologies/replset.js:524:28',
' at null.<anonymous> (../server/node_modules/mongodb-core/lib/topologies/replset.js:303:24)',
' at g (events.js:260:16)',
' at emitOne (events.js:77:13)',
' at emit (events.js:169:7)',
' at null.<anonymous> (../server/node_modules/mongodb-core/lib/topologies/server.js:326:21)',
' at emitOne (events.js:77:13)',
' at emit (events.js:169:7)',
' at null.<anonymous> (../server/node_modules/mongodb-core/lib/connection/pool.js:270:12)',
' at g (events.js:260:16)',
' at emitTwo (events.js:87:13)',
' at emit (events.js:172:7)',
' at Socket.<anonymous> (../server/node_modules/mongodb-core/lib/connection/connection.js:175:49)',
' at Socket.g (events.js:260:16)',
' at emitOne (events.js:77:13)',
' at Socket.emit (events.js:169:7)',
' at connectErrorNT (net.js:996:8)',
' at nextTickCallbackWith2Args (node.js:442:9)',
' at process._tickCallback (node.js:356:17)' ]
应用程序上的 ReplicaSet 配置:
"mongodb" : {
"replicaset": {
"db" : "test",
"user" : "admin",
"password" : "*********",
"name":"rs1",
"replicas": [{"host":"App1Box.dmz.mytest.com.au","port":27017}, {"host":"App2Box.dmz.mytest.com.au","port":27018}]
}
rs.status() 输出
rs1:PRIMARY> rs.status()
{
"set" : "rs1",
"date" : ISODate("2018-05-17T03:50:01Z"),
"myState" : 1,
"members" : [
{
"_id" : 2,
"name" : "App3Box:27018",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 7180,
"lastHeartbeat" : ISODate("2018-05-17T03:50:00Z"),
"lastHeartbeatRecv" : ISODate("2018-05-17T03:50:00Z"),
"pingMs" : 0
},
{
"_id" : 3,
"name" : "App2Box:27018",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 7528,
"optime" : Timestamp(1526521846, 1),
"optimeDate" : ISODate("2018-05-17T01:50:46Z"),
"electionTime" : Timestamp(1526521798, 1),
"electionDate" : ISODate("2018-05-17T01:49:58Z"),
"self" : true
},
{
"_id" : 4,
"name" : "App1Box:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 7139,
"optime" : Timestamp(1526521846, 1),
"optimeDate" : ISODate("2018-05-17T01:50:46Z"),
"lastHeartbeat" : ISODate("2018-05-17T03:50:01Z"),
"lastHeartbeatRecv" : ISODate("2018-05-17T03:50:01Z"),
"pingMs" : 0,
"syncingTo" : "App2Box:27018"
}
],
"ok" : 1
}
但是,我只能从连接到 MongoDB 的应用服务器之一看到这一点,比如 App1Box。我在 App2Box 上没有看到这个问题。
我尝试从replicaSets 中删除成员并重新添加,问题仍然存在。
Mongo 版本:2.6.8 节点版本:4.4.3 npm 版本:3.8.9
在主要和辅助上执行 rs.status() 时,我可以从 mongo 控制台查看replicaSet 中的所有成员。
谢谢你的帮助。
解决方案
发现问题在于未使用完全限定的 DNS 名称,同时将成员添加到副本集。感谢@Neil Lunn。
推荐阅读
- elasticsearch - 无法使用 Kafka 连接将记录从 Kafka MSK 发送到弹性搜索
- android - 片段不调用 OnCreate 方法
- php - 可以用条件调用函数吗?
- r - R 数学运算 NA 值
- javascript - 使用 ajax javascript 显示数据库中的数据
- javascript - 使用 Chrome 扩展内容脚本注入 Angular 8 应用程序
- ios - Swift Combine - 按给定顺序执行任务
- ray - 发出本地集群错误 - 无法设置终端进程组
- ios - .obj 模型的大小可以调整(scenekit)
- java - 检查来自另一个类 java 的登录系统的列表元素