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进程,它不存储任何数据。