【问题标题】:Problem connecting to MongoDB ReplicaSet using Golang and Robo3T使用 Golang 和 Robo3T 连接到 MongoDB ReplicaSet 的问题
【发布时间】:2021-03-10 18:19:32
【问题描述】:

我正在努力连接到我的 MongoDB 副本集,但似乎没有任何效果。

我已经部署了具有 3 个节点的副本集,每个节点位于一个单独的 AWS 可用区但位于同一区域。

下面是我用来连接副本集的代码。

    mongoURL := "mongodb://myuser:password@<publicIP>:27017,<publicIP>:27017,<publicIP>:27017/?replicaSet=replica01&authSource=admin"
    clientOptions := options.Client().ApplyURI(mongoURL)
    clientOptions = clientOptions.SetMaxPoolSize(100) //100 is default driver setting
    log.Println("Connection String: " + clientOptions.GetURI())
    client, err := mongo.Connect(ctx, clientOptions)

我还创建了 DNS 映射并使用了它,但这也不起作用。
以下是连接网址
mongodb://adminuser:password@rs1.domain.com:27017,rs2.domain.com:27017,rs3.domain.com:27017/?replicaSet=replica01&amp;authSource=admin

Robo3T

当我尝试使用公共 IP 将 Replica Set 与 Robo3T 连接时,我收到以下错误

无法连接到副本集“IP-RS”[public-ip:27017]。套 主节点无法访问。

原因:集合中没有成员是可达的。原因:连接失败

当我使用子域名连接副本集时,出现以下错误

无法连接到副本集“SRV 副本”[rs1.domain.com:27017]。 Set 的主节点无法访问。

原因:初始化 MongoWorker 失败。原因:连接失败

【问题讨论】:

  • 您的服务器没有监听公共 IP 或者您的防火墙规则禁止通信。
  • 我可以分别ssh 到所有 3 台服务器(VM)。此外,端口21017 在所有服务器上都是开放的。
  • 你说的两件事都不能帮助你解决/检查我说的两件事。
  • 我使用sudo ufw allow 27017/tcp在虚拟机级别和操作系统(Ubuntu 20.04)级别允许端口27017,并在操作系统上激活了防火墙。但它仍然无法正常工作。我尝试使用telnet and nmap 及其显示响应进行检查。
  • 如果您是初学者,请遵循官方发布的 MongoDB 文档。如果您不是初学者,请调试您的网络。

标签: mongodb go mongodb-replica-set availability-zone


【解决方案1】:

这是解决方案。

问题在于主机名。我在配置副本集时使用了主机名。

这是我的配置

$ config = {
  _id : "mongo-cluster",
   members : [
       {_id : 0, host : "mongo-1:27017"},
       {_id : 1, host : "mongo-2:27017"},
       {_id : 2, host : "mongo-3:27017"},
   ]
}

$ rs.initiate(config)

解决方案

我将hostname 更改为private-ip
请注意,由于我的 3 个副本节点位于同一个 AWS 区域但位于不同的可用区,所以我使用 private ip 来建立节点之间的连接。

$ config = {
  _id : "replica01",
   members : [
       {_id : 0, host : "private-ip:27017"},
       {_id : 1, host : "private-ip:27017"},
       {_id : 2, host : "private-ip:27017"},
   ]
}

rs0:PRIMARY> rs.reconfig(config)

所有 3 个节点上的 MongoDB conf 设置

File: /etc/mongod.conf

    net:
      port: 27017
      bindIp: 127.0.0.1, 172.16.1.x (private-ip)

    security:
      keyFile: /opt/mongo/mongo-keyfile

    replication:
      replSetName: replica01

所有 3 个节点上的主机条目

File: /etc/hosts

    172.16.1.x    mongo-1
    172.16.1.x    mongo-2
    172.16.1.x    mongo-3

您的每台机器的名称应与/etc/hosts 文件中定义的名称匹配

$ sudo nano /etc/hostname 
mongo-1 

副本状态

> rs.status()

