我在测试用的本地环境中创建的分片。初始化脚本mongos和配置服务器MongoDB的分片
我在一台机器上有三台配置服务器,在同一台机器上有一台查询路由器,在两台不同机器上有两台数据节点。
一切工作正常,但我的问题是我不能让所有进程的积极运行在不同的端口,我没有任何启动/停止脚本。我最后在命令行上运行进程&
以使其处于活动状态,这是保持进程活跃并且有时会自动死机的非常糟糕的方式。
请帮忙或提供一种使用脚本的方法,脚本还可以处理各种端口以激活单个机器上的所有进程。
我在测试用的本地环境中创建的分片。初始化脚本mongos和配置服务器MongoDB的分片
我在一台机器上有三台配置服务器,在同一台机器上有一台查询路由器,在两台不同机器上有两台数据节点。
一切工作正常,但我的问题是我不能让所有进程的积极运行在不同的端口,我没有任何启动/停止脚本。我最后在命令行上运行进程&
以使其处于活动状态,这是保持进程活跃并且有时会自动死机的非常糟糕的方式。
请帮忙或提供一种使用脚本的方法,脚本还可以处理各种端口以激活单个机器上的所有进程。
对于配置的服务器,我们可以使用下面的脚本:
#!/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因为它还需要在启动时定义配置数据库和端口信息。
你不应该永远不会寻求从一个初始化脚本驱动多个实例,因为这会产生多余行政工作的整体数量,当你正在做启动/实例中的任何一个的关闭。
您应该看看每个数据库流程实例都有一个初始化脚本,因为这是Linux最佳实践。
大多数情况下,您应该能够使用通用的MongoDB提供的init脚本,然后为每个数据库实例创建一个重命名的副本。
然后,您应该为每个实例创建单独的配置文件,它应该包含稍有不同的配置和它自己的端口,自己的DBPATH和自己的日志文件上运行的每个实例。
然后,您可以将每个init脚本指向其实例的配置文件,并且所有内容都应按计划运行。
最后,内MongoDB的,你应该使用--fork选项,它提供了一个安全的方式从shell实例中分离的MongoDB。如果你绝对必须继续使用外壳叉(该&运营商),那么你应该在“nohup的”包装的MongoDB,以避免你的shell的终止封闭的实例。这看起来像这样: nohup <mongodb cmd and arguments> &
编辑: 您可以使用相同的过程来使用相同的init脚本来启动MongoS。您需要找到将mongod
二进制文件设置为要执行的行的行。在所有debian衍生产品下,这将是DAEMON
变量。将其更改为指向mongos
而不是mongod
,然后关闭。
谢谢。我将为使用mongodb默认初始化脚本的其他实例创建init脚本,但是mongos和查询路由器又是如何工作的? 没有默认的初始化脚本。我想通过init脚本运行查询路由器和mongos。 –
同样的原理可以应用于通过init脚本启动Mongos。除了所提及的所有其他更改外,您只需进入init脚本并修改init脚本中的DAEMON变量即可运行MongoS二进制文件。 – daveh
请解释查询路由器的哪些变量.. –