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

start

在此页面上

  • 说明
  • 要求
  • 请求
  • 响应
  • 示例
  • 行为

启动源集群和目标集群之间的同步。

要使用start端点, mongosync必须处于IDLE状态。

mongosync 连接string中指定的用户必须对源集群和目标集群具有所需的权限。 请参阅用户权限,确保用户具有启动同步的正确权限。

确保在启动mongosync时,使用在cluster0cluster1设置的连接字符串中配置的mongosync用户。

注意

当您配置多个mongosync实例在分片集群之间同步时,您必须向每个mongosync实例发送相同的 API 端点命令。

有关更多信息,请参阅启动多个 Mongosync。

POST /api/v1/start
Parameter
类型
必要性
说明
source
字符串
必需
源集群的名称。
destination
字符串
必需
目标集群的名称。
buildIndexes
字符串
Optional

在同步期间配置索引构建。

支持的选项:

  • beforeDataCopy (默认设置)导致mongosync在目标集群上构建索引。 其中包括现有索引以及迁移期间在源集群上创建的任何索引。

  • never 导致mongosync在同步期间跳过构建不必要的索引。 这可以提高迁移性能,尤其是在索引繁重的工作负载下。

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

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

    警告:mongosync执行迁移时,请勿手动构建索引。 等待迁移完全提交。

    有关其构建的索引的更多信息,请参阅所需索引。

/startbuildIndexes设置为neverreversible设置为true时,会返回错误。

如果调用/start而不指定buildIndexes选项, mongosync将在目标集群上构建索引。

版本 1.3.0 中的新增内容

documentFilter
文档
Optional

重要提示:此功能仅在mongosync beta中可用。要学习;了解更多信息,请参阅Cluster-to-ClusterCluster-to-Cluster Syncbeta Sync beta计划。

mongosync beta 1.8开始,您可以根据特定条件有选择地迁移文档。 要进一步限制迁移到目标集群的文档,可以结合使用文档筛选和命名空间筛选。

要学习;了解更多信息,请参阅文档筛选。

1.8 版本中的新增功能:beta

enableUserWriteBlocking
布尔
Optional

如果设置为true ,则在同步过程中阻止对目标集群的写入。 将同步提交到目标集群后,原始源集群会阻止写入,而目标集群会接受写入。

要反向同步,必须将enableUserWriteBlocking字段设立为true 。 要允许源集群再次接受写入(示例在运行迁移测试后),请运行以下命令:

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

默认值为false

includeNamespaces
阵列
Optional

筛选要同步包含的数据库或collection。

如果在具有多个数据库的源集群上配置筛选器,则mongosync仅同步筛选器定义中指定的数据库。 mongosync不会同步其他现有数据库。

如果要修改筛选器以添加新创建的数据库,则必须从头开始重新启动筛选的同步

有关更多详细信息,请参阅筛选的同步。

有关当前限制,请参阅Filtered Sync。

版本 1.1 中的新增内容

excludeNamespaces
阵列
Optional

筛选要从同步中排除的数据库或collection。

如果在具有多个数据库的源集群上配置筛选器,则mongosync仅同步筛选器定义中指定的数据库。 mongosync不会同步其他现有数据库。

如果要修改筛选器以添加新创建的数据库,则必须从头开始重新启动筛选的同步

有关更多详细信息,请参阅筛选的同步。

有关当前限制,请参阅Filtered Sync。

1.6 版本中的新增功能

namespaceRemap
阵列
Optional

重要提示:此功能仅在mongosync beta中可用。要学习;了解更多信息,请参阅Cluster-to-ClusterCluster-to-Cluster Syncbeta Sync beta计划。

指定在同步期间进行的命名空间更改的文档数组。

有关更多信息,请参阅命名空间重新映射。

1.8 版本中的新增功能:beta

reversible
布尔
Optional

如果设置为true ,则启用反向同步操作。

要反向同步,必须将enableUserWriteBlocking字段设置为true

以下配置不支持此选项:

  • 从副本集同步到分片集群

  • 同步具有不同分片数量的分片集群

  • buildIndexes设置为never时可逆同步。

  • 与嵌入式验证器进行可逆同步。验证者支持可逆同步的初始正向。当您调用 /reverse 端点时,它会禁用验证程序。

有关更多信息,请参阅反向端点。

默认值为false

sharding
文档
Optional

配置副本集和分片集群之间的同步。 从副本集同步到分片集群需要此选项。

有关更多信息,请参阅分片参数。

版本 1.1 中的新增内容

verification
文档
Optional

配置嵌入式验证器。

有关详细信息,请参阅嵌入式验证程序。

1.9 版本中的新功能

verification.enabled
bool
Optional

启用嵌入式验证程序。验证程序对目标集群上支持的集合执行一系列验证检查,以确认迁移成功。

如果验证者没有发现错误,mongosync 将转换到 COMMITTED 状态。如果确实遇到错误,迁移将失败。

默认,会为副本集到副本集的迁移启用验证程序。如果迁移包括分分片集群,则禁用验证程序。

警告:验证程序不会检查所有集合或数据。有关详细信息,请参阅嵌入式验证器。

1.9 版本中的新功能

版本 1.1 中的新增内容

要将副本集同步到分片集群,请将sharding选项设置为目标集群上的collection。

sharding选项具有以下参数:

Parameter
类型
说明
createSupportingIndexes
布尔

可选。设置同步是否为分分片键创建支持索引(如果不存在)。默认值为 false

有关更多信息和限制,请参阅支持索引。

shardingEntries
文档数组

必需。 在同步期间将collection的命名空间和键设置为分片。

未包含在此数组中的collection会同步到目标集群上的未分片collection。如果设置为空数组,则不会对任何collection进行分片。

shardingEntries
.collection
字符串
将collection设置为分片。
shardingEntries
.database
字符串
将collection的数据库设置为分片。
shardingEntries
.shardCollection
文档
设置要在目标集群上生成的分片键。
shardingEntries
.shardCollection
.key
阵列

设置用于分片键的字段。

有关更多信息,请参阅分片键。

mongosync 从副本集同步到分片集群时,如果未设置sharding选项,则会引发错误。 如果将sharding选项与任何其他配置一起设置, mongosync也会引发错误。

字段
类型
说明
success
布尔
当请求成功时,该值为true
error
字符串
如果发生错误,则指示错误名称。 当successtrue时,响应中将省略此字段。
errorDescription
字符串
所发生错误的详细描述。 当successtrue时,响应中将省略此字段。

以下示例在cluster0cluster1之间启动同步作业。 源集群为cluster0 ,目标集群为cluster1

请求:

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

响应:

{"success":true}

以下示例在cluster0cluster1之间启动同步作业。 源集群为cluster0 ,目标集群为cluster1

reversibleenableUserWriteBlocking字段允许反向同步。 要反转同步方向,请参阅:反向。

请求:

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

响应:

{"success":true}

以下示例在cluster0cluster1之间启动同步作业。 源集群为cluster0 ,目标集群为cluster1

cluster0 包含salesmarketingengineering数据库。

sales 数据库包含 EMEAAPACAMER 集合。

此示例中的 includeNamespaces 数组定义了两个数据库 salesmarketing 上的筛选器。

sales 数据库还会对 EMEAAPAC 集合进行过滤。

"includeNamespaces" : [
{
"database" : "sales",
"collections": [ "EMEA", "APAC" ]
},
{
"database" : "marketing"
}
]

使用此过滤器调用 /start API 后,mongosync

  • 同步 marketing 数据库中的所有集合

  • 滤除 engineering 数据库

  • 同步 sales 数据库中的 EMEAAPAC 集合

  • 滤除 AMER 集合

includeNamespaces选项会创建一个筛选器。 要筛选同步,请参阅:筛选的同步

请求:

curl -X POST "http://localhost:27182/api/v1/start" --data '
{
"source": "cluster0",
"destination": "cluster1",
"includeNamespaces": [
{
"database": "sales",
"collectionsRegex": {
"pattern": "^accounts_.+$",
"options": "i"
}
}, {
"database": "marketing"
}
]
} '

响应:

{"success":true}

请求:

