您可以通过比较从源集群同步到目标集群的集合的 MD 5哈希来验证同步。 虽然哈希比较可确保目标集群已收到来自源的所有更改,但dbHash命令会锁定集群,在完成之前阻止其他写入。 此进程也可能比使用文档计数进行验证慢得多。
关于此任务
无法对分片的集群进行哈希比较。
如果您需要同步分片集群或较早版本的 MongoDB,或者您的应用程序工作负载不接受这些锁,请使用其他验证方法。
dbHash 命令仅哈希当前数据库中的集合,且 collections 字段接受裸集合名称。如果您在集合名称中包含数据库名称(例如 accounts.us_accounts),则 dbHash 将找不到匹配的集合,并返回两个集群上空输入的哈希值。要哈希多个数据库中的集合,请依次切换到每个数据库,为每个数据库运行一次命令,并分别比较每个数据库的 md5 值。
步骤
1
检索源哈希
切换到包含同步集合的数据库,然后在源集群上运行 dbHash 命令。在 collections 字段中,列出同步中包含的每个集合的名称,不带数据库前缀。然后,返回 md5 输出字段:
use accounts db.runCommand({ dbHash: 1, collections: [ "us_accounts", "eu_accounts", ... ]}).md5
9a1e4b7c2f8d3056ae91cbd4f72608b3
运行此命令时,检索目标哈希值。
2
检索目标哈希值
切换到包含同步集合的数据库,然后在目标集群上运行 dbHash 命令。在 collections 字段中,列出同步中包含的每个集合的名称,不带数据库前缀。然后,返回 md5 输出字段:
use accounts db.runCommand({ dbHash: 1, collections: [ "us_accounts", "eu_accounts", ... ]}).md5
9a1e4b7c2f8d3056ae91cbd4f72608b3
请注意哈希值。