ubuntu: запуск (запуск) второго экземпляра mongodb

стандартный скрипт выскочки, который поставляется с mongodb, отлично работает:

# Ubuntu upstart file at /etc/init/mongodb.conf

limit nofile 20000 20000

kill timeout 300 # wait 300s between SIGTERM and SIGKILL.

pre-start script
    mkdir -p /var/lib/mongodb/
    mkdir -p /var/log/mongodb/
end script

start on runlevel [2345]
stop on runlevel [06]

script
  ENABLE_MONGODB="yes"
  if [ -f /etc/default/mongodb ]; then . /etc/default/mongodb; fi
  if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon --start --quiet --chuid mongodb --exec  /usr/bin/mongod -- --config /etc/mongodb.conf; fi
end script

если я хочу запустить второй экземпляр mongod, я думал, что просто скопирую оба /etc/mongodb.conf ->/etc/mongodb2.conf и /etc/init/mongodb.conf ->/etc/init/mongodb2.conf и измените порт std в первом conf-файле. затем настройте сценарий выше, чтобы начать с вновь созданного /etc/mongodb2.conf.

Я могу тогда просто сказать start mongodb2и служба начинается ... но его убивают сразу после запуска. что мне изменить, чтобы получить оба процесса и бежать?

 # Ubuntu upstart file at /etc/init/mongodb2.conf

limit nofile 20000 20000

kill timeout 300 # wait 300s between SIGTERM and SIGKILL.

pre-start script
    mkdir -p /var/lib/mongodb2/
    mkdir -p /var/log/mongodb2/
end script

start on runlevel [2345]
stop on runlevel [06]

script
  ENABLE_MONGODB="yes"
  if [ -f /etc/default/mongodb ]; then . /etc/default/mongodb; fi
  if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon --start --quiet --chuid mongodb --exec  /usr/bin/mongod -- --config /etc/mongodb2.conf; fi
end script

6 ответов


Я не мог заставить "стандартный" скрипт выскочки работать (как описано выше), поэтому я изменил его следующим образом:

# Ubuntu upstart file at /etc/init/mongodb.conf

limit nofile 20000 20000

kill timeout 300 # wait 300s between SIGTERM and SIGKILL.

pre-start script
    mkdir -p /var/lib/mongodb/
    mkdir -p /var/log/mongodb/
end script

start on runlevel [2345]
stop on runlevel [06]

script

  exec sudo -u mongodb /usr/bin/mongod --config /etc/mongodb.conf

end script

и если вы хотите запустить другие экземпляры mongodb, просто скопируйте *.conf файлы и внести изменения в /etc/mongodb2.conf и /etc/init/mongodb2.conf

# Ubuntu upstart file at /etc/init/mongodb2.conf

limit nofile 20000 20000

kill timeout 300 # wait 300s between SIGTERM and SIGKILL.

pre-start script
    mkdir -p /var/lib/mongodb2/
    mkdir -p /var/log/mongodb2/
end script

start on runlevel [2345]
stop on runlevel [06]

script

  exec sudo -u mongodb /usr/bin/mongod --config /etc/mongodb2.conf

end script

Я думаю, единственное, что не работает restart mongodb - вы stop а то start снова ...


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

другой способ-использовать создание pid-файла Start-stop-daemon. Например, у меня есть 2 mongos, работающих на одном сервере с 2 различными сценариями запуска, и две волшебные строки:

exec start-stop-daemon --make-pidfile --pidfile /var/run/mongodb-router.pid --start --startas /data/bin/mongos --chuid mongo -- --logappend --logpath /mnt/log/mongos.log --configdb mongo2-config01,mongo2-config02,mongo2-config03


exec start-stop-daemon --make-pidfile --pidfile /var/run/mongodb-routerrt.pid --start --startas /data/bin/mongos --chuid mongo -- --logappend --logpath /mnt/log/mongos-rt.log --configdb mongort-config01,mongort-config02,mongort-config03 --port 27027

обратите внимание, что у вас есть ' --pidfile/var/run / mongodb-router.pid 'и другой имеет' --pidfile/var/run / mongodb-routerrt.пид и другой порт.


Да я столкнулся с этой же проблемой сегодня. Причина в том, что сценарий по умолчанию использует демон start-stop-для запуска mongo, который специально разработан для обеспечения работы только одной версии процесса. Вы уже поняли, что один из способов исправить это-не использовать Start-stop-daemon и запустить двоичный файл самостоятельно. Я тоже так делаю, но мне было бы интересно узнать, есть ли лучший способ.


вот как я это делаю. 2 экземпляра mongodb, с Start-stop-daemon, на том же сервере

это мои конфигурации Start-stop-daemon

exec start-stop-daemon --make-pidfile --pidfile /var/lib/mongodb/db1.pid --start --quiet --chuid mongodb --name mongod1 --exec /usr/bin/mongod -- --config etc/mongodb1.conf

exec start-stop-daemon --make-pidfile --pidfile /var/lib/mongodb/db2.pid --start --quiet --chuid mongodb --name mongod2 --exec /usr/bin/mongod -- --config etc/mongodb2.conf

обратите внимание . Это сделало трюк для меня


два демона не могут прослушивать один и тот же tcp-порт, поэтому вам нужно изменить параметр --port mongod2 для прослушивания другого порта.
два демона не могут совместно использовать один и тот же dir данных, поэтому вам нужно изменить параметр --data-dir mongod2.


Я считаю, что ниже выскочка работает для меня

# Ubuntu upstart file at /etc/init/mongodb.conf

description "manage mongodb instance"

start on runlevel [2345]
stop on runlevel [06]

limit nofile 20000 20000

kill timeout 300 # wait 300s between SIGTERM and SIGKILL.

env MONGODB_USER=mongodb
env MONGODB_DATA=/var/lib/mongodb/
env MONGODB_LOG=/var/log/mongodb/
env MONGODB_PID=/var/run/mongodb.pid

pre-start script
  if [ ! -d $MONGODB_DATA ]; then
    mkdir -p $MONGODB_DATA
    chown $MONGODB_USER:$MONGODB_USER $MONGODB_DATA
  fi

  if [ ! -d $MONGODB_LOG ]; then
    mkdir -p $MONGODB_LOG
    chown $MONGODB_USER:$MOGODB_USER $MONGODB_LOG
  fi
end script

exec start-stop-daemon --start --pidfile $MONGODB_PID --chuid $MONGODB_USER:$MONGODB_USER --exec /usr/bin/mongod -- --config /etc/mongodb/mongodb.conf

pre-stop exec start-stop-daemon --signal QUIT --stop --quiet --pidfile $MONGODB_PID --chuid $MONGODB_USER:$MONGODB_USER --exec /usr/bin/mongod -- --config /etc/mongodb/mongodb.conf