{
    "set" : "replica01",
    "date" : ISODate("2021-03-13T12:42:45.971Z"),
    "myState" : 2,
    "term" : NumberLong(8),
    "syncSourceHost" : "172.16.1.x:27017",
    "syncSourceId" : 2,
    "heartbeatIntervalMillis" : NumberLong(2000),
    "majorityVoteCount" : 2,
    "writeMajorityCount" : 2,
    "votingMembersCount" : 3,
    "writableVotingMembersCount" : 3,
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1615639361, 1),
            "t" : NumberLong(8)
        },
        "lastCommittedWallTime" : ISODate("2021-03-13T12:42:41.356Z"),
        "readConcernMajorityOpTime" : {
            "ts" : Timestamp(1615639361, 1),
            "t" : NumberLong(8)
        },
        "readConcernMajorityWallTime" : ISODate("2021-03-13T12:42:41.356Z"),
        "appliedOpTime" : {
            "ts" : Timestamp(1615639361, 1),
            "t" : NumberLong(8)
        },
        "durableOpTime" : {
            "ts" : Timestamp(1615639361, 1),
            "t" : NumberLong(8)
        },
        "lastAppliedWallTime" : ISODate("2021-03-13T12:42:41.356Z"),
        "lastDurableWallTime" : ISODate("2021-03-13T12:42:41.356Z")
    },
    "lastStableRecoveryTimestamp" : Timestamp(1615639331, 1),
    "members" : [
        {
            "_id" : 1,
            "name" : "172.16.1.x:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 159132,
            "optime" : {
                "ts" : Timestamp(1615639361, 1),
                "t" : NumberLong(8)
            },
            "optimeDate" : ISODate("2021-03-13T12:42:41Z"),
            "syncSourceHost" : "172.16.1.x:27017",
            "syncSourceId" : 2,
            "infoMessage" : "",
            "configVersion" : 2,
            "configTerm" : 8,
            "self" : true,
            "lastHeartbeatMessage" : ""
        },
        {
            "_id" : 2,
            "name" : "172.16.1.x:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 62213,
            "optime" : {
                "ts" : Timestamp(1615639361, 1),
                "t" : NumberLong(8)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1615639361, 1),
                "t" : NumberLong(8)
            },
            "optimeDate" : ISODate("2021-03-13T12:42:41Z"),
            "optimeDurableDate" : ISODate("2021-03-13T12:42:41Z"),
            "lastHeartbeat" : ISODate("2021-03-13T12:42:45.616Z"),
            "lastHeartbeatRecv" : ISODate("2021-03-13T12:42:44.778Z"),
            "pingMs" : NumberLong(1),
            "lastHeartbeatMessage" : "",
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "",
            "electionTime" : Timestamp(1615477956, 1),
            "electionDate" : ISODate("2021-03-11T15:52:36Z"),
            "configVersion" : 2,
            "configTerm" : 8
        },
        {
            "_id" : 3,
            "name" : "172.16.1.x:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 62213,
            "optime" : {
                "ts" : Timestamp(1615639361, 1),
                "t" : NumberLong(8)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1615639361, 1),
                "t" : NumberLong(8)
            },
            "optimeDate" : ISODate("2021-03-13T12:42:41Z"),
            "optimeDurableDate" : ISODate("2021-03-13T12:42:41Z"),
            "lastHeartbeat" : ISODate("2021-03-13T12:42:45.095Z"),
            "lastHeartbeatRecv" : ISODate("2021-03-13T12:42:45.321Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "",
            "syncSourceHost" : "172.16.1.x:27017",
            "syncSourceId" : 2,
            "infoMessage" : "",
            "configVersion" : 2,
            "configTerm" : 8
        }
    ],
    "ok" : 1,
    "$clusterTime" : {
        "clusterTime" : Timestamp(1615639361, 1),
        "signature" : {
            "hash" : BinData(0,"2ujactkx3HytFTyWhh+JkzyQy+8="),
            "keyId" : NumberLong("6936222258616598531")
        }
    },
    "operationTime" : Timestamp(1615639361, 1)
}

转到连接字符串

mongoURL := "mongodb://username:pass@$172.16.1.x:27017,172.16.1.x:27017,172.16.1.x:27017/mydb?replicaSet=replica01&authSource=admin"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-17
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多