MongoDB 7.0 元数据检查

发布时间 2023-12-16 13:48:58作者: abce

除了分片键分析器之外,元数据检查器(checkMetadataConsistency())也是 DBA 工作中的一项额外工具。

分片集群很好,但同时也是一项复杂的功能,尤其是当我们开始尝试了解它是如何在后台工作以符合一致性等要求时。

对于需要管理分片集群的人来说,很可能会遇到元数据不一致的问题:集合具有不同的uuid、范围重叠的路由表以及许多其他令人不愉快的问题。

处理元数据是一项具有挑战性的任务,主要是因为修改元数据可能会导致一系列问题,使集群处于不希望出现的状态,而这正是我们要避免的。

而且,元数据不一致可能会悄无声息地存在于集群中,只有在特定操作/场景发生时才会被发现。checkMetadataConsistency() 可以帮助你跟踪这种情况:

·db.checkMetadataConsistency() :对集群或数据库的分片元数据执行一致性检查。
·db.collection.checkMetadataConsistency() :对集合的分片元数据执行一致性检查。
·sh.checkMetadataConsistency() :对集群的分片元数据执行一致性检查。

 

checkMetadataConsistency 命令会在分片元数据和索引上执行一些列检查,并返回包含不一致的文档数组。

 

这些检查分别是:

·CollectionUUIDMismatch:集合在本地分片上的 uuid 与 config.collections 集群目录中注册的 UUID 不同。 
·CorruptedChunkShardKey:路由表中的 chunk 的最大、最小键与集合对应的分片键不匹配
·CorruptedZoneShardKey:路由表中包含的zone的最小键或最大键与集合分片键不一致。
·HiddenShardedCollection:在 config.collections 集群目录中注册了一个不存在的数据库下的集合。
·InconsistentIndex:不同分片的同一索引包含不同的元数据,或者索引在某些分片上不存在
·MisplacedCollection:未作分片的集合位于非主分片上
·MissingRoutingTable:没有路由表的分片集合
·MissingShardKeyIndex:存在一个没有与集合分片键兼容的索引的分片集合。
·RoutingTableMissingMaxKey:路由表中存在范围缺口。路由表中的最后一个分块边界未达到最大键值。
·RoutingTableMissingMinKey:路由表中存在范围缺口。第一个分块不是从最小键值开始。
·RoutingTableRangeGap:路由表中同一集合的两个连续分块之间存在范围间隙。
·RoutingTableRangeOverlap:集合的路由表中包含两个分块键范围重叠的分块。
·ShardThinksCollectionIsUnsharded:分片认为分片集合未分片。
·ZonesRangeOverlap:同一集合存在重叠的分区。