Overview
Cluster-to-Cluster Sync将数据从一个集群复制并写入到另一个集群,直到同步完成。您可以使用此工具在MongoDB集群之间执行一次性数据迁移,同时最短停机时间。
有关执行期间的 mongosync
和目标集群行为的详细信息,请参阅中间同步注意事项。
mongosync 二进制文件是Cluster-to-Cluster Sync中使用的主节点 (primary node in the replica set)进程。
每个集群都可以是副本集或分片集群。 如果其中一个是分片集群,请参阅
mongosync
的分片集群限制。分片集群不需要具有相同数量的分片。
目标集群的版本必须与源集群的版本相同,或者最多比源集群早两个版本。 补丁版本并不重要,只要满足最低补丁版本要求即可。
源集群在提交之前可以保持活动状态,因为
mongosync
会在迁移期间同步源集群上的写入,直到调用提交为止。
重要
在您对commit
mongosync
canWrite
调用 且 成功返回true
之前,目标集群上的已迁移集合不能用于接受应用程序读取或写入流量。请勿使用mongosync
维护灾难恢复集群。
按照以下说明设置 Cluster-to-Cluster Sync、连接集群并同步数据。
设置
定义源集群和目标集群
如果您已有一个MongoDB cluster (无论是自行管理还是在 MongoDB Atlas中托管),请将该集群用作源集群。 如果您没有可供使用的集群,则需要创建一个。
当目标集群和源集群都是副本集时,此快速入门适用。
要从副本集同步到分片分片集群,请参阅将副本集同步到分片集群。 要在分分片的集群之间进行同步,请参阅同步分片集群。
提示
您可以在相同或不同MongoDB版本上的集群之间进行迁移。 有关MongoDB 服务器版本兼容性或跨版本迁移的更多信息,请参阅MongoDB Server版本兼容性。
目标副本集中的节点数不必等于源副本集中的节点数。
重要
目标集群必须有足够的磁盘存储,以容纳正在迁移的逻辑数据大小以及初始同步中的目标oplog条目。 示例,要迁移10 GB的数据,目标集群必须至少有 10 GB用于数据,另外 10 GB用于初始同步中的插入oplog条目。
要使用嵌入式验证,目标上必须有更大的oplog 。如果启用嵌入式验证程序并减小目标oplog的大小,则嵌入式验证程序可能无法跟上,从而导致 mongosync
出错。
如果需要减少目标oplog条目的开销并且嵌入式验证程序已禁用,则可以:
使用
oplogSizeMB
设置来减小目标集群的oplog大小。用于
oplogMinRetentionHours
设置来降低或删除目标集群的最短oplog保留期。
如果您的集群是自我托管的,则它们必须是 MongoDB Enterprise 集群。仅在有限的情况下,MongoDB Community Edition才支持Cluster-to-Cluster Sync。有关使用 Cluster-to-Cluster Sync with MongoDB Community Edition 的更多信息,请联系 MongoDB 销售代表。
定义管理用户
如果其中一个集群托管在 Atlas 中,或者其中一个需要身份验证,则必须创建一个在这两个集群中都具有权限的数据库用户。
源集群身份验证要求
源用户必须具有以下角色:
backup
角色
此外,源用户必须能够:
运行
getParameter
命令
目标集群身份验证要求
如果目标集群托管在 Atlas 中,则用户必须具有 Atlas 管理员角色。
集群身份验证说明
如要添加 Atlas 用户,请参阅:配置数据库用户。
要将用户添加到自管理集群,请参阅:在自管理部署上创建用户。
要验证用户权限,运行
db.getUser()
。
下载并安装 mongosync
mongosync
是连接源集群和目标集群的工具。 您可以在自己的硬件上托管mongosync
, mongosync
不必在托管 MongodDB 集群的硬件上运行。
要安装mongosync
:
为
mongosync
可执行文件找到与源集群和目标集群具有网络连接的主机服务器。下载适用于您的主机系统的
mongosync
包。解压
mongosync
包。mongosync
可执行文件位于bin
目录中。
有关特定于操作系统的安装说明,请参阅安装。
连接集群
设置连接字符串的格式
连接字符串包含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
。
初始化 mongosync
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"
初始化说明
在集群之间迁移数据
起始端点发起数据同步。 要开始同步,请使用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
,则可以调用 /commit
端点。请参阅完成切换进程。
mongosync
的命令接口是发布 HTTP API 的 HTTP 服务器。 要控制mongosync
,请使用 API 端点。 API 文档提供了有关使用以下端点的详细信息:
完成切换进程
您可以使用mongosync
切换进程最终完成迁移并将应用程序工作负载从源转移到目标集群。
有关更多信息,请参阅完成切换过程。
注意
HTTP API的默认端口为
27182
。 将--port
选项与mongosync
一起使用以配置另一个端口。mongosync
可以交换源集群和目标集群以启用反向同步。有关更多信息,请参阅
reverse
端点。mongosync
连接字符串中指定的用户必须对源集群和目标集群具有所需的权限。 这些权限会有所不同,具体取决于您的环境以及您是否要修改写入阻止设置或使用反向同步。要确定适合您的使用案例的正确用户权限,请参阅用户权限。
您可能需要在运行
mongosync
的主机上增加文件描述符ulimits
。这适用于任何类 UNIX 系统,尤其是 macOS,其默认值通常较低。请参阅 UNIX ulimit 设置。要估计初始同步所需的
oplog
大小,请参阅oplog 大小调整。