MongoDB分片集群升级至5.0后设置FCV失败,报uuid缺失错误
解决MongoDB 4.4升级到5.0设置FCV失败的问题
问题分析
设置Feature Compatibility Version(FCV)为5.0时失败,核心原因是SRS_4分片读取config.collections中集合9a79fb83-7c4e-4927-88ec-b462438b8471.galileo.prepared_data的元数据条目时,发现必填字段uuid缺失。尽管该集合在SRS_4上无任何数据块,但分片仍会同步配置节点的元数据,缺失uuid导致FCV升级的校验逻辑失败。
解决步骤
1. 验证配置节点的集合元数据
连接到配置节点副本集的主节点,执行以下命令检查目标集合的元数据:
use config db.collections.findOne({_id: "9a79fb83-7c4e-4927-88ec-b462438b8471.galileo.prepared_data"})
确认返回结果中是否存在uuid字段。如果不存在,执行下一步补充该字段。
2. 为集合添加缺失的UUID
在配置节点主节点上,生成新UUID并更新集合元数据:
// 生成新的UUID var newUUID = UUID() // 更新config.collections中的集合条目,确保同步到多数节点 db.collections.updateOne( {_id: "9a79fb83-7c4e-4927-88ec-b462438b8471.galileo.prepared_data"}, {$set: {uuid: newUUID}}, {writeConcern: {w: "majority", wtimeout: 60000}} )
等待命令执行成功,确保元数据更新同步到所有配置节点。
3. 刷新SRS_4分片的路由缓存
连接到mongos,执行命令强制SRS_4分片重新从配置节点同步元数据:
db.adminCommand({ _flushRoutingTableCacheUpdates: "9a79fb83-7c4e-4927-88ec-b462438b8471.galileo.prepared_data", syncFromConfig: true, writeConcern: {w: "majority", wtimeout: 60000} })
如果该命令执行失败,可直接重启SRS_4分片的所有副本集成员,让节点重新加载配置元数据。
4. 重新执行FCV设置命令
回到mongos,再次尝试设置FCV:
db.adminCommand({setFeatureCompatibilityVersion: "5.0"})
注意事项
- 操作前务必备份配置节点的
config数据库,避免元数据修改导致的意外问题。 - 建议在集群负载较低的时段执行操作,减少对业务的影响。
内容的提问来源于stack exchange,提问作者Marjana
相关产品推荐
相关产品推荐

