前言
随着业务的发展和数据量的增长,我们的 MongoDB 数据库也在不断地进行扩容或搬迁。而对于在线迁移这一方案,相对于传统停机迁移,因为不需要停机,能够保证业务的连续性,具有更好的迁移体验和更快的迁移速度,越来越多地成为了迁移 MongoDB 中的主流方案。
下面,我们将详细介绍如何在线迁移 MongoDB,包括常见的三种迁移方式:复制集迁移
、分片集群迁移
、Standalone 迁移
。
复制集迁移
复制集迁移是使用较多的一种 MongoDB 在线迁移方式,其主要步骤如下:
- 添加新节点到复制集中;
- 开启数据迁移;
- 确认数据同步完成;
- 从源节点上剔除。
下面为具体实现:
添加新节点到复制集中
在进行迁移前,需要确保一个新节点已经准备好并已经安装 MongoDB ,添加该节点到正在运行的复制集中。在连接到源节点的 mongo shell 中,执行如下命令:
rs.add("NEW_NODE_HOST:PORT")
其中,NEW_NODE_HOST
和 PORT
分别表示新节点的地址和端口。添加成功后,可通过命令 rs.status()
查看新节点是否成功加入集合。
开启数据迁移
在确认复制集的节点数目已经达到预期数后,需要开启数据迁移。在连接到源节点的 mongo shell 中,执行如下命令:
rs.stepDown()
等待当前源节点成为 SECONDARY
后,再执行如下命令:
rs.slaveOk()
这个时候新节点就可以开始同步数据了。当新节点的状态改变为 SECONDARY
时,数据迁移就完成了。
确认数据同步完成
在数据迁移完成之后,我们会执行一些验证的任务,以确保数据已经完全迁移。 我们可以在新节点的 mongo shell 中,执行如下命令,查看新节点和源节点的 Oplog 是否完全一致:
db.oplog.rs.find({}).sort({$natural : -1})
确认 Oplog 一致后,可以继续下一步迁移操作。
从源节点上剔除
最后一步是从源节点上剔除,执行如下命令:
rs.remove("OLD_NODE_HOST:PORT")
其中,OLD_NODE_HOST
和 PORT
分别表示源节点的地址和端口。删除成功后,我们的迁移就完成了。
分片集群迁移
我们可以使用 MongoDB 的 MMS 管理服务(目前更名为 ATLAS 了)来建立两个 mongod 实例集群(以下简称:源端集群和目标集群),一份数据即可在这两个集群间心跳同步。下面为具体实现:
创建 MMS 集群服务
首先需要登录 MMS 管理界面,然后在 Services -> Deploy a New Cluster 页面创建新的集群服务。
创建目标集群
在 Deploy Cluster
页面,选择 Other Cloud Provider
,然后选择源端集群数据库的相同版本,之后会要求选择目标集群中的机器数量和机器规格等信息。
创建源端集群
同样在 Deploy Cluster
页面,选择 Current Cloud Provider
, MongoDB 的 MMS 管理服务可快速为你创建一份测试环境与线上环境保持一致的源端集群。
配置同步
接下来,在源端集群的 Cluster Settings -> Sync To
页面填写目标集群的连接信息,激活同步。
等待同步完成之后,就可以把业务流量切换到目标集群上,方便地完成数据迁移。
Standalone 迁移
在没有 MongoDB 集群集群的条件下,我们可以使用 Standalong 迁移的方式来迁移 MongoDB 数据库。以下为具体实现:
安装 MongoDB
首先需要安装 MongoDB 服务器,官方提供了多种安装方式,根据实际情况选择适合自己的安装方式。
导出数据
接下来,我们需要从旧服务器中将数据导出,使用命令行工具 mongodump
来将 db 和 collection 中的数据导出到一个指定的目录中。
mongodump --host old.ip --port 27017 --authenticationDatabase admin --username root --password password --db db_name --collection collection_name --out ./dump/
其中,old.ip
表示的是旧服务器的 IP 地址,需要根据实际情况进行修改。导出会将数据文件存储到 ./dump/db_name/collection_name.bson
文件中。
导入数据
将导出的数据文件拷贝到新服务器上,执行命令行工具 mongorestore
来将数据导入到 MongoDB 服务器中:
mongorestore --host new.ip --port 27017 --authenticationDatabase admin --username root --password password ./dump/
其中,new.ip
表示新服务器的 IP 地址,需要根据实际情况进行修改。导入会将数据文件从 ./dump/
目录中恢复出来,写回 MongoDB 服务器中。
验证数据
最后,确认数据导入成功并且能够正常使用。可以在新服务器的 mongo shell 中,执行如下命令来确认数据:
use db_name db.collection_name.count()
如果返回的数值和源端集群中的数据一致,证明数据迁移成功。
总结
通过本文,我们详细介绍了 MongoDB 的三种在线迁移方案,即复制集迁移、分片集群迁移、Standalone 迁移。每种方案有各自的优缺点,可根据业务情况进行选择。希望这篇文章对 MongoDB 在线迁移方案感兴趣的开发人员有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65459d807d4982a6ebf3fbd6