Linux mongos的初始化脚本和MongoDB分片的配置服务器

Linux mongos的初始化脚本和MongoDB分片的配置服务器,linux,mongodb,shell,sharding,database,Linux,Mongodb,Shell,Sharding,Database,为了测试,我在本地环境中创建了一个切分 我在一台机器上有三个配置服务器,在同一台机器上有一个查询路由器,在两台不同的机器上有两个数据节点 一切正常,但我的问题是我无法在不同的端口上保持所有进程的活动运行,因为我没有任何启动/停止脚本。我在命令行上运行进程,最后使用&使其处于活动状态,这是保持进程处于活动状态的非常糟糕的方法,有时它会自动消失 请帮助或提供一种使用脚本的方法,并且脚本可以处理各种端口以激活单个计算机上的所有进程。您永远不应该希望从一个初始化脚本驱动多个实例,因为当您启动/关闭任何一

为了测试,我在本地环境中创建了一个切分

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

一切正常,但我的问题是我无法在不同的端口上保持所有进程的活动运行,因为我没有任何启动/停止脚本。我在命令行上运行进程,最后使用
&
使其处于活动状态,这是保持进程处于活动状态的非常糟糕的方法,有时它会自动消失


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

您永远不应该希望从一个初始化脚本驱动多个实例,因为当您启动/关闭任何一个实例时,这会产生大量多余的管理工作

您应该为每个数据库进程实例寻找一个init脚本,因为这是Linux的最佳实践

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

然后,您应该为每个实例创建单独的配置文件,这些配置文件应该包含稍微不同的配置,并在其自己的端口、自己的dbpath和自己的日志文件上运行每个实例

然后,您可以将每个init脚本指向其实例的配置文件,一切都应该按计划进行

最后,在MongoDB中,您应该使用--fork选项,它提供了一种从shell实例分离MongoDB的安全方法。如果您绝对必须继续使用shell fork(即&操作符),那么您应该将MongoDB包装为“nohup”,以避免实例因shell的终止而关闭。这看起来像:
nohup&

编辑:
您可以使用相同的进程来使用相同的初始化脚本来启动MongoS。您需要找到将
mongod
二进制文件设置为要执行的文件的行。在所有debian衍生工具下,这将是
守护进程
变量。将其更改为指向
mongos
而不是
mongod
,然后退出。对于配置服务器,我们可以使用以下脚本:

#!/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
#/bin/bash
###开始初始化信息
#提供:MongoDB配置服务器
#所需开始时间:$network
#所需站点:$网络
#默认开始:2 3 4 5
#默认停止:0 1 6
#简短描述:启动/停止MongoDB配置服务器
###结束初始化信息
开始(){
/usr/bin/mongod--configsvr--dbpath/home/configdb/--port 27018&
}
停止(){
对于'ps-ef | grep 27018 | awk'{print$2}',do kill-9$a;done
}
每箱1元
开始|停止)$1;;
重启)停止;开始
*)echo“以$0运行”;出口1;;
以撒
我们可以使用下面的脚本示例查询路由器:

#!/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
#/bin/bash
###开始初始化信息
#提供:MongoDB配置服务器
#所需开始时间:$network
#所需站点:$网络
#默认开始:2 3 4 5
#默认停止:0 1 6
#简短描述:启动/停止MongoDB配置服务器
###结束初始化信息
开始(){
/usr/bin/mongos——配置数据库192.168.3.187:27018——端口27019&
}
停止(){
对于'ps-ef | grep 27019 | awk'{print$2}',do kill-9$a;done
}
每箱1元
开始|停止)$1;;
重启)停止;开始
*)echo“以$0运行”;出口1;;
以撒

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

谢谢。我将使用mongodb默认初始化脚本为另一个实例创建初始化脚本,但mongos和查询路由器的初始化脚本是什么?没有默认的初始化脚本。我也想通过init脚本运行queryrouter和mongos。同样的原理也可以应用于通过init脚本启动mongos。您只需进入init脚本并修改init脚本中的守护程序变量即可运行MongoS二进制文件,此外还需要进行所有其他更改。更改守护程序变量以指向MongoS二进制文件而不是MongoD二进制文件。将CONF变量更改为指向MongoS配置,就像您对每个mongod实例所做的那样。