繁体   English   中英

MongoDb Replica Set write concern issues on Secondary IP, while Primary IP is Shutdown

[英]MongoDb Replica Set write concern issues on Secondary IP, while Primary IP is Shutdown

我为我的 MongoDB 副本集使用三个节点,一个作为主节点,一个作为辅助节点,一个作为仲裁节点。 我在 Golang 中使用以下连接字符串来连接 MongoDB。

opts = options.Client().ApplyURI("mongodb://" + ipPort + "," + secIpPort + "/?replicaSet=" + repSetName).SetConnectTimeout(5 * time.Second).SetAuth(serverAuth).SetWriteConcern(writeconcern.New(writeconcern.WMajority()))

Ip用来做连接,ipPort=192.168.1.237 secipPort=192.168.1.239

我已将默认 RW 问题设置如下,

db.adminCommand({ "setDefaultRWConcern" : 1, "defaultWriteConcern" : { "w" : "majority", "j":true, "wtimeout" : 5000 }, writeConcern: { "w" : "majority", "j":true, "wtimeout" : 5000 }, })

问题:

当连接串的第一个IP(192.168.1.237)的MongoDb服务关闭时,副IP(192.168.1.239)很好的执行了所有的读操作。 但不执行写操作。我该如何处理这个问题? 如果连接字符串的第一个 IP 挂了,从 IP/节点应该可以同时执行读写操作。

我该如何处理这个问题? 如果连接字符串的第一个 IP 挂了,从 IP/节点应该可以同时执行读写操作。

原因是writeConcern: { w: "majority" }

在 MongoDB 中,您有两个多数。 表决多数和书面多数。 你可以用rs.status()询问他们

在 PRIMARY-SECONDAY-ARBITER (PSA) 副本集中,它应该如下所示:

"majorityVoteCount" : 2
"writeMajorityCount" : 2
"votingMembersCount" : 3
"writableVotingMembersCount" : 2

如果 SECONDARY 出现故障,那么您有 2 个投票成员占多数。 他们仍然可以选举一个新的 PRIMARY。

但是,只剩下 1 个写作成员,2 个中有 1 个不是多数。 因此除非失踪成员再次回来,否则无法使用{ w: "majority" }进行操作。

一些背景信息可以在这里找到: MongoClient to connect to multiple hosts to handle failover?

当MongoDB副本集的primary节点宕机时,secondary节点应该接替成为新的primary,继续进行读写操作。 但是,在您的情况下,当主节点关闭时,辅助节点似乎无法执行写操作。

这有几个可能的原因:

副本集配置不正确。 确保副本集名称和副本集中的节点列表与 MongoDB 中配置的相匹配。

辅助节点无法达到法定数量的节点来执行写入操作。 在您的情况下,您使用的是不存储数据且无法对写入操作进行投票的仲裁节点。 您可能需要考虑从副本集中删除仲裁节点或添加另一个辅助节点以确保一定数量的节点始终可用于写入操作。

写入问题配置不正确。 在您的代码中,您将写入关注设置为“多数”和“j=true”。 write concern "j=true" 表示写操作仅在写操作写入磁盘日志后返回。 确保在 MongoDB 上启用了日志功能并且磁盘空间足够。

节点之间的网络连接不稳定。 确保节点可以相互通信,并且不存在阻止节点通信的防火墙或其他网络问题。

辅助节点与主节点不同步。 确保辅助节点正在赶上主节点的 oplog,并且辅助节点处于健康状态 state。

建议查看MongoDB日志,运行命令“rs.status()”查看副本集的state是否有报错信息。 也可以尝试直接连接secondary节点,通过命令“rs.status()”查看副本集的state,查看副本集的state,看是否有报错信息。

如果问题仍然存在,您可能需要考虑添加另一个辅助节点以确保一定数量的节点始终可用于写入操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM