Overview
Mongosync 会将数据从一个集群复制并写入到另一个集群,直到 完成同步。您可以使用此工具在MongoDB集群之间执行一次性数据迁移,同时最短停机时间。
有关执行期间的 mongosync 和目标集群行为的详细信息,请参阅中间同步注意事项。
mongosync 二进制文件是 Mongosync 中使用的主节点 (primary node in the replica set)进程。
每个集群都可以是副本集或分片集群。 如果其中一个是分片集群,请参阅
mongosync的分片集群限制。分片集群不需要具有相同数量的分片。
目标集群的版本必须与源集群的版本相同,或者最多比源集群早两个版本。 补丁版本并不重要,只要满足最低补丁版本要求即可。
源集群在提交之前可以保持活动状态,因为
mongosync会在迁移期间同步源集群上的写入,直到调用提交为止。
重要
在您对commit mongosynccanWrite调用 且 成功返回true 之前,目标集群上的已迁移集合不能用于接受应用程序读取或写入流量。请勿使用mongosync 维护用于灾难恢复、分析或其他类似使用案例的从节点(secondary node from replica set)集群。
按照以下说明设立Mongosync、连接集群并同步数据。
设置
定义源集群和目标集群
如果您已有一个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仅在有限的情况下支持 Mongosync。有关将 Mongosync 与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 大小调整。