node.js - ReplicaSetNoPrimary MongooseServerSelectionError: getaddrinfo EAI_AGAIN mongodb-primary
问题描述
我已经在 docker 中设置了一个 mongodb 副本集。当我使用 cli 连接到 mongodb 时,它工作正常。但是,尝试使用 mongoose 包通过 node.js 连接到它会给出以下错误消息。
MongooseServerSelectionError: getaddrinfo EAI_AGAIN mongodb-primary at NativeConnection.Connection.openUri (/home/kay/checkpoint/stream-hatchet/node_modules/mongoose/lib/connection.js:800:32) at /home/kay/checkpoint/stream-hatchet /node_modules/mongoose/lib/index.js:341:10 at /home/kay/checkpoint/stream-hatchet/node_modules/mongoose/lib/helpers/promiseOrCallback.js:31:5 at new Promise () at promiseOrCallback (/ home/kay/checkpoint/stream-hatchet/node_modules/mongoose/lib/helpers/promiseOrCallback.js:30:10) 在 Mongoose.connect (/home/kay/checkpoint/stream-hatchet/node_modules/mongoose/lib/index. js:340:10) 在 Object.MongoDBService [默认] (/home/kay/checkpoint/stream-hatchet/src/services/mongodb.service.ts:20:24) 在 Streaming (/home/kay/checkpoint/ stream-hatchet/src/main.ts:16:29) 在对象。(/home/kay/checkpoint/stream-hatchet/src/main.ts:38: 1) 在 Module._compile (internal/modules/cjs/loader.js:1137:30) 在 Module.m._compile (/home/kay/checkpoint/stream-hatchet/node_modules/ts-node/src/index.ts :858:23) 在 Module._extensions..js (internal/modules/cjs/loader.js:1157:10) 在 Object.require.extensions。[as .ts] (/home/kay/checkpoint/stream-hatchet/node_modules/ts-node/src/index.ts:861:12) 在 Module.load (internal/modules/cjs/loader.js:985: 32) 在 Function.Module._load (internal/modules/cjs/loader.js:878:14) 在 Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12) {原因:TopologyDescription { type : 'ReplicaSetNoPrimary', setName: 'replicaset', maxSetVersion: 61323, maxElectionId: 7fffffff0000000000000002, 服务器: Map {'mongodb-primary:27017' => [ServerDescription], 'mongodb-arbiter:27017' => [ServerDescription] },陈旧:
{原因:TopologyDescription {类型:'ReplicaSetNoPrimary',setName:'replicaset',maxSetVersion:61323,maxElectionId:7fffffff0000000000000002,服务器:映射{'mongodb-primary:27017'=> [ServerDescription],'mongodb-arbiter:27017'= > [ServerDescription] }, stale: false, compatible: true, compatibleError: null, logicalSessionTimeoutMinutes: null, heartbeatFrequencyMS: 10000, localThresholdMS: 15, commonWireVersion: 9 } }
节点
import mongoose from "mongoose";
const MongoDBService = async () => {
try {
const connectionString = "mongodb://root:password123@localhost:27017/streamhatchet?authSource=admin&replicaSet=replicaset&retryWrites=true"
const options = {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false,
autoIndex: true,
poolSize: 10,
serverSelectionTimeoutMS: 30000,
socketTimeoutMS: 75000,
family: 4,
keepAlive: true,
keepAliveInitialDelay: 300000,
};
await mongoose.connect(connectionString, options);
} catch (error) {
console.log(error);
}
mongoose.connection.on("error", (err) => {
console.log(error);
});
};
export default MongoDBService;
码头工人-compose.yml;
version: '2'
services:
mongodb-primary:
image: 'docker.io/bitnami/mongodb:4.4-debian-10'
ports:
- 27017:27017
environment:
- MONGODB_ADVERTISED_HOSTNAME=mongodb-primary
- MONGODB_REPLICA_SET_MODE=primary
- MONGODB_ROOT_PASSWORD=password123
- MONGODB_REPLICA_SET_KEY=replicasetkey123
volumes:
- 'mongodb_master_data:/bitnami/mongodb'
mongodb-arbiter:
image: 'docker.io/bitnami/mongodb:4.4-debian-10'
depends_on:
- mongodb-primary
environment:
- MONGODB_ADVERTISED_HOSTNAME=mongodb-arbiter
- MONGODB_REPLICA_SET_MODE=arbiter
- MONGODB_INITIAL_PRIMARY_HOST=mongodb-primary
- MONGODB_INITIAL_PRIMARY_ROOT_PASSWORD=password123
- MONGODB_REPLICA_SET_KEY=replicasetkey123
volumes:
mongodb_master_data:
driver: local
mongo --host localhost --port 27017 --username root --password password123 admin
rs.status()
replicaset:PRIMARY> rs.status()
{
"set" : "replicaset",
"date" : ISODate("2020-11-19T09:36:25.442Z"),
"myState" : 1,
"term" : NumberLong(2),
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"majorityVoteCount" : 2,
"writeMajorityCount" : 1,
"votingMembersCount" : 2,
"writableVotingMembersCount" : 1,
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1605778584, 1),
"t" : NumberLong(2)
},
"lastCommittedWallTime" : ISODate("2020-11-19T09:36:24.429Z"),
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1605778584, 1),
"t" : NumberLong(2)
},
"readConcernMajorityWallTime" : ISODate("2020-11-19T09:36:24.429Z"),
"appliedOpTime" : {
"ts" : Timestamp(1605778584, 1),
"t" : NumberLong(2)
},
"durableOpTime" : {
"ts" : Timestamp(1605778584, 1),
"t" : NumberLong(2)
},
"lastAppliedWallTime" : ISODate("2020-11-19T09:36:24.429Z"),
"lastDurableWallTime" : ISODate("2020-11-19T09:36:24.429Z")
},
"lastStableRecoveryTimestamp" : Timestamp(1605778554, 1),
"electionCandidateMetrics" : {
"lastElectionReason" : "electionTimeout",
"lastElectionDate" : ISODate("2020-11-19T09:17:54.388Z"),
"electionTerm" : NumberLong(2),
"lastCommittedOpTimeAtElection" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"lastSeenOpTimeAtElection" : {
"ts" : Timestamp(1605777471, 8),
"t" : NumberLong(1)
},
"numVotesNeeded" : 1,
"priorityAtElection" : 5,
"electionTimeoutMillis" : NumberLong(10000),
"newTermStartDate" : ISODate("2020-11-19T09:17:54.390Z"),
"wMajorityWriteAvailabilityDate" : ISODate("2020-11-19T09:17:54.480Z")
},
"members" : [
{
"_id" : 0,
"name" : "mongodb-primary:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1112,
"optime" : {
"ts" : Timestamp(1605778584, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2020-11-19T09:36:24Z"),
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1605777474, 1),
"electionDate" : ISODate("2020-11-19T09:17:54Z"),
"configVersion" : 61323,
"configTerm" : -1,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 1,
"name" : "mongodb-arbiter:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 1108,
"lastHeartbeat" : ISODate("2020-11-19T09:36:24.649Z"),
"lastHeartbeatRecv" : ISODate("2020-11-19T09:36:24.666Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 61323,
"configTerm" : -1
}
],
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1605778584, 1),
"signature" : {
"hash" : BinData(0,"WD1gDogfO+q0uWoLOy2tvycsDx8="),
"keyId" : NumberLong("6896761722598588420")
}
},
"operationTime" : Timestamp(1605778584, 1)
}
解决方案
推荐阅读
- cookies - OIDC js 库响应 cookie 未存储且未附加用于后续请求
- ios - 如何对齐自定义 UITableViewCells 中的标签?
- python - Python:正则表达式从遵循特定模式的文件名中提取字符串
- reactjs - TypeScript 可区分联合不会为不存在的字段提供错误
- authentication - ktpass命令是否禁用密码认证
- java - 如何在 Json 字段之间添加换行符和适当的选项卡?
- javascript - 如何从元素集中获取具有特定类的项目,然后计算它是元素集的数量?
- powershell - 通过 powershell 查询 SSAS 表格的最佳方法
- python - Amazon Lex 在 2 或 3 分钟后将状态从 Ready 更改为 NOT_BUILD
- python - 打开大 CSV 文件,删除一行,然后保存副本