0
一個MongoDB實例可以有不同的角色:如何確定MongoDB服務器類型
- 配置服務器
- 路由器(mongos)
- 數據服務器
- 仲裁服務器(副本集)
我知道db.serverStatus()
可以用來查看一個實例是否是路由器,process
的值是mongos
。 但是對於配置服務器,仲裁器和數據節點,process
的值爲mongod
。
是否有一種區分這些實例類型的簡單方法?
一個MongoDB實例可以有不同的角色:如何確定MongoDB服務器類型
我知道db.serverStatus()
可以用來查看一個實例是否是路由器,process
的值是mongos
。 但是對於配置服務器,仲裁器和數據節點,process
的值爲mongod
。
是否有一種區分這些實例類型的簡單方法?
我想提請注意這個問題的一個特別重要的問題:分片是和水平維度(數據分發到幾個複製數據庫),而複製數據庫是一個高可用性解決方案,由不同的mongod節點組成。
那麼你實際上你正在試圖找出是:
在replicaSet的情況下,你可能有興趣知道是每個節點的角色。您可以輕鬆地獲取信息,而無需連接到replicaset的所有節點,只需運行命令:
db.isMaster()
與此您將獲得每個成員的節點成員和角色。
對於分片節點成員首先你不應該嘗試直接連接到配置服務器。這些是他們管理塊,塊分割和其他配置數據的分發,僅與分片羣集功能相關。避免使用這些IP連接到您的應用程序。
所以,如果你想擁有它的成員組成的碎片羣一個明確的說法,你有多少碎片有等,你需要運行命令:
db.printShardStatus()
或
sh.status()
請查看文檔here
Cheers, N.
你的用例是什麼?你不應該直接連接到配置服務器或仲裁器,所以我可以理解區分mongos(路由器),副本集的主要成員和副本集的次要成員。 – slee
@slee給出一個IP地址和端口列表,我想連接它們並確定它們的角色(例如,使用C++驅動程序),以便我可以根據它們的角色處理它們,例如,某些狀態查詢只應在數據節點上運行。謝謝! – johlo