2011-12-14 38 views
37

在這裏瞭解正確的方法有些麻煩。AutoReconnect異常「主人已更改」

我有一個連接到三個成員(標準主從奴隸)的mongodb副本集。當主人保持一致時,一切工作都正常。

pymongo.Connection(['host1:27017','host2:27018','host3:27019']).database_test 

出於某種原因,當副本集主要步驟下來,這開始拋出autoReconnect的異常不走新的主當選後也離開。

現在我意識到這個異常需要被捕獲和處理,很可能通過等待新的主要被選中。我所遇到的問題似乎是,一旦選擇了新的小學,它就根本不在乎。這個「主人已經改變」的例外只是不斷出現。

打印與__dict__的連接顯示所有三臺主機。

我試過將replicaset kwarg傳遞給連接,但這是作爲一個意外的論點。

有沒有理由爲什麼這種連接不會開始查詢新的主要?

編輯:

同樣的問題顯然是現在體現在部署服務器上。如果主服務器發生更改,並且即使在選擇了新的主服務器後也不會消失,則會引發autoreconnect異常。

Pymongo是版本2.2和mongodb版本2.0.2。改變在pymongo代碼中定義連接的方式(mongouri與主機列表)不起作用。恢復服務的唯一方法是將rs.stepDown()其他主機重新發布,直到原始主服務器再次成爲主服務器。

+0

您使用的是哪種版本的pymongo?在1.9或1.10中有一個錯誤,我不記得哪一個,哪裏可以表現出這種行爲。它肯定是固定的1.11和2.0+ – dcrosta

+0

@dcrosta版本1.11 – DeaconDesperado

+0

什麼版本的MongoDB? 2.0.x有一個問題,如果你降級主要它不會關閉它的連接。這會導致PyMongo遇到的問題。 https://jira.mongodb.org/browse/SERVER-4405 –

回答

2

您描述的行爲是一個錯誤。最好的行動方式是確保有一個錯誤記錄並從您的問題鏈接到它。由於這個問題差不多一歲了,我預計這個bug會被關閉(查看jira.mongodb.org/browse/SERVER-4405以查看它是否適用)。

如果您升級到MongoDB 2.2或更高版本,問題應該消失。