为了账号安全,请及时绑定邮箱和手机立即绑定

使用Golang和Robo3T连接到MongoDB ReplicaSet时出现问题

使用Golang和Robo3T连接到MongoDB ReplicaSet时出现问题

Go
慕妹3146593 2022-08-15 16:29:57
我正在努力连接到我的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&authSource=admin机器人3T当我尝试使用公共IP将副本集与Robo3T连接时,我收到以下错误无法连接到副本集“IP-RS”[公共 IP:27017]。集合的主数据库无法访问。原因:集合的任何成员都不可访问。原因:连接失败当我使用子域名连接到副本集时,我收到以下错误无法连接到副本集“SRV 副本”[rs1.domain.com:27017]。集合的主数据库无法访问。原因: 无法初始化 MongoWorker。原因:连接失败
查看完整描述

1 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

这是解决方案。


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


这是我的配置


$ 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)

溶液

我用private-ip更改了。

请注意,由于我的 3 个副本节点位于同一 AWS 区域但位于不同的可用区中,因此我使用私有 IP 在节点之间建立连接。hostname


$ 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"



查看完整回答
反对 回复 2022-08-15
  • 1 回答
  • 0 关注
  • 196 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号