我的 MongoDB 集群由 15 个节点组成,分布在 3 个不同的数据中心,分布如下: `数据中心 1:
Router-1
ConfigServer-1
Shard1Node1 [Primary]
Shard2Node2 [Secondary]
Shard3Node2 [Secondary]
DataCenter 2:
Router-2
ConfigServer-2
Shard1Node2 [Secondary]
Shard2Node1 [Primary]
Shard3Node3 [Secondary]
DataCenter 3:
Router-3
ConfigServer-3
Shard1Node3 [Secondary]
Shard2Node3 [Secondary]
Shard3Node1 [Primary]`
我正在运行应用程序实例,连接到三个数据中心中每个数据中心的本地 MongoDB 路由器。这些实例使用区域分片执行写入操作,将它们定向到各自数据中心的主节点。为了从其他分片读取数据,它们利用位于各自数据中心的辅助节点。
数据中心1与其他数据中心失去连接的场景,针对数据中心1;在继续读取其他分片的辅助节点的同时,我需要继续写入已与副本集断开连接的主节点。然而,在 3 节点副本集中,剩余的主节点放弃其主节点状态并成为辅助节点,拒绝写入操作。
如何解决这个问题?
不太清楚你的意思,PRIMARY节点始终是属于大多数成员的节点。
如果数据中心 1 丢失,则将从数据中心 2 或数据中心 3 中选出新的初选节点。
您可以通过在数据中心 2 和数据中心 3 的节点上将成员设置为
{priority: 0, votes: 0}
来更改它,但是这样您将失去大部分高可用性。