2016-04-08 36 views
2

當指定用於連接到來自Java應用程序的MongoDB副本集的客戶端URI時,我對MongoDB連接字符串replicaSet選項的use/need選項感到困惑。MongoClientURI連接字符串中是必需的副本集名稱嗎?

我有3個運行MongoDB的節點實例組成副本集,每個都被指定爲同一副本集的成員。我想從我的Java應用程序連接到副本集。當我給出超過2個主機名的列表時,如果甚至有必要在連接字符串中指定副本集名稱,我從我讀過的文檔中感到困惑。

以下是我如何啓動我的3節點MongoDB實例。

  1. 服務器1 $:mongod的--replSet 「RS0
  2. Server2上$:mongod的--replSet 「RS0
  3. Server3的$:mongod的--replSet 「RS0

我假設一個協商會發生,並且一個主要被選中,其餘的 被標記爲次要。

然後,我想通過來自我的Java應用程序的MongoClient調用來連接到副本集。是否需要實際的副本集名稱?我是否需要列出副本集的每個成員,或者MongoDB驅動程序是否只需要副本集的單個成員來確定其餘成員?

MongoClient mongoClient = new MongoClient(
    new MongoClientURI(
    "mongodb://Server1,Server2,Server3/?replicaSet=rs0" 
) 
); 

我需要replicaSet選項嗎?

回答

0

如果您未指定複製套件,它將以「獨立」模式進行連接,並且會在應用程序端丟失複製套件功能(不進行故障轉移)。因此,如果您連接的服務器要故障轉移到另一臺服務器,那麼您的應用程序將不會跟隨並重新連接到新的主服務器。

docs

當連接到副本集給至少兩個的mongod實例的種子列表 是很重要的。如果只提供單個mongod實例的連接點 ,並省略replicaSet,則客戶端 將創建獨立連接。

相關問題