mongodb - 如何扩展 MongoDB?

标签 mongodb amazon-ec2 amazon-web-services scalability amazon-ebs

我知道 MongoDB 可以垂直扩展。如果我的磁盘空间不足怎么办?

我目前正在使用带有 EBS 的 EC2。如您所知,我必须为 EBS 分配固定大小。

如果 MongoDB 的增长大于 EBS 的大小怎么办?我是否必须创建更大的 EBS 并复制并粘贴文件?

或者我们应该启动更多 MongoDB 实例并每个实例连接到不同的 EBS 磁盘吗?在这种情况下,我可以连接到不同数据库的不同实例。

最佳答案

如果您的磁盘空间不足,您显然需要购买更大的磁盘。

迁移数据的方法有多种,这实际上取决于您需要的正常运行时间类型。当然,第一步涉及捆绑机器并创建新卷。

这些技巧从最简单到最难。

你能让数据库完全离线几分钟吗?

如果是这样,请执行以下操作(通过副本迁移):

  1. 在服务器上安装新的 EBS。
  2. 停止您的应用连接到 Mongo。
  3. 关闭 mongod 并等待所有内容写入(检查日志)
  4. 将所有数据文件(可能还有日志)复制到新的 EBS 卷。
  5. 在进行复制时,更新您的 mongod 启动脚本(或配置文件)以指向新卷。
  6. 启动 mongod 并检查连接
  7. 重新启动您的应用。

您能让数据库离线几分钟吗?

如果是这样,请执行此操作(slaving 并切换):

  1. 启动一个新实例并在该服务器上安装新的 EBS。
  2. 安装/启动 mongod 作为指向当前数据库的 --slave。 (您可能需要重新启动当前的 --master)
  3. 从站将进行新的同步。一旦从站更新为最新,您将进行“切换”(后续步骤)。
  4. 关闭系统写入。
  5. 关闭原来的 mongod 进程。
  6. 重新启动"new"mongod 作为主节点而不是从节点。
  7. 重新激活指向新主服务器的系统写入。

正确完成最后三个步骤可以在几分钟甚至几秒钟内完成。

您不能承受任何停机时间吗?

如果是这样,请执行此操作 ( master-master ):

  1. 启动一个新实例并在该服务器上安装新的 EBS。
  2. 安装/启动 mongod 作为当前数据库的主服务器和从服务器。 (可能需要重新启动当前作为主机,最小化停机时间?)
  3. 新计算机应该进行全新同步。
  4. 新计算机更新后,将系统切换到新服务器。

我知道这最后一个版本实际上是最好的,但它可能有点冒险(截至撰写本文时)。原因很简单,老实说,我对“主-主”复制有很多问题,特别是如果您不从两个事件开始的话。

如果您打算使用此方法,我强烈建议您先进行一次较小的练习。如果这里发生了爆炸,Mongo 可能会简单地删除所有数据文件,这将产生删除更多内容的效果。

如果您获得了一个好的版本,请发布命令,我希望看到它的实际效果。

关于mongodb - 如何扩展 MongoDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2802313/

相关文章:

node.js - 遍历数组并运行 Mongo 查询以修改相同的数组

node.js - 在 Node.JS Web 应用程序中使用 mongoDB

amazon-ec2 - 当 ELB 说它不可用时,如何让 EC2 实例自动重启?

spring - 我应该如何部署我的所有 API?

amazon-web-services - 是否可以在 Init 容器中加载 AWS SSM ARN 并在主容器中使用

node.js - 返回前更新 mongoose 文档

mongodb - 我无法从结果中过滤掉 _id?

amazon-web-services - 我可以垂直扩展 Amazon 实例吗?

linux - EBS 未在亚马逊网络服务中显示正确的磁盘大小

amazon-web-services - 在本地使用 Cognito [离线]