簡體   English   中英

崩潰后,Mongodb java驅動程序無法重新連接到主驅動程序

[英]Mongodb java driver cannot reconnect to primary after a crash

使用java驅動程序嘗試使用mongodb的故障轉移容量時遇到問題。

我有一個主要/輔助mongodb集群,即server1和server2。

當我殺死主服務器1以模擬故障時,server2在幾秒鍾內變為主服務器,而我的應用程序(使用java驅動程序訪問mongo)開始使用新的主服務器2。

當我重新啟動server1時,它會在幾秒鍾內恢復它的主要角色但是我的應用程序,而不是連接到server1仍然嘗試連接到server2,因為它現在處於輔助狀態失敗! 所有請求都對此錯誤感到滿意:

com.mongodb.MongoServerSelectionException: Unable to connect to any server that matches {serverSelectors=[ReadPreferenceServerSelector{readPreference=primary}, LatencyMinimizingServerSelector{acceptableLatencyDifference=15 ms}]}

我使用的是mongodb 2.6和java驅動程序2.12。 我沒有將任何參數傳遞給使用我的集群的所有節點創建的MongoClient。

歡迎任何幫助。

問候,

盧瓦克

由於問題超過一年,我將使用MongoDB 3.0Java驅動程序3.0.4作為我的解決方案。

假設在端口27017,27018和27019上的副本集(建議的副本集中最小節點數)中有3個節點(1個主節點和2個輔助節點)。 所以我可以用上面的配置創建一個連接,如下所示:

MongoClient mongo = new MongoClient(asList(new ServerAddress("localhost",27017),
            new ServerAddress("localhost", 27018), new ServerAddress("localhost", 27019),
            new MongoClientOptions.builder().requiredReplicaSetName("replset_name").build()));

請注意,使用MongoClientOptions ,驅動程序保證上述服務器確實是所述副本集的成員。 如果您沒有副本集,可以跳過此步驟。

在故障轉移期間,驅動程序將自動切換到新的主服務器並開始向其發送請求,但您必須處理CRUD操作期間拋出的異常

因為還有一些人到達這個問題並試圖回答我自己回答。

問題不再發生,我不知道為什么。 我現在將我的驅動程序更新到2.12.3版本。 mongodb方面沒有更新。

感謝那些試圖提供幫助的人。

我們遇到了同樣的問題。 將Mongo java驅動程序升級到2.13.3版似乎解決了這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM