Ubuntu: начать (выскочить) второй экземпляр mongodb - PullRequest
12 голосов
/ 04 сентября 2011

стандартный скрипт upstart, который поставляется с 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 и измените стандартный порт в первом 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 ]

10 голосов
/ 13 сентября 2011

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

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

5 голосов
/ 27 октября 2011

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

Другой способ - использовать pid-файл start-stop-daemon. Например, у меня есть 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.pid и другой порт.

2 голосов
/ 15 августа 2013

Вот как я это делаю.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

, обращают внимание на параметр --name.Это помогло мне

2 голосов
/ 05 октября 2011

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

1 голос
/ 27 мая 2013

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

# 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
1 голос
/ 05 сентября 2011

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

...