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

完成切换进程

在此页面上

  • 步骤
  • 行为
  • 了解详情

您可以使用 mongosync切换进程最终完成迁移并将应用程序工作负载从源集群转移到目标集群。

mongosync 应保持活动状态,直到达到 COMMITTED 状态。这允许 mongosync同步迁移期间发生的任何其他写入。

注意

在将应用程序工作负载切换到目标集群之前,应始终验证同步是否成功。 有关详细信息,请参阅验证数据传输。

1

在开始切换进程之前,调用进度端点以确定mongosync的状态。 确保mongosync进程状态显示以下值:

  • canCommittrue

  • lagTimeSeconds 很小(接近0 )。

    如果在转换开始时lagTimeSeconds不接近0 ,则转换可能需要很长时间。

  • 使用嵌入式验证程序时,请检查 verification.sourceverification.destination 返回文档。两个文档中的 lagTimeSeconds 字段应接近 0,并且 phase 字段应显示 "stream hashing"

    如果调用了 /commit 且值不接近 0,或者验证者未处于流哈希阶段,则切换进程可能需要很长时间。

以下示例返回同步进程的状态。

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
}
2
  • 如果您启动 mongosync 时将 enableUserWriteBlocking设立为 truemongosync 则会在提交(步骤 4)期间为您阻止整个源集群上的所有写入操作。

  • mongosync如果您没有使用enableUserWriteBlocking 来启动setUserWriteBlockMode ,请确保已禁用写入功能。示例,在源集群上运行 命令:

    db.adminCommand( {
    setUserWriteBlockMode: 1,
    global: true
    } )
  • 如果 mongosync 使用筛选同步,则无需禁用对整个源集群的写入。但是,您必须确保停止对过滤包含的集合的写入操作。

3

如果为迁移启动多个 mongosync 实例,则必须为每个 mongosync实例发出提交请求。

curl localhost:27182/api/v1/commit -XPOST --data '{ }'
{"success":true}

注意

提交commit请求后,调用progress端点以确保mongosync状态为COMMITTINGCOMMITTED

完成此步骤后,mongosync 会阻止对源集群的写入。

4

调用progress端点以确定canWrite是否为true 。 如果canWritefalse ,则等到progress显示canWritetrue

curl -sS localhost:27182/api/v1/progress -XGET | jq ".progress.canWrite"
true
5

验证数据是否成功从源同步到目标集群。

有关详细信息,请参阅验证数据传输。

6

要启用写入功能,更新setUserWriteBlockMode

db.adminCommand(
{
setUserWriteBlockMode: 1,
global: false
}
)

然后,将应用程序工作负载传输到目标集群。

7

mongosync进度响应指示mongosync状态为COMMITTED时,则表示切换过程已完成。

curl -sS localhost:27182/api/v1/progress -XGET | jq ".progress.state"
"COMMITTED"

mongosync 允许在 COMMITTED 状态之前的阶段写入目标集群。

在初始同步中,mongosync 将源集群上的唯一索引复制为目标集群上的非唯一索引。在提交期间,目标集群上的相关非唯一索引将被设立为 prepareUnique。完成后,/progress 端点开始返回 canWrite: true。具有 prepareUnique 索引的集合会拒绝违反唯一索引约束的新文档。然后,mongosyncprepareUnique 索引转换为唯一索引。完成后,mongosync 会将其状态更改为 COMMITTED

注意

同步大型集合时,将 prepareUnique 索引转换为唯一索引可能会占用大量资源。这可能会导致 /progress 端点返回 canWrite: truemongosync 达到 COMMITTED 状态之间需要很长时间。

后退

oplog 大小调整