【问题标题】:MongoDB and C# driver socket timeouts in replica set with only one member只有一个成员的副本集中的 MongoDB 和 C# 驱动程序套接字超时
【发布时间】:2012-12-15 17:15:17
【问题描述】:

我有一个正在运行的 C# Web 应用程序,它通过 c# 驱动程序 1.7.0.4714 连接到 MongoDB。我想将这个 MongoDB 放入具有两个辅助节点的副本集中。当我在副本集模式下重新启动我的原始 MongoDB 时,它会获得主要但来自我的网络应用程序的大多数连接都失败了

System.Net.Sockets.SocketException

当我以非副本集模式重新启动 MongoDB 时,一切都会再次正常运行。

这是我的连接字符串:“mongodb://myserver:27017”

【问题讨论】:

  • 你的代码是什么?你试过什么?请阅读faqHow to Ask
  • 代码可能并不重要。我使用带有简单连接字符串的 C# 驱动程序 1.7.0.4714 的普通查询:mongodb://server:27017
  • 异常的文本是什么?您的副本集在 mongo 控制台上可以正常工作吗?哪些操作会导致异常:读取、插入?请在初始化连接到 mongo 的位置发布您的代码
  • RS 在控制台上运行良好。它连接到主节点。请参阅上面评论中的 conn 字符串。

标签: c# mongodb


【解决方案1】:

当您连接到副本集时,通常驱动程序可以确定它正在连接到副本集或独立服务器。

您没有说明您使用的是哪个版本的 C# 驱动程序,也没有提供您正在使用的连接字符串/语法的确切格式,但本教程在此处详细介绍了这一点:http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-MongoClientclass

表示如果只指定一台服务器,不指定副本集名称,则使用直接模式,这不是你想要的。

您应该明确使用副本集模式而不是默认自动模式,或者您应该指定副本集名称。

【讨论】:

    【解决方案2】:

    我找到了很简单的答案,很抱歉在这里问一个转储问题:

    我使用域名设置了我的副本,即

    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

    所以每第二个或第三个请求都失败了。修复连接字符串以使用域名并修复域名可以解析修复所有问题。

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      相关资源
      最近更新 更多