我在本地环境中创建了一个用于测试目的的分片。
我在一台机器上有三个配置服务器,在同一台机器上有一个查询路由器,在两台不同的机器上有两个数据节点。
一切正常但我的问题是我无法让所有进程在不同的端口上保持运行,因为我没有任何启动/停止脚本。我最后在&
的命令行上运行进程使其处于活动状态,这是保持进程处于活动状态并且有时自动死亡的非常糟糕的方法。
请帮助或提供使用脚本的方法,并且脚本还可以处理各种端口以激活单台机器上的所有进程。
答案 0 :(得分:6)
您永远不应该从一个init脚本驱动多个实例,因为当您启动/关闭任何一个实例时,这会产生大量过多的管理工作。
您应该为每个单独的数据库流程实例设置一个init脚本,因为这是Linux最佳实践。
在大多数情况下,您应该能够使用通用的MongoDB提供的init脚本,然后为每个数据库实例创建一个重命名的副本。
然后,您应该为每个实例创建单独的配置文件,这些配置文件应该包含稍微不同的配置,并在其自己的端口上运行每个实例,拥有自己的dbpath和自己的日志文件。
然后,您可以将配置文件中的每个init脚本指向其实例,并且所有内容都应该按计划运行。
最后,在MongoDB中,您应该使用--fork选项,它提供了一种从shell实例中分离MongoDB的安全方法。如果您绝对必须继续使用shell fork(&运算符),那么您应该将MongoDB包装在“nohup”中,以避免因shell终止而关闭实例。这看起来像是这样的:
nohup <mongodb cmd and arguments> &
编辑:
您可以使用相同的过程来使用相同的init脚本来启动MongoS。您需要找到将mongod
二进制文件设置为要执行的行的行。在所有的debian导数下,这将是DAEMON
变量。将其更改为指向mongos
而不是mongod
,然后离开。