我在測試用的本地環境中創建的分片。初始化腳本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
請解釋查詢路由器的哪些變量.. –