簡體   English   中英

副本集中只有一個成員的MongoDB和C#驅動程序套接字超時

[英]MongoDB and C# driver socket timeouts in replica set with only one member

我有一個正在運行的C#Web應用程序,它與c#驅動程序1.7.0.4714連接到MongoDB。 我想將此一個MongoDB放入具有兩個輔助副本的副本集中。 當我以副本集模式重新啟動原始的MongoDB時,它將獲得主副本,但隨后來自Web應用程序的大多數連接都會失敗

System.Net.Sockets.SocketException

當我以非副本集模式重新啟動MongoDB時,一切都再次正常運行。

這是我的連接字符串:“ mongodb:// myserver:27017”

當您連接到副本集時,通常,驅動程序可以確定它正在連接到副本集或獨立服務器。

您沒有說出正在使用哪個版本的C#驅動程序,也沒有提供正在使用的連接字符串/語法的確切格式,但是本教程在此處詳細介紹了此內容: http : //www.mongodb.org / display / DOCS / CSharp + Driver + Tutorial#CSharpDriverTutorial-MongoClientclass

它指示如果僅指定一台服務器,而您未指定副本集名稱,則使用直接模式,這不是您想要的。

您應該顯式地使用副本集模式,而不是默認的自動模式,或者應該指定副本集名稱。

我發現答案很簡單,很抱歉在這里提出轉儲問題:

我使用域名設置了代表,即

rs.add("myserver01")
rs.add("myserver02")
rs.add("myserver03")

域名myserver01, ...,在我的應用程序服務器上無法解析,我使用IP地址連接: mongodb://10.0.0.1:27017,10.0.0.2:27017,10.0.0.3:27017

因此,每個第二個或第三個請求都會失敗。 修復連接字符串以使用域名,還修復域名可以解析的問題,從而修復了所有問題。

暫無
暫無

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

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