MongoDB 副本集在辅助关闭时写入
MongoDB replica set write when secondary down
我正在尝试创建一个主从 mongo 实例。我创建了实例:
mongod.exe --config "C:\mongodb\config\repl1.cfg"
mongod.exe --config "C:\mongodb\config\repl2.cfg"
然后我登录到我的第一个节点并创建了副本,第二个节点也启动了:
mongo.exe --port 27031
mongo.exe --port 27032
rs.initiate( {
_id : "replKK",
members: [
{ _id: 0, host: "localhost:27031", priority:5 },
{ _id: 1, host: "localhost:27032", hidden: true, priority:0 }
]
})
当两个节点都启动时,我可以读写。但是当我关闭辅助节点时,我可以插入到集合中,因为我收到以下错误:
WriteCommandError({
"topologyVersion" : {
"processId" : ObjectId("6149c7170fc6426b073f16c3"),
"counter" : NumberLong(11)
},
"ok" : 0,
"errmsg" : "not master",
"code" : 10107,
"codeName" : "NotWritablePrimary",
"$clusterTime" : {
"clusterTime" : Timestamp(1632225689, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1632225689, 1)
})
我做错了什么?我怎样才能实现第一个节点是可以插入行的实例,而第二个节点只是一种备份(主从)?我正在使用 MongoDB 5.0.3
为了选出一个可写的 PRIMARY 节点,所有节点的 多数 必须处于运行状态。
2 个中有 1 个不是多数。典型的解决方案是创建一个 Arbiter。 Arbiter是一个非常轻量级的mongod进程,它不存储任何数据。
我正在尝试创建一个主从 mongo 实例。我创建了实例:
mongod.exe --config "C:\mongodb\config\repl1.cfg"
mongod.exe --config "C:\mongodb\config\repl2.cfg"
然后我登录到我的第一个节点并创建了副本,第二个节点也启动了:
mongo.exe --port 27031
mongo.exe --port 27032
rs.initiate( {
_id : "replKK",
members: [
{ _id: 0, host: "localhost:27031", priority:5 },
{ _id: 1, host: "localhost:27032", hidden: true, priority:0 }
]
})
当两个节点都启动时,我可以读写。但是当我关闭辅助节点时,我可以插入到集合中,因为我收到以下错误:
WriteCommandError({
"topologyVersion" : {
"processId" : ObjectId("6149c7170fc6426b073f16c3"),
"counter" : NumberLong(11)
},
"ok" : 0,
"errmsg" : "not master",
"code" : 10107,
"codeName" : "NotWritablePrimary",
"$clusterTime" : {
"clusterTime" : Timestamp(1632225689, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1632225689, 1)
})
我做错了什么?我怎样才能实现第一个节点是可以插入行的实例,而第二个节点只是一种备份(主从)?我正在使用 MongoDB 5.0.3
为了选出一个可写的 PRIMARY 节点,所有节点的 多数 必须处于运行状态。
2 个中有 1 个不是多数。典型的解决方案是创建一个 Arbiter。 Arbiter是一个非常轻量级的mongod进程,它不存储任何数据。