升级含Arbiter的双节点MongoDB副本集至3.6后Arbiter兼容性问题咨询
为什么仲裁节点的功能兼容性版本(FCV)仍为3.4?
这主要有两个核心原因:
1. 仲裁节点的二进制版本未升级到3.6
仲裁节点虽然不存储业务数据,但它的二进制版本必须和集群中其他数据节点保持一致。如果你的仲裁节点还在运行MongoDB 3.4的程序,它根本不支持3.6版本的FCV配置,所以会一直显示3.4。很多人升级副本集时容易忽略仲裁节点,这是最常见的问题。
2. FCV命令仅作用于存储数据的节点
db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )这个命令是用来修改**数据节点(主、从节点)**的数据集元数据的,仲裁节点不持有副本集的数据集,所以这个命令不会自动同步或更新仲裁节点的FCV配置。即使仲裁节点的二进制已经升级到3.6,它的FCV可能还是默认的3.4,需要手动确认状态并进行调整。
如何让仲裁节点与主从节点保持一致?
按照以下步骤操作:
步骤1:确认仲裁节点的二进制版本
登录到仲裁节点的MongoShell,执行以下命令查看当前版本:
db.version()
如果返回的是3.4.x版本,说明你需要先升级仲裁节点的二进制程序:
- 停止仲裁节点的MongoDB服务
- 替换为MongoDB 3.6版本的二进制文件(注意和主从节点的版本保持完全一致,比如3.6.23)
- 重新启动仲裁节点服务
步骤2:同步仲裁节点的FCV配置
当仲裁节点二进制升级到3.6后,再次登录MongoShell,先检查当前FCV状态:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
如果返回结果仍为3.4,直接在仲裁节点上执行FCV设置命令:
db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
注意:虽然仲裁节点不存储数据,但执行这个命令不会有任何副作用,它会更新仲裁节点自身的配置,使其FCV与集群保持一致。
步骤3:验证集群整体一致性
最后,登录主节点的MongoShell,执行以下命令检查所有节点的状态:
rs.status()
查看每个节点的version(二进制版本),确保所有节点的二进制版本都是3.6;同时确认主从节点的FCV为3.6,仲裁节点的FCV也同步完成。
内容的提问来源于stack exchange,提问作者Andrii Litvinov
相关产品推荐
相关产品推荐

