【问题标题】:Pymongo won't connect to Mongo replica setPymongo 不会连接到 Mongo 副本集
【发布时间】:2016-04-01 12:36:57
【问题描述】:

我似乎无法将 pymongo 连接到我创建的副本集。我收到的信息似乎没有多大意义,因为它不是我所看到的。

我先解释一下我的配置。

基本上我有三台机器10.141.0.156、10.141.0.158、10.141.0.159

我有 3 个 mongod 实例,每个运行在不同的机器上,每个运行:

mongod --configsvr --dbpath /mnt/sdb/ --port 27019

接下来我将 3 台 mongod 机器添加到副本集中:

{
    "set" : "replSet",
    "date" : ISODate("2016-04-01T12:23:12.552Z"),
    "myState" : 2,
    "term" : NumberLong(2),
    "syncingTo" : "10.141.0.158:27017",
    "configsvr" : true,
    "heartbeatIntervalMillis" : NumberLong(2000),
    "members" : [
        {
            "_id" : 0,
            "name" : "10.141.0.156:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 2751,
            "optime" : {
                "ts" : Timestamp(1459513383, 6),
                "t" : NumberLong(2)
            },
            "optimeDate" : ISODate("2016-04-01T12:23:03Z"),
            "syncingTo" : "10.141.0.158:27017",
            "configVersion" : 2,
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "10.141.0.158:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 2749,
            "optime" : {
                "ts" : Timestamp(1459513383, 6),
                "t" : NumberLong(2)
            },
            "optimeDate" : ISODate("2016-04-01T12:23:03Z"),
            "lastHeartbeat" : ISODate("2016-04-01T12:23:11.054Z"),
            "lastHeartbeatRecv" : ISODate("2016-04-01T12:23:11.579Z"),
            "pingMs" : NumberLong(0),
            "electionTime" : Timestamp(1459510633, 1),
            "electionDate" : ISODate("2016-04-01T11:37:13Z"),
            "configVersion" : 2
        },
        {
            "_id" : 2,
            "name" : "10.141.0.159:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 2749,
            "optime" : {
                "ts" : Timestamp(1459513383, 6),
                "t" : NumberLong(2)
            },
            "optimeDate" : ISODate("2016-04-01T12:23:03Z"),
            "lastHeartbeat" : ISODate("2016-04-01T12:23:11.261Z"),
            "lastHeartbeatRecv" : ISODate("2016-04-01T12:23:12.240Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "10.141.0.158:27017",
            "configVersion" : 2
        }
    ],
    "ok" : 1
}

接下来我在第一台机器 10.141.0.156 上启动了 mongos:

mongos --configdb replSet/10.141.0.156:27017,10.141.0.158:27017,10.141.0.159:27017 --port 27077

此时一切运行正常,我没有收到任何错误。

然后我尝试使用 pymongo 3.2.1 连接到副本集:

MongoClient("10.141.0.156", 27077, replicaSet='replSet')

当我尝试读取所有键或写入时,我得到:

*** ServerSelectionTimeoutError: 没有可用于副本集名称“replSet”的副本集成员

尽管在 mongo shell 中看到了副本集。

【问题讨论】:

  • 您是如何为副本集启动 mongod 实例的?

标签: python mongodb pymongo


【解决方案1】:

对于副本集,您需要启动将参与副本集的mongod 实例;带有--replSet 标志。

mongod --dbpath /mnt/sdb/ --port 27019 --replSet "your_replicaset_name"

使用 --configsvr 选项,您正在启动一个配置服务器用于分片,而不是副本集。欲了解更多信息,请参阅https://docs.mongodb.org/manual/reference/program/mongod/#bin.mongod

请参阅本教程了解如何设置副本集:https://docs.mongodb.org/manual/tutorial/deploy-replica-set/

【讨论】:

  • 你说得对,我完全错过了这一点。它甚至可以在没有配置和 mongos 的情况下工作,只需在所有节点上运行 mongod 并将它们添加到同一个分片中。
猜你喜欢
  • 2017-06-13
  • 1970-01-01
  • 2013-03-30
  • 2015-09-26
  • 2021-10-30
  • 1970-01-01
  • 2016-12-09
  • 2017-02-01
  • 2020-07-14
相关资源
最近更新 更多