使用嵌入式验证器进行验证
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索引。如果您从 1.9.0 之前的任何版本进行实时升级,
mongosync
都会禁用嵌入式验证。
不支持的验证检查
验证程序不会检查以下命名空间:
固定大小集合
具有TTL索引的集合,包括在迁移过程中添加或删除的TTL索引
不使用默认的集合
视图
验证程序不会检查以下集合功能:
集合元数据
索引
要验证上述数据和元数据,请为这些集合和集合功能编写额外检查的脚本。 有关详细信息,请参阅验证数据传输。
注意
从版本1.10 开始,验证程序会检查迁移期间 6.0之前的源集群上发生的 DDL事件中的数据是否不一致。这是因为6.0 之前的迁移不支持DDL 事件。
要学习;了解更多信息,请参阅 6.0之前的迁移限制。
步骤
初始化 mongosync
初始化 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"
启动同步
要开始将数据从源集群同步到目标,请使用 /start 端点。
curl localhost:27182/api/v1/start -XPOST \ --data ' { "source": "cluster0", "destination": "cluster1", } '
示例输出:
{"success":true}
请注意,默认下会为副本集迁移启用验证程序。
检查进度
要检查同步的状态,请使用 /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
。