在将应用程序负载从源集群切换到目标集群之前,应验证迁移是否成功。
从 1.9 开始, mongosync
提供了一个嵌入式验证器,可以对源集群和目标集群执行一系列验证检查,以确认同步成功。
您应该在每次同步后验证数据。 如果您计划将应用程序负载从源集群转移到目标集群,这一点非常重要。
验证方法 | 说明 |
---|
| 从1.9 开始,mongosync 包含嵌入式验证程序,可对源集群和目标集群运行一系列验证检查,以确认迁移成功。这是满足要求的部署的首选验证方法。 当mongosync 进程启动时,它会提示用户有关嵌入式验证程序的免责声明。您必须接受免责声明,或者如果您已经阅读并确认,请使用mongosync --acceptDisclaimer 选项启动 以使用验证程序。 验证程序不会检查迁移的每个方面: |
| 最基本的验证方法是将源集群上每个同步collection中的文档数量与目标集群上的数量进行比较。 在使用此方法验证数据传输之前,mongosync 必须处于 COMMITTED 状态。 仅当针对具有仅插入工作负载的集群运行时,此方法才会验证同步是否成功。 |
| 您可以通过比较从源集群同步到目标集群的collection的 MD5 哈希值来验证同步。 在使用此方法验证数据传输之前,mongosync 必须处于 COMMITTED 状态。 虽然哈希比较可确保目标集群已收到来自源的所有更改,但dbHash 命令会锁定集群,在完成之前阻止其他写入。 无法对分片的集群进行哈希比较。它也不适用于使用MongoDB4.4 或更早版本的独立运行服务器和副本集,因为文档字段顺序可能会有所不同。 |
| 您可以通过比较源集群和目标集群上的文档来验证同步。 编写一个脚本来查询源集群上的集合,然后检查目标集群上是否存在具有相同值的正确文档、索引、集合、元数据和视图。 在使用此方法验证数据传输之前,mongosync 必须处于 COMMITTED 状态。 |
| |
| |
| 要验证分分片键是否传输到同步集合,请对 config.collections 集合运行查询,以查找 _id 值为目标集合的命名空间的文档。比较此文档在源集群和目标集群中的 key 值。 示例,对于pets records 数据库中名为 的集合,您可以在mongosh 中使用以下查询来验证分分片键: db.getSiblingDB("config").collections.find({ _id : "records.pets" }) |
{ | "_id" : "records.pets", | "lastmod" : ISODate("2021-07-21T15:48:15.193Z"), | "timestamp": Timestamp(1626882495, 1), | "key" : { | "_id" : 1 | }, | "unique" : false, | "lastmodEpoch" : ObjectId("5078407bd58b175c5c225fdc"), | "uuid" : UUID("f8669e52-5c1b-4ea2-bbdc-a00189b341da") | } |
|
| 迁移验证程序连接到源集群和目标集群,并执行一系列验证检查,比较文档、视图和索引,以确认同步成功。 |
用于验证数据的具体方法取决于应用程序工作负载和数据的复杂性。