Несколько монго на одном сервере

11

Я не говорю о шардинге . У нас был тестовый сервер (linux), и уже есть тот, mongoкоторый принадлежит другому проекту / подгруппе. Можно ли запускать несколько, изолированные экземпляры из mongodbодной машины? Как мне это сделать?

ом Ном ном
источник

Ответы:

14

Да, вы можете сделать это, указав другие номера портов и каталоги данных для других экземпляров mongod, а затем указав новый номер порта в клиенте.

Например:

./mongod --dbpath /foo/bar/otherpath --port some_other_port

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

dsolimano
источник
1
Можно ли указать это в mongodb.conf? Или я должен был бы создать сценарий для этого? (на * nix)
Джастин
@Justin, вы, безусловно, можете указать эти параметры в файле конфигурации - см. Mongodb.org/display/DOCS/File+Based+Configuration . Но тогда вам все равно нужно передать разные конфигурационные файлы в разные экземпляры.
Дсолимано
Спасибо @dsolimano, у меня есть два скрипта в rc.d для двух экземпляров Mongo. Я указал разные пути для db, pid, logging и дал им разные порты для прослушивания. Он также разветвляется, и при запуске второго скрипта происходит сбой, так как mongo уже запущен (первый экземпляр). Итак, я думаю, что мой реальный вопрос был (мне не повезло найти это в сети): можете ли вы запустить два разветвленных экземпляра одновременно? Спасибо
Джастин
@ Джастин, я думаю, что это, вероятно, поднимается до уровня нового вопроса, возможно, вы должны задать его на этом сайте? Похоже, что то, как вы запускаете Mongo, вызывает проблемы.
Дсолимано
3

Шаги, которые я предпринял:

  1. Скопируйте файл конфигурации /etc/mongod.conf в mongod2.conf, а также в mongod3.conf
  2. Отредактируйте файлы conf, чтобы иметь разные порты и разные пути к базе данных
  3. Скопируйте стартовый скрипт init.d /etc/init.d/mongod в mongod2, а также в mongod3
  4. Скопируйте двоичный файл mongod / usr / bin / mongod в / usr / bin / mongod2, а также в / usr / bin / mongod3
  5. Отредактируйте стартовые скрипты init.d и измените следующее:

    CONFIGFILE = "/ etc / mongod2.conf" (mongod3.conf соответственно)

    ....

    mongod = $ {MONGOD- / usr / bin / mongod2} (mongod3 соответственно)

Заменял / var / lock / subsys / mongod на / var / lock / subsys / mongod2 (соответственно mongod3) везде, где я его нашел.

Не поддавайтесь искушению заменить mongod.lock на mongod2.lock (или mongod3.lock, соответственно). Они находятся в разных папках (папки базы данных разные) и не будут конфликтовать.

Теперь я могу

service mongod start|stop|status

service mongod2 start|stop|status

service mongod3 start|stop|status

а также

mongo --port <port_number> 

для каждого экземпляра Монго (запомните настройки порта из файлов conf)

Я не знаю ни о каком побочном эффекте переименования двоичного файла mongod ..

Надеюсь это поможет.

[Позднее редактирование] Чтобы запустить экземпляры автоматически, просто введите ln -s /etc/init.d/mongod2 /etc/rc.d/rc3.d/S86mongod и ln -s /etc/init.d/mongod3 / etc / rc .d / rc3.d / S87mongod :)

aemilianvs
источник
Ах, хороший! делал то же самое без особой удачи раньше, потому что я не думал, что мы должны дублировать сам исполняемый файл mongod Все хорошо сейчас.
Бах
В моем случае, используя Ubuntu 16.01, не было никаких init.dсценариев. Можете ли вы предоставить init.dсодержание сценария?
Шубхам А.