【问题标题】:pymongo unable to connect to primarypymongo 无法连接到主节点
【发布时间】:2016-12-10 07:33:03
【问题描述】:

我正在尝试通过连接到我的副本集的主节点来find_one

MongoClient(hostname, replicaSet="rs0", read_preference=ReadPreference.PRIMARY)

但它会导致错误:

ServerSelectionTimeoutError:没有副本集成员匹配选择器 “初级()”

我可以使用SECONDARY_PREFERRED 成功阅读。我还尝试使用MongoReplicaSetClient 进行连接,但没有成功。我猜这是由于配置错误,但我应该寻找什么?

rs.status:

rs0:PRIMARY> rs.conf()
{
       "_id" : "rs0",
       "version" : 111313,
       "protocolVersion" : NumberLong(1),
       "members" : [
               {
                       "_id" : 1,
                       "host" : "ANDROMEDA:27017",
                       "arbiterOnly" : false,
                       "buildIndexes" : true,
                       "hidden" : false,
                       "priority" : 1,
                       "tags" : {

                       },
                       "slaveDelay" : NumberLong(0),
                       "votes" : 1
               },
               {
                       "_id" : 2,
                       "host" : "mongo02.db.com:27017",
                       "arbiterOnly" : false,
                       "buildIndexes" : true,
                       "hidden" : false,
                       "priority" : 0.5,
                       "tags" : {

                       },
                       "slaveDelay" : NumberLong(0),
                       "votes" : 1
               },
               {
                       "_id" : 3,
                       "host" : "mongo03.db.com:27017",
                       "arbiterOnly" : false,
                       "buildIndexes" : true,
                       "hidden" : false,
                       "priority" : 0.5,
                       "tags" : {

                       },
                       "slaveDelay" : NumberLong(0),
                       "votes" : 1
               }
       ],
       "settings" : {
               "chainingAllowed" : true,
               "heartbeatIntervalMillis" : 2000,
               "heartbeatTimeoutSecs" : 10,
               "electionTimeoutMillis" : 10000,
               "getLastErrorModes" : {

               },
               "getLastErrorDefaults" : {
                       "w" : 1,
                       "wtimeout" : 0
               }
       }
}
rs0:SECONDARY> rs.status()
{
       "set" : "rs0",
       "date" : ISODate("2016-08-04T08:58:02.293Z"),
       "myState" : 2,
       "term" : NumberLong(90),
       "syncingTo" : "mongo03.db.com:27017",
       "heartbeatIntervalMillis" : NumberLong(2000),
       "members" : [
               {
                       "_id" : 1,
                       "name" : "ANDROMEDA:27017",
                       "health" : 1,
                       "state" : 1,
                       "stateStr" : "PRIMARY",
                       "uptime" : 2503,
                       "optime" : {
                               "ts" : Timestamp(1470299746, 1),
                               "t" : NumberLong(90)
                       },
                       "optimeDate" : ISODate("2016-08-04T08:35:46Z"),
                       "lastHeartbeat" : ISODate("2016-08-04T08:58:01.109Z"),
                       "lastHeartbeatRecv" : ISODate("2016-08-04T08:58:01.803Z"),
                       "pingMs" : NumberLong(28),
                       "electionTime" : Timestamp(1469600522, 1),
                       "electionDate" : ISODate("2016-07-27T06:22:02Z"),
                       "configVersion" : 111313
               },
               {
                       "_id" : 2,
                       "name" : "mongo02.db.com:27017",
                       "health" : 1,
                       "state" : 2,
                       "stateStr" : "SECONDARY",
                       "uptime" : 7604104,
                       "optime" : {
                               "ts" : Timestamp(1470299746, 1),
                               "t" : NumberLong(90)
                       },
                       "optimeDate" : ISODate("2016-08-04T08:35:46Z"),
                       "syncingTo" : "mongo03.db.com:27017",
                       "configVersion" : 111313,
                       "self" : true
               },
               {
                       "_id" : 3,
                       "name" : "mongo03.db.com:27017",
                       "health" : 1,
                       "state" : 2,
                       "stateStr" : "SECONDARY",
                       "uptime" : 2503,
                       "optime" : {
                               "ts" : Timestamp(1470299746, 1),
                               "t" : NumberLong(90)
                       },
                       "optimeDate" : ISODate("2016-08-04T08:35:46Z"),
                       "lastHeartbeat" : ISODate("2016-08-04T08:58:01.948Z"),
                       "lastHeartbeatRecv" : ISODate("2016-08-04T08:58:01.802Z"),
                       "pingMs" : NumberLong(28),
                       "syncingTo" : "ANDROMEDA:27017",
                       "configVersion" : 111313
               }
       ],
       "ok" : 1
}

【问题讨论】:

  • 你能展示你的副本集配置吗?
  • @Styvane 我更新为rs.status。希望能给你更多的信息。
  • 您是否尝试过检查 ANDROMEDA:27017 的主机名是否可以从您尝试连接应用程序的主机解析?看起来这是一个很好的开始调查的候选者,因为您的辅助主机似乎都有 FQDN。
  • @eoinbrazil 我在尝试 ping 它时没有收到 ANDROMEDA 的回复!它似乎工作正常。现在,如果您愿意将其作为答案,我将奖励您赏金:)
  • 顺便说一句,客户端有没有办法查询它当前正在从哪个节点读取?只是想看看阅读偏好是否连接到正确的。

标签: mongodb pymongo replicaset database


【解决方案1】:

如果出现类似于 ServerSelectionTimeoutError: No replica set members match selector "Primary()" 的错误消息,并且副本集状态函数输出 rs.status() 显示使用非 FQDN 的主成员(ANDROMEDA:27017 在这种情况下) 那么应用程序很可能无法解析网络上的 Primary 主机。

您可以在运行您的应用程序的主机的命令行中使用以下命令轻松检查这一点:

$ dig ANDROMEDA
$ ping ANDROMEDA
$ mongo --host ANDROMEDA:27017

如果您没有在运行您的应用程序的主机上安装 Mongo Shell,您可以改用 Telnet。

$ telnet ANDROMEDA 27017

这些输出将允许您检查应用程序主机和 mongod 主机之间的连接,以确定这是否导致了问题。

【讨论】:

    【解决方案2】:

    我使用这个连接字符串:

     MongoClient('mongodb://mongo01.db.com:27017,mongo02.db.com:27017,mongo03.db.com:27017/mydb',replicaSet="rs0", read_preference=ReadPreference.PRIMARY)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      相关资源
      最近更新 更多