start
说明
启动源集群和目标集群之间的同步。
要求
州
要使用start
端点, mongosync
必须处于IDLE
状态。
权限
mongosync
连接string中指定的用户必须对源集群和目标集群具有所需的权限。 请参阅用户权限,确保用户具有启动同步的正确权限。
多个mongosync
实例
确保在启动mongosync
时,使用在cluster0
或cluster1
设置的连接字符串中配置的mongosync
用户。
注意
当您配置多个mongosync
实例在分片集群之间同步时,您必须向每个mongosync
实例发送相同的 API 端点命令。
有关更多信息,请参阅启动多个 Mongosync。
请求
POST /api/v1/start
请求正文参数
Parameter | 类型 | 必要性 | 说明 | |
---|---|---|---|---|
source | 字符串 | 必需 | 源集群的名称。 | |
destination | 字符串 | 必需 | 目标集群的名称。 | |
buildIndexes | 字符串 | Optional | 在同步期间配置索引构建。 支持的选项:
如果调用 版本 1.3.0 中的新增内容。 | |
documentFilter | 文档 | Optional | 重要提示:此功能仅在 从 要学习;了解更多信息,请参阅文档筛选。 1.8 版本中的新增功能:beta | |
enableUserWriteBlocking | 布尔 | Optional | 如果设置为 要反向同步,必须将
默认值为 | |
includeNamespaces | 阵列 | Optional | 筛选要同步包含的数据库或collection。 如果在具有多个数据库的源集群上配置筛选器,则 如果要修改筛选器以添加新创建的数据库,则必须从头开始重新启动筛选的同步。 有关更多详细信息,请参阅筛选的同步。 有关当前限制,请参阅Filtered Sync。 版本 1.1 中的新增内容。 | |
excludeNamespaces | 阵列 | Optional | 筛选要从同步中排除的数据库或collection。 如果在具有多个数据库的源集群上配置筛选器,则 如果要修改筛选器以添加新创建的数据库,则必须从头开始重新启动筛选的同步。 有关更多详细信息,请参阅筛选的同步。 有关当前限制,请参阅Filtered Sync。 1.6 版本中的新增功能。 | |
namespaceRemap | 阵列 | Optional | 重要提示:此功能仅在 指定在同步期间进行的命名空间更改的文档数组。 有关更多信息,请参阅命名空间重新映射。 1.8 版本中的新增功能:beta | |
reversible | 布尔 | Optional | 如果设置为 要反向同步,必须将 以下配置不支持此选项:
有关更多信息,请参阅反向端点。 默认值为 | |
sharding | 文档 | Optional | ||
verification | 文档 | Optional | ||
verification.enabled | bool | Optional | 启用嵌入式验证程序。验证程序对目标集群上支持的集合执行一系列验证检查,以确认迁移成功。 如果验证者没有发现错误, 默认,会为副本集到副本集的迁移启用验证程序。如果迁移包括分分片集群,则禁用验证程序。 警告:验证程序不会检查所有集合或数据。有关详细信息,请参阅嵌入式验证器。 1.9 版本中的新功能。 |
分片参数
版本 1.1 中的新增内容。
要将副本集同步到分片集群,请将sharding
选项设置为目标集群上的collection。
sharding
选项具有以下参数:
Parameter | 类型 | 说明 |
---|---|---|
createSupportingIndexes | 布尔 | 可选。设置同步是否为分分片键创建支持索引(如果不存在)。默认值为 |
shardingEntries | 文档数组 | 必需。 在同步期间将collection的命名空间和键设置为分片。 未包含在此数组中的collection会同步到目标集群上的未分片collection。如果设置为空数组,则不会对任何collection进行分片。 |
shardingEntries .collection | 字符串 | 将collection设置为分片。 |
shardingEntries .database | 字符串 | 将collection的数据库设置为分片。 |
shardingEntries .shardCollection | 文档 | 设置要在目标集群上生成的分片键。 |
shardingEntries .shardCollection .key | 阵列 | 设置用于分片键的字段。 有关更多信息,请参阅分片键。 |
mongosync
从副本集同步到分片集群时,如果未设置sharding
选项,则会引发错误。 如果将sharding
选项与任何其他配置一起设置, mongosync
也会引发错误。
响应
字段 | 类型 | 说明 |
---|---|---|
success | 布尔 | 当请求成功时,该值为 true 。 |
error | 字符串 | 如果发生错误,则指示错误名称。 当 success 为true 时,响应中将省略此字段。 |
errorDescription | 字符串 | 所发生错误的详细描述。 当 success 为true 时,响应中将省略此字段。 |
示例
启动同步作业
以下示例在cluster0
和cluster1
之间启动同步作业。 源集群为cluster0
,目标集群为cluster1
。
请求:
curl localhost:27182/api/v1/start -XPOST \ --data ' { "source": "cluster0", "destination": "cluster1" } '
响应:
{"success":true}
启动可逆同步作业
以下示例在cluster0
和cluster1
之间启动同步作业。 源集群为cluster0
,目标集群为cluster1
。
reversible
和enableUserWriteBlocking
字段允许反向同步。 要反转同步方向,请参阅:反向。
请求:
curl localhost:27182/api/v1/start -XPOST \ --data ' { "source": "cluster0", "destination": "cluster1", "reversible": true, "enableUserWriteBlocking": true } '
响应:
{"success":true}
启动筛选的同步作业
以下示例在cluster0
和cluster1
之间启动同步作业。 源集群为cluster0
,目标集群为cluster1
。
cluster0
包含sales
、 marketing
和engineering
数据库。
sales
数据库包含 EMEA
、APAC
和 AMER
集合。
此示例中的 includeNamespaces
数组定义了两个数据库 sales
和 marketing
上的筛选器。
sales
数据库还会对 EMEA
和 APAC
集合进行过滤。
"includeNamespaces" : [ { "database" : "sales", "collections": [ "EMEA", "APAC" ] }, { "database" : "marketing" } ]
使用此过滤器调用 /start
API 后,mongosync
:
同步
marketing
数据库中的所有集合滤除
engineering
数据库同步
sales
数据库中的EMEA
和APAC
集合滤除
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.createSupportingIndexes
为false
(默认值)时:
您为
sharding.shardingEntries
选项提供的每个分片键都必须在源集群上具有现有索引。如果集合使用任何其他排序规则,则用于分片键的索引之一必须具有简单排序规则。
要在分片键中使用唯一索引,您必须在源集群上创建索引时指定其唯一性。
源集群上的唯一索引与目标集群上请求的分片键不兼容,例如源集群上的唯一索引不包含目标集群上请求的分片键作为前缀,可能会导致
mongosync
失败。
当sharding.createSupportingIndexes
为true
时:
如果源集群上存在支持索引,
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
调用不会公开连接档案或用户数据。