*在创建问题之前,请确保您使用的是最新版本的猫鼬
最新版猫鼬(v4.11.13)。
您要请求功能还是报告错误?
漏洞
当前的行为是什么?
{ MongoError: no primary found in replicaset
wehpu-engine_1 | at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:560:28
wehpu-engine_1 | at connectNewServers (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:317:25)
wehpu-engine_1 | at topologyMonitor (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:552:12)
wehpu-engine_1 | at Server.<anonymous> (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:772:7)
wehpu-engine_1 | at Server.g (events.js:292:16)
wehpu-engine_1 | at emitOne (events.js:96:13)
wehpu-engine_1 | at Server.emit (events.js:188:7)
wehpu-engine_1 | at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/server.js:300:14
wehpu-engine_1 | at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/connection/pool.js:469:18
wehpu-engine_1 | at _combinedTickCallback (internal/process/next_tick.js:73:7)
wehpu-engine_1 | at process._tickCallback (internal/process/next_tick.js:104:9)
wehpu-engine_1 | name: 'MongoError',
wehpu-engine_1 | message: 'no primary found in replicaset' }
wehpu-engine_1 | Unhandled rejection MongoError: no primary found in replicaset
wehpu-engine_1 | at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:560:28
wehpu-engine_1 | at connectNewServers (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:317:25)
wehpu-engine_1 | at topologyMonitor (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:552:12)
wehpu-engine_1 | at Server.<anonymous> (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:772:7)
wehpu-engine_1 | at Server.g (events.js:292:16)
wehpu-engine_1 | at emitOne (events.js:96:13)
wehpu-engine_1 | at Server.emit (events.js:188:7)
wehpu-engine_1 | at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/server.js:300:14
wehpu-engine_1 | at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/connection/pool.js:469:18
wehpu-engine_1 | at _combinedTickCallback (internal/process/next_tick.js:73:7)
wehpu-engine_1 | at process._tickCallback (internal/process/next_tick.js:104:9)
如果当前行为是错误,请提供重现的步骤。
连接:
mongoose.connect('mongodb://mongodb-master:27017,mongodb-slave1:27017,mongodb-slave2:27017/wehpu?replicaSet=wehpu', { useMongoClient: true });
我使用docker-compose
来构建。 一切都好!
我们可以看到PRIMARY
和SECONDARY
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
wehpu:PRIMARY>
...
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
wehpu:SECONDARY>
当我附加到 MongoDB(PRIMARY) 并打印rs.conf()
时,我可以看到:
wehpu:PRIMARY> rs.config()
{
"_id" : "wehpu",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "mongodb-master:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongodb-slave1:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongodb-slave2:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : 60000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("59cee31221dd0f0e4f1f566b")
}
}
IPADDR 解析工作:
root<strong i="6">@c0cdbbcaca42</strong>:/usr/src/app# ping mongodb-master
PING mongodb-master (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.099 ms
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.114 ms
......
root<strong i="7">@c0cdbbcaca42</strong>:/usr/src/app# ping mongodb-slave1
PING mongodb-slave1 (172.18.0.4): 56 data bytes
64 bytes from 172.18.0.4: icmp_seq=0 ttl=64 time=0.167 ms
64 bytes from 172.18.0.4: icmp_seq=1 ttl=64 time=0.127 ms
这是我的控制台的详细输出:
Successfully built 80057069e381
Successfully tagged wehpuengine_wehpu-engine:latest
Creating mongodb-master ...
Creating mongodb-slave2 ...
Creating mongodb-slave1 ...
Creating mongodb-master
Creating mongodb-slave2
Creating mongodb-slave1 ... done
Creating wehpuengine_wehpu-engine_1 ...
Creating wehpuengine_wehpu-engine_1 ... done
Attaching to mongodb-master, mongodb-slave2, mongodb-slave1, wehpuengine_wehpu-engine_1
mongodb-master | + MONGO_LOG=/var/log/mongodb/mongod.log
mongodb-master | + MONGO=/usr/bin/mongo
mongodb-master | + MONGOD=/usr/bin/mongod
mongodb-master | + /usr/bin/mongod --fork --replSet wehpu --noprealloc --smallfiles --logpath /var/log/mongodb/mongod.log
mongodb-master | note: noprealloc may hurt performance in many applications
mongodb-master | about to fork child process, waiting until server is ready for connections.
mongodb-master | forked process: 8
mongodb-slave2 | + MONGO_LOG=/var/log/mongodb/mongod.log
mongodb-slave2 | + MONGO=/usr/bin/mongo
mongodb-slave2 | + MONGOD=/usr/bin/mongod
mongodb-slave2 | + /usr/bin/mongod --fork --replSet wehpu --noprealloc --smallfiles --logpath /var/log/mongodb/mongod.log
mongodb-master | child process started successfully, parent exiting
mongodb-master | + '[' mongodb-master == mongodb-master ']'
mongodb-master | + /usr/bin/mongo --eval 'rs.initiate({
mongodb-master | _id: "wehpu",
mongodb-master | version: 1,
mongodb-master | members: [
mongodb-master | {
mongodb-master | _id: 0,
mongodb-master | host: "mongodb-master:27017",
mongodb-master | arbiterOnly: false,
mongodb-master | buildIndexes: true,
mongodb-master | hidden: false,
mongodb-master | priority: 1,
mongodb-master | tags: {},
mongodb-master | slaveDelay: 0,
mongodb-master | votes: 1
mongodb-master | },
mongodb-master | {
mongodb-master | _id: 1,
mongodb-master | host: "mongodb-slave1:27017",
mongodb-master | arbiterOnly: false,
mongodb-master | buildIndexes: true,
mongodb-master | hidden: false,
mongodb-master | priority: 1,
mongodb-master | tags: {},
mongodb-master | slaveDelay: 0,
mongodb-master | votes: 1
mongodb-master | },
mongodb-master | {
mongodb-master | _id: 2,
mongodb-master | host: "mongodb-slave2:27017",
mongodb-master | arbiterOnly: false,
mongodb-master | buildIndexes: true,
mongodb-master | hidden: false,
mongodb-master | priority: 1,
mongodb-master | tags: {},
mongodb-master | slaveDelay: 0,
mongodb-master | votes: 1
mongodb-master | }
mongodb-master | ]
mongodb-master | })'
mongodb-slave2 | note: noprealloc may hurt performance in many applications
mongodb-slave2 | about to fork child process, waiting until server is ready for connections.
mongodb-slave2 | forked process: 9
mongodb-slave2 | child process started successfully, parent exiting
mongodb-slave2 | + '[' '' == mongodb-master ']'
mongodb-slave2 | + tailf /dev/null
mongodb-master | MongoDB shell version v3.4.9
mongodb-master | connecting to: mongodb://127.0.0.1:27017
mongodb-master | MongoDB server version: 3.4.9
mongodb-master | {
mongodb-master | "info" : "try querying local.system.replset to see current configuration",
mongodb-master | "ok" : 0,
mongodb-master | "errmsg" : "already initialized",
mongodb-master | "code" : 23,
mongodb-master | "codeName" : "AlreadyInitialized"
mongodb-master | }
mongodb-slave1 | + MONGO_LOG=/var/log/mongodb/mongod.log
mongodb-master | + tailf /dev/null
mongodb-slave1 | + MONGO=/usr/bin/mongo
wehpu-engine_1 | npm info it worked if it ends with ok
mongodb-slave1 | + MONGOD=/usr/bin/mongod
wehpu-engine_1 | npm info using [email protected]
mongodb-slave1 | + /usr/bin/mongod --fork --replSet wehpu --noprealloc --smallfiles --logpath /var/log/mongodb/mongod.log
wehpu-engine_1 | npm info using [email protected]
mongodb-slave1 | note: noprealloc may hurt performance in many applications
mongodb-slave1 | about to fork child process, waiting until server is ready for connections.
mongodb-slave1 | forked process: 8
mongodb-slave1 | child process started successfully, parent exiting
mongodb-slave1 | + '[' '' == mongodb-master ']'
mongodb-slave1 | + tailf /dev/null
wehpu-engine_1 | npm info lifecycle [email protected]~prestart: [email protected]
wehpu-engine_1 | npm info lifecycle [email protected]~start: [email protected]
wehpu-engine_1 |
wehpu-engine_1 | > [email protected] start /usr/src/app
wehpu-engine_1 | > node ./bin/www
wehpu-engine_1 |
wehpu-engine_1 | Mongodb connection error: { MongoError: no primary found in replicaset
wehpu-engine_1 | at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:560:28
wehpu-engine_1 | at connectNewServers (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:317:25)
wehpu-engine_1 | at topologyMonitor (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:552:12)
wehpu-engine_1 | at Server.<anonymous> (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:772:7)
wehpu-engine_1 | at Server.g (events.js:292:16)
wehpu-engine_1 | at emitOne (events.js:96:13)
wehpu-engine_1 | at Server.emit (events.js:188:7)
wehpu-engine_1 | at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/server.js:300:14
wehpu-engine_1 | at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/connection/pool.js:469:18
wehpu-engine_1 | at _combinedTickCallback (internal/process/next_tick.js:73:7)
wehpu-engine_1 | at process._tickCallback (internal/process/next_tick.js:104:9)
wehpu-engine_1 | name: 'MongoError',
wehpu-engine_1 | message: 'no primary found in replicaset' }
wehpu-engine_1 | Unhandled rejection MongoError: no primary found in replicaset
wehpu-engine_1 | at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:560:28
wehpu-engine_1 | at connectNewServers (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:317:25)
wehpu-engine_1 | at topologyMonitor (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:552:12)
wehpu-engine_1 | at Server.<anonymous> (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:772:7)
wehpu-engine_1 | at Server.g (events.js:292:16)
wehpu-engine_1 | at emitOne (events.js:96:13)
wehpu-engine_1 | at Server.emit (events.js:188:7)
wehpu-engine_1 | at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/server.js:300:14
wehpu-engine_1 | at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/connection/pool.js:469:18
wehpu-engine_1 | at _combinedTickCallback (internal/process/next_tick.js:73:7)
wehpu-engine_1 | at process._tickCallback (internal/process/next_tick.js:104:9)
预期的行为是什么?
我只想连接到副本集,但是,我遇到了问题......
请提及您的 node.js、mongoose 和 MongoDB 版本。
node.js : node:boron
v6.10.3
MongoDB : mongo:latest
v3.4
猫鼬:v4.11.13
我想这只是副本集在您尝试连接时还没有决定谁是主要的。 在启动您的应用程序之前尝试添加 5 秒钟的睡眠。 您还可以添加connectWithNoPrimary
以使其连接成功,即使它找不到主节点:
mongoose.connect('mongodb://mongodb-master:27017,mongodb-slave1:27017,mongodb-slave2:27017/wehpu?replicaSet=wehpu', { useMongoClient: true, connectWithNoPrimary: true });
惊人的! 你说的对。 这个对我有用。 非常感谢。
这真的很有帮助,它也解决了我的错误,我有同样的错误。
最有用的评论
我想这只是副本集在您尝试连接时还没有决定谁是主要的。 在启动您的应用程序之前尝试添加 5 秒钟的睡眠。 您还可以添加
connectWithNoPrimary
以使其连接成功,即使它找不到主节点: