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
Ответы
Ответ 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