2012-08-16 72 views
3

如果我有一個MongoDB副本集,其中有3個節點(主要,次要,仲裁者),並且主節點關閉,現在主要節點主要如何動態處理客戶端中的更改,以便他們現在寫入主要?小學低年級現在小學 - 如何寫新小學?

我在dev environmetn中經歷了這個,並開始考慮處理這個問題的最佳方法。這不是一個碎片集羣,而是一個獨立的副本集。

你是否在連接中檢查「IsPrimary」之類的東西,如果不是你改變你寫的地方?

任何建議,將不勝感激。

感謝,

小號

回答

1

一旦建立了連接,驅動程序應該足夠聰明,以確定數據應該發送到哪個節點。

For the C# driver

要連接到一個副本集通過提供由逗號分隔的(如果需要的話和端口號) 多個主機名指定種子列表。 例如:

mongodb://server1,server2:27017,server2:27018

For the Python driver

到副本集的連接可以使用正常 連接()構造,指定組的一個或多個成員進行。 例如,以下任何會造成我們剛剛創建的集 連接:

Connection("morton.local", replicaset='foo') 
Connection([u'morton.local:27019', 'morton.local:27017', u'morton.local:27018']) 
Connection("morton.local:27018", replicaset='foo') 
Connection([u'morton.local:27019', u'morton.local:27017', 'morton.local:27018']) 
Connection("morton.local", 27019, replicaset='foo') 
Connection(['morton.local:27019', u'morton.local:27017', u'morton.local:27018']) 
Connection(["morton.local:27018", "morton.local:27019"]) 
Connection(['morton.local:27019', u'morton.local:27017', 'morton.local:27018']) 
Connection("mongodb://morton.local:27017,morton.local:27018,morton.local:27019") 
Connection(['morton.local:27019', 'morton.local:27017', 'morton.local:27018']) 

傳遞到連接節點()被稱爲種子。如果只指定一個 主機,則必須使用replicaset參數來指示 這不是到單個節點的連接。只要至少有一個 種子處於聯機狀態,驅動程序就能夠「發現」該組中的所有節點,並與當前主節點建立連接。

+0

感謝威爾弗雷德......這正是我發現的 – scarpacci 2012-08-17 13:19:27

2

到目前爲止我所發現使我相信,這是實際上將正確引導這個驅動程序。我認爲我的C#驅動程序設置是正確的,但我如何通過我的Python客戶端(PyMongo)連接不是。我應該使用類似pymongo.ReplicaSetConnection

顯示Here

我會繼續挖掘,但想分享迄今爲止我發現的東西。

編輯:

C# - 司機妥善處理連接好有

的Python:需要修改我的連接正如我上面說,這樣它會路由寫入新的主

的Python(pymongo)代碼:

from pymongo.replica_set_connection import ReplicaSetConnection 

MongoConnection = ReplicaSetConnection('localhost:27017',replicaSet='myReplSet') 

--S

+3

如果你已經建立連接(取決於驅動程序)作爲副本集,或主機與主機在紅寶石等等,那麼驅動程序將處理故障轉移並將您重新連接到新的主設備一旦選舉完成(你會看到它做isMaster或類似的數字) – 2012-08-16 18:20:10

+0

酷感謝亞當 – scarpacci 2012-08-16 19:40:22