2015-09-04 52 views
6

我在测试用的本地环境中创建的分片。初始化脚本mongos和配置服务器MongoDB的分片

我在一台机器上有三台配置服务器,在同一台机器上有一台查询路由器,在两台不同机器上有两台数据节点。

一切工作正常,但我的问题是我不能让所有进程的积极运行在不同的端口,我没有任何启动/停止脚本。我最后在命令行上运行进程&以使其处于活动状态,这是保持进程活跃并且有时会自动死机的非常糟糕的方式。

请帮忙或提供一种使用脚本的方法,脚本还可以处理各种端口以激活单个机器上的所有进程。

回答

0

对于配置的服务器,我们可以使用下面的脚本:

#!/bin/bash 

### BEGIN INIT INFO 
# Provides:  MongoDB Config Server 
# Required-Start: $network 
# Required-Stop: $network 
# Default-Start: 2 3 4 5 
# Default-Stop: 0 1 6 
# Short-Description: Start/Stop MongoDB Config server 
### END INIT INFO 

start() { 
     /usr/bin/mongod --configsvr --dbpath /home/configdb/ --port 27018 & 
} 

stop() { 
     for a in `ps -ef | grep 27018 | awk '{print $2}'`; do kill -9 $a; done 
} 

case $1 in 
    start|stop) $1;; 
    restart) stop; start;; 
    *) echo "Run as $0 <start|stop|restart>"; exit 1;; 
esac 

我们可以使用脚本像下面的例子为query_router:

#!/bin/bash 

### BEGIN INIT INFO 
# Provides:  MongoDB Config Server 
# Required-Start: $network 
# Required-Stop: $network 
# Default-Start: 2 3 4 5 
# Default-Stop: 0 1 6 
# Short-Description: Start/Stop MongoDB Config server 
### END INIT INFO 

start() { 
     /usr/bin/mongos --configdb 192.168.3.187:27018 --port 27019 & 
} 

stop() { 
     for a in `ps -ef | grep 27019 | awk '{print $2}'`; do kill -9 $a; done 
} 

case $1 in 
    start|stop) $1;; 
    restart) stop; start;; 
    *) echo "Run as $0 <start|stop|restart>"; exit 1;; 
esac 

我们不能使用默认蒙戈配置mongos因为它还需要在启动时定义配置数据库和端口信息。

6

你不应该永远不会寻求从一个初始化脚本驱动多个实例,因为这会产生多余行政工作的整体数量,当你正在做启动/实例中的任何一个的关闭。

您应该看看每个数据库流程实例都有一个初始化脚本,因为这是Linux最佳实践。

大多数情况下,您应该能够使用通用的MongoDB提供的init脚本,然后为每个数据库实例创建一个重命名的副本。

然后,您应该为每个实例创建单独的配置文件,它应该包含稍有不同的配置和它自己的端口,自己的DBPATH和自己的日志文件上运行的每个实例。

然后,您可以将每个init脚本指向其实例的配置文件,并且所有内容都应按计划运行。

最后,内MongoDB的,你应该使用--fork选项,它提供了一个安全的方式从shell实例中分离的MongoDB。如果你绝对必须继续使用外壳叉(该&运营商),那么你应该在“nohup的”包装的MongoDB,以避免你的shell的终止封闭的实例。这看起来像这样: nohup <mongodb cmd and arguments> &

编辑: 您可以使用相同的过程来使用相同的init脚本来启动MongoS。您需要找到将mongod二进制文件设置为要执行的行的行。在所有debian衍生产品下,这将是DAEMON变量。将其更改为指向mongos而不是mongod,然后关闭。

+0

谢谢。我将为使用mongodb默认初始化脚本的其他实例创建init脚本,但是mongos和查询路由器又是如何工作的? 没有默认的初始化脚本。我想通过init脚本运行查询路由器和mongos。 –

+0

同样的原理可以应用于通过init脚本启动Mongos。除了所提及的所有其他更改外,您只需进入init脚本并修改init脚本中的DAEMON变量即可运行MongoS二进制文件。 – daveh

+0

请解释查询路由器的哪些变量.. –