ubuntu:启动(upstart)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和更改第一个conf文件中的std端口。 然后调整上面的脚本,从新创build的/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 

我无法得到“标准”新贵脚本的工作(如上所述),所以我改变了这样的:

 # 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

我知道已经有一个可以接受的解决方案,但是我认为这个更优雅。

另一种方法是使用start-stop-daemon的pid文件创建。 例如,我有两个不同的暴发户脚本在同一台服务器上运行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”和一个不同的端口。

是的,我今天遇到了同样的问题。 原因是默认脚本使用start-stop-daemon来启动mongo,这是专门设计用于确保只有一个进程版本正在运行。 你已经知道解决这个问题的一个方法是不使用start-stop-daemon并自己启动二进制文件。 我也是这样做的,但是如果有更好的方法,我会好奇的。

这是我如何做到的。 在同一台服务器上有2个具有start-stop-daemon的mongodb实例

那是我的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选项。 这对我来说是诀窍

这两个守护进程不能在同一个tcp端口上侦听,因此你必须改变mongod2的–port参数来侦听不同的端口。
这两个守护进程不能共享相同的数据目录,因此您必须更改mongod2的–data-dir参数。

我发现下面的新贵为我工作

 # 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