2012-11-08 36 views
0

我自動向mongo複製集添加了一個節點。從命令行繞過mongo shell添加節點到代表集

$ mongo IP.Of.Server.One 
> rs.initiate(); 
> rs.add("IP.Of.Server.Two"); 
> rs.add("IP.Of.Server.Three"); 
> rs.status(); 

我有一個python腳本,當一個新的節點啓動時,我將這個IP地址使用的paramiko ssh到一個現有的節點添加到集合中的一個已經存在的節點。

如何從命令行自動執行無需進入mongo shell。我可以使用pexpect,但更喜歡通過捶擊和外殼使用一個襯墊。

感謝

回答

2

可以使用--eval命令行選項來傳遞你的副本集的rs.add()的JavaScript命令到主。如果您將rs.add()調用包裝爲printjson(),那麼您還將得到一個結果回顯給您的Python腳本可以解析的stdout。

所以假設node1.replset主,你可以用添加一個新的節點node4.replset

mongo --eval "printjson(rs.add('node4.replset:27017'))" node1.replset:27017 
+0

爲什麼端口27020的第二個節點上,當一個單獨的服務器上?我可以在所有服務器上使用27017嗎? – Tampa

+0

您可以爲所有服務器使用27017;更新了這個例子。我最初測試我的本地主機上的命令行,所以使用了不同的端口:)。 – Stennie