Как масштабировать MongoDB?

Я знаю, что MongoDB может масштабироваться вертикально. Что делать, если у меня закончился диск?

В настоящее время я использую EC2 с EBS. Как вы знаете, я должен назначить EBS для фиксированного размера.

Что, если рост MongoDB больше, чем размер EBS? Нужно ли мне создавать EBS большего размера и копировать и вставлять файлы?

Или мы должны запустить больше экземпляров MongoDB и каждый из них подключаться к другому диску EBS? В таком случае я мог бы подключиться к другому экземпляру для разных баз данных.


person Terence Tsang    schedule 10.05.2010    source источник
comment
Этот вопрос считается ответом. Прошло уже несколько месяцев, а вы ничего не отметили.   -  person Gates VP    schedule 10.11.2010


Ответы (4)


Если у вас заканчивается диск, вам, очевидно, нужен диск большего размера.

Существует несколько способов переноса ваших данных, все зависит от типа необходимого вам времени безотказной работы. Первые шаги, конечно же, включают в себя объединение машины и создание нового тома.

Эти советы идут от самого простого к самому сложному.

Можете ли вы полностью отключить базу данных на несколько минут?

Если это так, сделайте это (миграция по копии):

  1. Смонтируйте новый EBS на сервере.
  2. Не позволяйте вашему приложению подключаться к Mongo.
  3. Выключите mongod и подождите, пока все напишет (проверьте логи)
  4. Скопируйте все файлы данных (и, возможно, журналы) на новый том EBS.
  5. Пока происходит копирование, обновите стартовый скрипт mongod (или файл конфигурации), чтобы он указывал на новый том.
  6. Запустите mongod и проверьте соединение
  7. Перезапустите приложение.

Можете ли вы перевести базу данных в автономный режим всего на несколько минут?

Если это так, сделайте следующее (подчинение и переключитесь):

  1. Запустите новый экземпляр и смонтируйте новый EBS на этом сервере.
  2. Установите/запустите mongod как --slave, указывающий на текущую базу данных. (вам может потребоваться перезапустить текущий как --master)
  3. Ведомый выполнит новую синхронизацию. Как только ведомое устройство будет обновлено, вы сделаете «переключение» (следующие шаги).
  4. Отключите запись из системы.
  5. Завершите исходный процесс mongod.
  6. Перезапустите «новый» mongod в качестве мастера вместо ведомого.
  7. При повторной активации система пишет указывая на нового мастера.

При правильном выполнении последние три шага могут быть выполнены за минуты или даже секунды.

Можете ли вы не позволить себе простоя?

Если это так, сделайте следующее (master-master):

  1. Запустите новый экземпляр и смонтируйте новый EBS на этом сервере.
  2. Установите / запустите mongod в качестве мастера и подчиненного устройства для текущей базы данных. (может потребоваться перезапустить текущий как ведущий, минимальное время простоя?)
  3. Новый компьютер должен выполнить новую синхронизацию.
  4. Как только новый компьютер будет обновлен, переключите систему так, чтобы она указывала на новый сервер.

Я знаю, кажется, что эта последняя версия на самом деле лучшая, но она может быть немного рискованной (на момент написания этой статьи). Причина просто в том, что у меня, честно говоря, было много проблем с репликацией «мастер-мастер», особенно если вы не начинаете с обоих активных.

Если вы планируете использовать этот метод, я настоятельно рекомендую сначала небольшой пробный забег. Если что-то здесь сработает, Mongo может просто стереть все ваши файлы данных, что приведет к удалению большего количества вещей.

Если вы получите хорошую версию этого, опубликуйте команды, я хотел бы увидеть это в действии.

person Gates VP    schedule 24.05.2010

Разве E в EBS не означает эластичный, означающий что-то вроде изменения размера на лету?

В настоящее время команда MongoDB работает над завершением сегментации, которая позволит вам горизонтально масштабироваться путем раздельного разделения данных на разных серверах. Дайте ему месяц или два, и он будет работать нормально. Разработчики неплохо держат свои обещания.

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

person Thomas R. Koll    schedule 10.05.2010
comment
Отметил с благодарностью. Кстати, вы должны назначить размер тому EBS, прежде чем монтировать его на сервер. После того, как диск создан, вы не можете изменить его размер. - person Terence Tsang; 11.05.2010
comment
@ terence410, интересно, почему это называется эластичным блочным хранилищем, когда оно в значительной степени исправлено. - person CMircea; 12.05.2010
comment
@MirceaChirea он эластичен, потому что вы можете легко создавать новые тома в соответствии со своими потребностями, когда вам нужно. - person fabspro; 13.03.2013

Вы можете отогнать больший диск от меньшего, пока он не догонит

or

fsync+lock и сделайте снимок файловой системы и скопируйте его на больший диск.

person kristina    schedule 11.05.2010

ну, сейчас я использую Mongo DB. Я очень поражен производительностью, которую он сгенерировал, особенно при некоторой простой сортировке.

Я считаю, что это хороший инструмент для простой логики веб-приложений. Остается заботиться о масштабировании и резервном копировании. Я буду продолжать исследовать.

Единственный недостаток, который у меня есть, это то, что у меня не было хороших инструментов для раскрытия данных, хранящихся внутри. Например, я хочу поместить свои журналы из MYSQL в Mongo. Однако мне довольно сложно просматривать журнал. Раньше я мог использовать запрос MYSQL, чтобы легко получить то, что я хочу.

В любом случае, это хороший инструмент, и я буду продолжать его использовать.

person Terence Tsang    schedule 25.06.2010