ubuntu:启动(upstart)mongodb的第二个实例

时间:2011-09-04 15:10:58

标签: linux mongodb ubuntu daemon upstart

mongodb附带的标准upstart脚本可以正常工作:

# 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端口。然后调整上面的脚本以从新创建的/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 个答案:

答案 0 :(得分:10)

我无法使用“标准”新贵脚本(如上所述),所以我改变了这样:

# 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 ......

答案 1 :(得分:5)

我知道已经有一个公认的解决方案,但我认为这个更优雅。

另一种方法是使用start-stop-daemon的pid文件创建。例如,我有2个mongos在同一台服务器上运行,有2个不同的upstart脚本,两条魔术线是:

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 :(得分:2)

是的,我今天遇到了同样的问题。原因是默认脚本使用start-stop-daemon启动mongo,mongo专门用于确保只运行一个版本的进程。你已经发现解决这个问题的一种方法是不使用start-stop-daemon并自己启动二进制文件。这就是我这样做的方式,但我很想知道是否有更好的方法。

答案 3 :(得分:2)

我就是这样做的。 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选项。这对我来说是个窍门

答案 4 :(得分:1)

两个守护进程无法侦听相同的tcp端口,因此您必须更改mongod2的--port参数才能侦听其他端口。
两个守护进程无法共享相同的数据目录,因此您必须更改mongod2的--data-dir参数。

答案 5 :(得分:1)

我发现下面的暴发户为我工作

# 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