Как масштабировать MongoDB? - PullRequest
10 голосов
/ 10 мая 2010

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

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

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

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

Ответы [ 4 ]

9 голосов
/ 25 мая 2010

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

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

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

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

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

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

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

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

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

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

Разве вы не можете позволить себе простои?

Если это так, сделайте это ( мастер-мастер ):

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

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

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

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

3 голосов
/ 11 мая 2010

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

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

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

1 голос
/ 12 мая 2010

Вы можете подчинить больший диск меньшему, пока он не захватит

или

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

0 голосов
/ 25 июня 2010

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

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

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

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

...