Mongodb MongoError:在复制集中找不到主映像
我有两个应用服务器,它们连接到一个复制集(主、辅助和仲裁器) 我面临的问题是Mongodb MongoError:在复制集中找不到主映像,mongodb,mongodb-replica-set,Mongodb,Mongodb Replica Set,我有两个应用服务器,它们连接到一个复制集(主、辅助和仲裁器) 我面临的问题是 [ '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/topolog
[ '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)' ]
rs.status()输出
然而,我只从一个连接到MongoDB的应用服务器(比如App1Box)上看到了这一点。我没有在App2Box上看到这个问题
我已尝试从复制集中删除成员并重新添加,但问题仍然存在
Mongo版本:2.6.8
节点版本:4.4.3
npm版本:3.8.9
我可以在mongo控制台中看到replicaSet中的所有成员,同时在主和次控制台上执行rs.status()
感谢您的帮助。在向replicaSet添加成员时发现问题在于未使用完全限定的DNS名称。感谢@Neil Lunn。1)请检查您的连接字符串,其中包含以下链接后面的所有DB服务器名称 2) 进行故障转移 为此,请登录到主节点并执行以下命令
rs.stepDown()
在与replicaSet的连接链接之后添加以下代码
'mongodb://localhost:27017/streamfig?replicaSet=rs', { useNewUrlParser: true, useUnifiedTopology: true, connectWithNoPrimary: true }
它将解决所有错误。显示节点应用程序中正在使用的连接字符串。同时显示
rs.status()。您的应用程序连接中未使用replicaSet
选项,或者您的replicaSet被错误配置为仅使用“内部”主机名,而这些主机名在客户端应用程序中不可见。已将信息添加到帖子中。该配置不是有效的连接字符串。显示对MongoClient.connect()的实际调用以及如何通过该对象的任何部分进行发送。我还看到了“App1Box.dmz.mytest.com.au”
,您的rs.status()
只显示App1Box
。我假设如果您只是ping App1Box
而没有FQDN,那么您将一无所获。副本集上的配置是驱动程序使用的,而不是“种子列表”,这是另一回事。请参阅驱动程序参考文档中的。感谢您的帮助。现在,在将种子列表更改为完全限定的DNS后,我看不到出现此问题。以上几点不是问题所在。谢谢你的回复。问题是没有使用完全限定的DNS名称。
rs.stepDown()
'mongodb://localhost:27017/streamfig?replicaSet=rs', { useNewUrlParser: true, useUnifiedTopology: true, connectWithNoPrimary: true }