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