Cluster-to-Cluster Sync 快速入门
在此页面上
Overview
MongoDB Cluster-to-Cluster Sync连接MongoDB集群并提供一种在它们之间同步数据的方法。 建立连接的工具是 mongosync 。 有关更多详细信息,请参阅Cluster-to-Cluster Sync文档的其余部分。
mongosync
在两个集群之间同步数据。
每个集群都可以是副本集或分片集群。 如果其中一个是分片集群,请参阅
mongosync
的分片集群限制。分片集群不需要具有相同数量的分片。
目标集群的版本必须与源集群的版本相同,或者最多比源集群早两个版本。 补丁版本并不重要,只要满足最低补丁版本要求即可。
源集群在提交之前可以保持活动状态,因为
mongosync
会在迁移期间同步源集群上的写入,直到调用提交为止。
按照以下说明设置 Cluster-to-Cluster Sync、连接集群并同步数据。
设置
定义源集群和目标集群
如果您已有一个MongoDB cluster (无论是自行管理还是在 MongoDB Atlas中托管),请将该集群用作源集群。 如果您没有可供使用的集群,则需要创建一个。
当目标集群和源集群都是副本集时,此快速入门适用。
要从副本集同步到分片分片集群,请参阅将副本集同步到分片集群。 要在分分片的集群之间进行同步,请参阅同步分片集群。
目标副本集中的节点数不必等于源副本集中的节点数。
重要
目标集群必须有足够的磁盘存储,以容纳正在迁移的逻辑数据大小以及初始同步中的目标oplog条目。示例,要迁移10 GB的数据,目标集群必须至少有 10 GB用于数据,另外 10 GB用于初始同步中的插入oplog条目。
要减少目标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
,则集群处于同步状态,并且目标集群会持续从源集群复制数据。
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 大小调整。