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

reverse

在此页面上

  • 说明
  • 要求
  • 验证唯一索引
  • 请求
  • 请求正文参数
  • 响应
  • 例子
  • 请求
  • 响应
  • 行为
  • 嵌入式验证程序
  • 端点保护
  • 限制

反转已提交同步操作的方向。

例如:

  • 您有一个COMMITTED同步操作。

  • cluster0 是源, cluster1是目标。

  • 同步操作为COMMITTED后,新的写入仅发生在目标集群上。 源集群不会接受新的写入。

在这种情况下,您可以使用reverse端点将写入从cluster1同步到cluster0 ,包括mongosync到达canWrite=true之后在cluster1上发生的任何写入。 要在同步期间检查canWrite状态,请使用 /progress端点。

要使用reverse端点:

  • mongosync 必须在初始同步开始时配置。 对/start API 端点的调用必须设置:

    • reversible to true

    • enableUserWriteBlockingtrue

注意

写入阻塞是运行reverse 的先决条件。

同步开始后,您无法更新这些选项。

  • mongosync 必须处于COMMITTED状态。

  • 目标集群 oplog 在mongosync到达canWrite=true和接收/reverse请求之间不得滚动。

  • 唯一索引需要正确的格式。 如果集合的索引最初是在 MongoDB 4.2上创建的,则这些集合的格式可能不正确。

    要验证集合索引是否使用正确的格式,请参阅验证唯一索引。

  • 源集群和目标集群的分片数量必须相同。当集群具有不同的拓扑或主要版本时,将无法进行反向同步。

  • mongosync连接字符串中指定的用户必须对源集群和目标集群具有所需的权限。 这些权限会有所不同,具体取决于您的环境以及您要运行写入阻塞还是反向同步。

注意

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

有关更多信息,请参阅反向多个 Mongosync。

为了反转方向, mongosync要求所有唯一索引使用正确的格式。 从 MongoDB 4.2或更早版本开始且此后升级的集群可能包含格式不正确的唯一索引。

要更正索引,您可以重新同步原始源集群中的所有节点。 要重新同步所有节点:

1

有关重新同步节点的教程,请参阅重新同步副本集的节点。

2
3

或者,为避免重新同步,您可以对所有节点上具有唯一索引的每个集合使用db.collection.validate()方法和full = false ,以确定每个集合是否包含格式不正确的唯一索引。 如果db.collection.validate()没有返回有关唯一索引的警告,则可以跳过重新同步。

POST /api/v1/reverse

此端点不使用 HTTP 请求正文参数。 但是,您必须指定带有空对象{ }--data选项。

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

以下示例反转了已提交同步操作的方向。

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

reverse 端点启动 REVERSING 状态。 mongosync 会交换源集群和目标集群,并继续应用变更事件。

如果reverse同步成功, mongosync将进入RUNNING状态。 同步从原始同步作业的相反方向继续进行。 您无需重新启动整个同步进程即可复制原始数据。

要查看源集群和目标集群同步的映射方向,请使用进度端点并检查directionMapping对象。

默认,会为副本集迁移启用嵌入式验证程序,并对可逆同步的正向执行验证检查。当您调用 /reverse 端点时,mongosync 会禁用验证程序。即使在额外调用 /reverse 端点后,验证器仍会保持禁用状态。

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

reverse端点不支持筛选同步。

后退

提交