继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Asp.Net Core 连接Mongodb 副本集 timeout Unspecified

慕神8447489
关注TA
已关注
手记 1310
粉丝 174
获赞 957

      最近使用Mongo.Driver库开发一个应用去连接mongodb的一个副本集,其中mongodb的副本集搭建在同一台机器上(172.27.0.4,三个节点的端口分别时27014,27015,27016,关闭了认证并允许远程连接),应用部署在另外一台机器(172.27.0.5)。在使用MongoClient类时,传入的连接URL为:"mongodb://172.27.0.4:27014,172.27.0.4:27015,172.27.0.4:27016"(以ip加端口的格式,如图1)。

webp

图1 mongo客户端

如果把应用也部署到mongodb的机器上,能连接成功,如果分开部署,连接会报如下异常:

System.TimeoutException”类型的异常在 MongoDB.Driver.Core.dll中发生,但未在用户代码中进行处理其他信息: A timeout occured after 3000ms selecting a server using CompositeServerSelector {

    Selectors = ReadPreferenceServerSelector {

        ReadPreference = {

            Mode = Secondary, TagSets = []

        }

    }, LatencyLimitingServerSelector {

        AllowedLatencyRange = 00: 00: 00.0150000

    }

}.Client view of cluster state is {

    ClusterId: "1",

    ConnectionMode: "ReplicaSet",

    Type: "ReplicaSet",

    State: "Disconnected",

    Servers: [{

        ServerId: "{ ClusterId : 1, EndPoint : "

        Unspecified / 172.27.0.4:27014 " }",

        EndPoint: "Unspecified/172.27.0.4:27014",

        State: "Disconnected",

        Type: "Unknown",

        HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> System.Net.Sockets.SocketException: 不知道这样的主机。

后来用命令行登陆到mongodb集群,并使用命令:rs.conf()检查复制集配置,如图2

webp

图2 副本集配置

从图1中副本集的配置可以看出(画框处),端口为27014的节点的host配置为:"172_27_0_4:27014"(其他节点都是以 . 分割ip)。出现连接异常的问题就在于此(如果在配置中,节点的host使用主机名+端口的方式:"saf323asasa32:27014",在程序中以ip地址的方式去连接也会出现上面的连接错误)。因此,需要将配置中节点的host修改成标准的ip地址。具体操作依次执行如下命令:

cfg=rs.conf()

webp

获取配置并复制给cfg

cfg.members[0].host = "172.27.0.4:27014"

webp

修改第一节点的host属性

rs.reconfig(cfg)

webp

重新进行配置

最后可以在执行rs.conf()进行修改后的配置查看是否修改成正确的ip:port的形式,在使用应用程序进行连接复制集就能成功连接了。



作者:_科长_
链接:https://www.jianshu.com/p/b05990b16aab


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP