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

Cluster-to-Cluster Sync 快速入门

在此页面上

  • Overview
  • 设置
  • 定义源集群和目标集群
  • 定义管理用户
  • 下载并安装 mongosync
  • 连接集群
  • 设置连接字符串的格式
  • 初始化 mongosync
  • 初始化说明
  • 在集群之间同步数据
  • 完成切换进程
  • 一次性同步
  • 数据验证
  • 同步说明

MongoDB Cluster-to-Cluster Sync连接MongoDB集群并提供一种在它们之间同步数据的方法。 建立连接的工具是 mongosync 。 有关更多详细信息,请参阅Cluster-to-Cluster Sync文档的其余部分。

mongosync 在两个集群之间同步数据。

  • 每个集群都可以是副本集或分片集群。 如果其中一个是分片集群,请参阅mongosync的分片集群限制

  • 分片集群不需要具有相同数量的分片。

  • 目标集群的版本必须与源集群的版本相同,或者最多比源集群早两个版本。 补丁版本并不重要,只要满足最低补丁版本要求即可。

  • 源集群在提交之前可以保持活动状态,因为 mongosync 会在迁移期间同步源集群上的写入,直到调用提交为止。

按照以下说明设置 Cluster-to-Cluster Sync、连接集群并同步数据。

1

如果您已有一个MongoDB cluster (无论是自行管理还是在 MongoDB Atlas中托管),请将该集群用作源集群。 如果您没有可供使用的集群,则需要创建一个。

当目标集群和源集群都是副本集时,此快速入门适用。

要从副本集同步到分片分片集群,请参阅将副本集同步到分片集群。 要在分分片的集群之间进行同步,请参阅同步分片集群。

提示

另请参阅:

您可以在相同或不同MongoDB版本上的集群之间进行迁移。 有关MongoDB 服务器版本兼容性或跨版本迁移的更多信息,请参阅MongoDB Server版本兼容性。

目标副本集中的节点数不必等于源副本集中的节点数。

重要

目标集群必须有足够的磁盘存储,以容纳正在迁移的逻辑数据大小以及初始同步中的目标oplog条目。示例,要迁移10 GB的数据,目标集群必须至少有 10 GB用于数据,另外 10 GB用于初始同步中的插入oplog条目。

要减少目标oplog条目的开销,您可以:

如果您的集群是自我托管的,则它们必须是 MongoDB Enterprise 集群。仅在有限的情况下,MongoDB Community Edition才支持Cluster-to-Cluster Sync。有关使用 Cluster-to-Cluster Sync with MongoDB Community Edition 的更多信息,请联系 MongoDB 销售代表。

创建集群超出了本指南的范围。如果需要帮助,请参阅创建Atlas 集群或创建自我管理集群的文档。

2

如果其中一个集群托管在 Atlas 中,或者其中一个需要身份验证,则必须创建一个在这两个集群中都具有权限的数据库用户。

源用户必须具有以下角色:

此外,源用户必须能够:

如果源集群托管在 Atlas 中,则用户必须具有 Atlas 管理员角色。用户还必须能够读取集群的变更流

如果目标集群托管在 Atlas 中,则用户必须具有 Atlas 管理员角色。

3

mongosync 是连接源集群和目标集群的工具。 您可以在自己的硬件上托管mongosyncmongosync不必在托管 MongodDB 集群的硬件上运行。

要安装mongosync

  1. mongosync可执行文件找到与源集群和目标集群具有网络连接的主机服务器。

  2. 前往 MongoDB 下载中心。

  3. 下载适用于您的主机系统的mongosync包。

  4. 解压mongosync包。 mongosync可执行文件位于bin目录中。

有关特定于操作系统的安装说明,请参阅安装。

1

连接字符串包含mongosync连接到源集群和目标集群所需的网络和身份验证详细信息。

确定源集群和目标集群的主机名或 IP 地址和端口。 您将使用此信息和用户身份验证详细信息来构造连接字符串。

标准 URI 连接方案的形式如下:

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

您的连接字符串将类似于:

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

有关更多详细信息,请参阅连接mongosync

2

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"
  • mongosync首次连接到源集群和目标集群时,它处于IDLE状态。

  • mongosync 在收到启动命令之前不会同步数据。

  • 使用启动命令指定源集群和目标集群。 "cluster0" 和 "cluster1" 只是标签,任一集群都可以是cluster0cluster1

起始端点发起数据同步。 要开始同步,请使用curl或类似程序发出启动请求:

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

如果启动请求成功, mongosync将返回{ "success": true } ,并开始将源集群上的现有数据与目标集群上的现有数据同步。 在这个点, mongosync 进入 RUNNING 状态并将后续源集群写入应用于目标集群。

要检查同步状态,请调用进度端点:

curl localhost:27182/api/v1/progress -XGET

如果progress响应包含字段canCommit: true ,则集群处于同步状态,并且目标集群会持续从源集群复制数据。

mongosync的命令接口是发布 HTTP API 的 HTTP 服务器。 要控制mongosync ,请使用 API 端点。 API 文档提供了有关使用以下端点的详细信息:

端点
说明

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

返回同步进程的状态。

暂停当前同步操作。

根据目标集群上存储的数据恢复暂停的同步会话。

将同步操作提交到目标集群。

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

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

有关更多信息,请参阅完成切换过程。

初始化数据同步后,调用进度端点查看同步进程的状态:

curl localhost:27182/api/v1/progress -XGET

对于一次性同步,请验证progress响应是否包含以下字段值:

  • state: "RUNNING"

  • canCommit: true

  • lagTimeSeconds 接近0推荐,但不是必需

然后,调用提交端点将同步操作提交到目标集群并停止连续复制:

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

如果commit请求成功, mongosync将返回{ "success": true }并进入COMMITTING状态。 同步完成后, mongosync进入COMMITTED状态,集群不再处于持续同步状态。

在将应用程序负载从源集群转移到目标集群之前,请检查数据以确保同步成功。

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

  • HTTP API的默认端口为27182 。 将--port选项与mongosync一起使用以配置另一个端口。

  • mongosync 可以交换源集群和目标集群以启用反向同步。

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

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

    要确定适合您的使用案例的正确用户权限,请参阅用户权限。

  • 您可能需要在运行 mongosync 的主机上增加文件描述符 ulimits。这适用于任何类 UNIX 系统,尤其是 macOS,其默认值通常较低。请参阅 UNIX ulimit 设置

  • 要估计初始同步所需的oplog大小,请参阅oplog 大小调整。

后退

Cluster-to-Cluster Sync