如何扩展MongoDB?

时间:2010-05-10 11:47:18

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

我知道MongoDB可以垂直扩展。如果我的磁盘用完了怎么办?

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

如果MongoDB增长大于EBS规模怎么办?我是否必须创建更大的EBS和Copy&粘贴文件?

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

4 个答案:

答案 0 :(得分:9)

如果你的磁盘用完了,你显然需要更大的磁盘。

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

这些提示从最简单到最难。

您可以将数据库完全脱机几分钟吗?

如果是这样,请执行此操作(通过复制进行迁移):

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

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

    1. 启动新实例并在该服务器上安装新EBS。
    2. 安装/启动mongod作为--slave指向当前数据库。 (您可能需要重新启动当前的--master)
    3. 奴隶将进行新的同步。一旦奴隶是最新的,你将进行“切换”(下一步)。
    4. 关闭系统写入。
    5. 关闭原来的mongod进程。
    6. 重新启动“新”mongod作为主人而不是奴隶。
    7. 重新激活指向新主服务器的系统写入。
    8. 正确完成后三个步骤可能会在几分钟甚至几秒钟内完成。

      你能负担不起任何停机时间吗?

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

      1. 启动新实例并在该服务器上安装新EBS。
      2. 安装/启动mongod作为当前数据库的主服务器和从服务器。 (可能需要重新启动当前为主,最小停机时间?)
      3. 新计算机应该进行全新同步。
      4. 一旦新计算机处于最新状态,请将系统切换到指向新服务器。
      5. 我知道这个最后一个版本看起来确实是最好的,但它可能有点冒险(截至撰写本文时)。原因很简单,我确实在“Master-Master”复制方面遇到了很多问题,特别是如果你不从两个活动开始。

        如果您计划使用此方法,我强烈建议先进行较小的练习。如果有什么炸弹在这里,Mongo可能会简单地擦除你的所有数据文件,这会产生更多的东西。

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

答案 1 :(得分:3)

EBS中的 E 不代表弹性意味着像动态调整大小一样吗?

目前MongoDB团队正致力于完成分片,这将允许您通过在不同服务器上单独分区数据来进行水平扩展。给它一两个月,它会工作正常。开发人员非常善于兑现承诺。

http://api.mongodb.org/wiki/current/Sharding%20Introduction.html http://api.mongodb.org/wiki/current/Sharding%20Limits.html

答案 2 :(得分:1)

你可以将较大的磁盘从较小的磁盘上移除,直到它被赶上

fsync +锁定并获取文件系统快照并将其复制到更大的磁盘上。

答案 3 :(得分:0)

好吧,我现在正在使用Mongo DB。我对它产生的性能非常惊讶,特别是在一些简单的排序上。

我相信它是简单的Web应用程序逻辑的好工具。剩下的问题是如何扩展和备份。我会继续探索。

我唯一的缺点是我没有任何好的工具来揭示存储在里面的数据。例如,我想将我从MYSQL的日志记录也放入Mongo。但是,我很难查看日志。以前,我可以使用MYSQL查询来轻松获取我想要的东西。

无论如何,这是一个很好的工具,我将继续使用它。