curl localhost:27182/api/v1/start -XPOST \
--data '
{
"source": "cluster0",
"destination": "cluster1",
"sharding": {
"createSupportingIndexes": true,
"shardingEntries": [
{
"database": "accounts",
"collection": "us_east",
"shardCollection": {
"key": [
{ "location": 1 },
{ "region": 1 },
]
}
}
]
}
} '

响应:

{"success":true}

从 1.9 开始,开始迁移时默认运行嵌入式验证程序。如需禁用,请将 verification.enabled设立为 false

请求:

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

响应:

{"success":true}

在将应用程序负载转移到目标集群之前,应验证迁移是否成功。如果出于任何原因需要禁用验证程序,请使用替代方法来验证同步。

从 1.9 开始,mongosync 提供嵌入式验证器,以确定从源集群到目标的数据传输是否成功。

启用后,验证程序将对目标集群执行一系列验证检查。如果其中任何检查返回错误,则验证程序迁移失败。如果所有检查均成功,mongosync 将转换为 COMMITTED 状态。

要禁用验证程序,请参阅在禁用验证程序的情况下启动。

如果您启用源集群或目标集群不支持的验证检查,或者内存不足,则 /start 端点会返回错误。

如果start请求成功, mongosync将进入RUNNING状态。

从副本集同步到分片集群需要sharding选项。 此选项配置mongosync如何对collection进行分片。

sharding.shardingEntries数组指定要分片的collection。未在此数组中列出的collection将复制为未分片。

有关更多信息,请参阅分片集群行为。

mongosync 将索引从源集群同步到目标集群。从副本集同步到分分片集群时,mongosync 可能需要额外的索引来支持分分片键,而源集群上可能不存在该索引。

mongosync 可以在同步期间为分片collection创建支持索引。这是通过设置sharding.createSupportingIndexes选项来完成的。

sharding.createSupportingIndexesfalse (默认值)时:

  • 您为sharding.shardingEntries选项提供的每个分片键都必须在源集群上具有现有索引。

  • 如果集合使用任何其他排序规则,则用于分片键的索引之一必须具有简单排序规则。

  • 要在分片键中使用唯一索引,您必须在源集群上创建索引时指定其唯一性。

  • 源集群上的唯一索引与目标集群上请求的分片键不兼容,例如源集群上的唯一索引不包含目标集群上请求的分片键作为前缀,可能会导致mongosync失败。

sharding.createSupportingIndexestrue时:

  • 如果源集群上存在支持索引, mongosync会将索引同步到目标集群并将其用作分片键。

  • 如果支持索引不存在, mongosync则会在目标集群上创建这些索引。

sharding.createSupportingIndexes选项会影响所有分片collection。

sharding.shardingEntries数组中列出的集合在从副本集同步到分片集群时将成为目标集群上的分片集合。

在调用start之后但mongosync开始复制集合之前,在源集群上重命名集合(例如使用renameCollection命令)可能会阻止该集合在目标上分片。

注意

从副本集同步到分片集群时,不支持重命名collection以使用不同的数据库。

要检查重命名collection是否安全,请调用progress端点并检查返回文档中collectionCopy.estimatedCopiedBytes字段的值。

  • 值为 0 表示mongosync尚未开始复制collection。

    在此点重命名collection可能会导致目标集群上出现未分片的collection,因为可能会在重命名对源生效之前过渡到复制。

  • 值大于 0 表示mongosync已开始复制。 从此时开始重命名collection不会阻止其在目标集群上的分片,即使发生事件也是如此。

当您在buildIndexes选项设置为never的情况下调用/start时, mongosync会跳过构建不必要的索引。

始终构建的索引包括:

  • mongosync 为其复制的每个collection的_id字段构建索引。

  • mongosync 为每个没有索引的分分片的集合构建虚拟索引,以支持目标集群上的分分片键。 当buildIndexes设立为never时, mongosync在提交后保留此索引。

mongosync 不保护start端点。 但是,默认情况下,该 API 仅绑定到本地主机,不接受来自其他来源的调用。 此外, start调用不会公开连接档案或用户数据。

后退

mongosync API 端点