Docs 菜单
Docs 主页
/
MongoDB Cluster-to-Cluster Sync
/ /

使用嵌入式验证器进行验证

在此页面上

  • 关于此任务
  • 步骤
  • 行为
  • 了解详情

mongosync 包括一个嵌入式验证器,用于对目标集群执行一系列检查,以验证支持的集合的同步。

注意

mongosync 使用primary 读取偏好(read preference)读取,因此它保留了源集群主节点 (primary node in the replica set)节点的文档字段顺序。嵌入式验证器还会根据源集群的主节点 (primary node in the replica set)节点检查文档,但检查时间与 mongosync 读取文档的时间不同。 因此,在极少数情况下,源集群节点之间的文档字段顺序差异可能会导致嵌入式验证程序迁移失败,即使 mongosync 正确复制了文档。

1.9 版本中的新功能

嵌入式验证程序在 mongosync 1.8 及更早版本中不可用。

有关其他验证方法,请参阅 验证数据传输。

嵌入式验证程序具有以下限制:

  • mongosync 将验证者状态存储在内存中,这可能会导致大量内存开销。 要运行验证程序,mongosync 大约需要 10 GB内存,此外,每 1 万份文档需要额外 500 MB 内存。

  • 验证程序无法恢复。 如果用户停止或暂停同步,然后因任何原因再次启动 mongosync,验证进程将从头开始。 这可能会导致验证大大落后于迁移。

  • 如果在启用验证并将 buildIndexes设立为 never 的情况下开始同步,则当 mongosync 在源集群上找到TTL集合时,迁移将失败。 这种情况可能发生在您调用 /start 端点之后或更晚的时间,例如,用户在迁移过程中在源集群上创建了TTL索引。

    要同步TTL集合而不在目标集群上构建索引,您必须在禁用验证器的情况下开始同步。

  • 如果您从 1.9.0 之前的任何版本进行实时升级, mongosync 禁用嵌入式验证。

验证程序不会检查以下命名空间:

  • 固定大小集合

  • 具有TTL索引的集合,包括在迁移过程中添加或删除的TTL索引

  • 不使用默认的集合

  • 视图

验证程序不会检查以下集合功能:

  • 集合元数据

  • 索引

要验证上述数据和元数据,请为这些集合和集合功能编写额外检查的脚本。 有关详细信息,请参阅验证数据传输。

注意

从版本1.10 开始,验证程序会检查 之前版本上发生的 DDL事件是否存在数据不一致。6.0迁移期间的源集群。 这是因为 6.0 迁移不支持DDL 事件。

要学习;了解更多信息,请参阅 6.0之前的迁移限制。

1

初始化 mongosync进程:

./bin/mongosync \
--logPath /var/log/mongosync \
--cluster0 "mongodb://clusterAdmin:superSecret@clusterOne01.fancyCorp.com:20020,clusterOne02.fancyCorp.com:20020,clusterOne03.fancyCorp.com:20020" \
--cluster1 "mongodb://clusterAdmin:superSecret@clusterTwo01.fancyCorp.com:20020,clusterTwo02.fancyCorp.com:20020,clusterTwo03.fancyCorp.com:20020"
2

要开始将数据从源集群同步到目标,请使用 /start 端点。

curl localhost:27182/api/v1/start -XPOST \
--data ' {
"source": "cluster0",
"destination": "cluster1",
} '

示例输出:

{"success":true}

请注意,默认下会为副本集迁移启用验证程序。

3

要检查同步的状态,请使用 /progress 端点:

curl localhost:27182/api/v1/progress -XGET

示例输出:

{
"progress":
{
"state":"RUNNING",
"canCommit":true,
"canWrite":false,
"info":"change event application",
"lagTimeSeconds":0,
"collectionCopy":
{
"estimatedTotalBytes":694,
"estimatedCopiedBytes":694
},
"directionMapping":
{
"Source":"cluster0: localhost:27017",
"Destination":"cluster1: localhost:27018"
},
"verification":
{
"source":
{
"estimatedDocumentCount": 42,
"hashedDocumentCount": 42,
"lagTimeSeconds": 2,
"totalCollectionCount": 42,
"scannedCollectionCount": 10,
"phase": "stream hashing"
},
"destination": {
"estimatedDocumentCount": 42,
"hashedDocumentCount": 42,
"lagTimeSeconds": 2,
"totalCollectionCount": 42,
"scannedCollectionCount": 10,
"phase": "stream hashing"
}
}
},
"success": true
}

检查 verification 响应字段,获取有关嵌入式验证程序状态的信息。

嵌入式验证程序对目标集群执行一系列检查。 它会检查所有支持的集合,以确认 mongosync 已成功将文档从源集群传输到目标。

如果验证程序遇到错误,则会导致迁移失败并显示错误。 如果验证程序未发现错误,/progress 端点将返回 canWrite: true。 要学习;了解有关canWrite 字段的更多信息,请参阅 canWrite 和 COMMITTED。

请联系支持调查验证问题。

验证需要 10 GB的内存,此外,迁移中每 1 百万个文档还需要 500 MB 的内存。

如果可用内存不足,/start 端点将返回错误。 如果发生这种情况,要将 mongosync 与验证程序一起使用,必须首先增加服务器的内存并恢复迁移。

如果增加服务器内存不可行,请在禁用验证器的情况下重新启动mongosync

后退

数据传输验证