2015-09-04 137 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

請解釋查詢路由器的哪些變量.. –