Подтвердить что ты не робот

Ubuntu: начать (выскочить) второй экземпляр mongodb

стандартный выскочек script, который поставляется с 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 файле. затем настройте script выше, чтобы начать с вновь созданного /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
4b9b3361

Ответ 1

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

# 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 снова...

Ответ 2

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

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

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.pid' и другой порт.

Ответ 3

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

Ответ 4

Вот как я это делаю. 2 экземпляра mongodb, с пуском-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

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

Ответ 5

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

Ответ 6

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

# 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