2012-10-26 39 views
0

一個MongoDB實例可以有不同的角色:如何確定MongoDB服務器類型

  • 配置服務器
  • 路由器(mongos)
  • 數據服務器
  • 仲裁服務器(副本集)

我知道db.serverStatus()可以用來查看一個實例是否是路由器,process的值是mongos。 但是對於配置服務器,仲裁器和數據節點,process的值爲mongod

是否有一種區分這些實例類型的簡單方法?

+0

你的用例是什麼?你不應該直接連接到配置服務器或仲裁器,所以我可以理解區分mongos(路由器),副本集的主要成員和副本集的次要成員。 – slee

+0

@slee給出一個IP地址和端口列表,我想連接它們並確定它們的角色(例如,使用C++驅動程序),以便我可以根據它們的角色處理它們,例如,某些狀態查詢只應在數據節點上運行。謝謝! – johlo

回答

2

我想提請注意這個問題的一個特別重要的問題:分片是和水平維度(數據分發到幾個複製數據庫),而複製數據庫是一個高可用性解決方案,由不同的mongod節點組成。

那麼你實際上你正在試圖找出是:

  • ReplicaSet節點角色
  • 碎片中的節點成員

在replicaSet的情況下,你可能有興趣知道是每個節點的角色。您可以輕鬆地獲取信息,而無需連接到replicaset的所有節點,只需運行命令:

db.isMaster() 

與此您將獲得每個成員的節點成員和角色。

對於分片節點成員首先你不應該嘗試直接連接到配置服務器。這些是他們管理塊,塊分割和其他配置數據的分發,僅與分片羣集功能相關。避免使用這些IP連接到您的應用程序。

所以,如果你想擁有它的成員組成的碎片羣一個明確的說法,你有多少碎片有等,你需要運行命令:

db.printShardStatus() 

sh.status() 

請查看文檔here

Cheers, N.

相關問題