首页 > 解决方案 > 尝试在副本集独立 mongodb 中连接时错误的连接字符串

问题描述

我正在尝试创建一个仅用于测试事务的 mongo 服务器,为此我必须创建一个副本集。

我通过 docker-compose 将独立的 mongodb 转换为副本集:

  mongo:
    image: mongo:latest
    container_name: test-mongodb
    command: '--storageEngine wiredTiger --replSet rs0 --bind_ip_all --noauth'
    environment:
      MONGO_INITDB_DATABASE: testdb
      MONGO_REPLICA_SET_NAME: rs0
    ports:
      - '27017:27017'
    healthcheck:
      test: test $$(echo "rs.initiate().ok || rs.status().ok" | mongo --quiet) -eq 1
      interval: 10s
      start_period: 30s

rs.status()

{
    "set" : "rs0",
    "date" : ISODate("2021-02-24T15:07:43.708Z"),
    "myState" : 1,
    "term" : NumberLong(1),
    "syncSourceHost" : "",
    "syncSourceId" : -1,
    "heartbeatIntervalMillis" : NumberLong(2000),
    "majorityVoteCount" : 1,
    "writeMajorityCount" : 1,
    "votingMembersCount" : 1,
    "writableVotingMembersCount" : 1,
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1614179254, 1),
            "t" : NumberLong(1)
        },
        "lastCommittedWallTime" : ISODate("2021-02-24T15:07:34.381Z"),
        "readConcernMajorityOpTime" : {
            "ts" : Timestamp(1614179254, 1),
            "t" : NumberLong(1)
        },
        "readConcernMajorityWallTime" : ISODate("2021-02-24T15:07:34.381Z"),
        "appliedOpTime" : {
            "ts" : Timestamp(1614179254, 1),
            "t" : NumberLong(1)
        },
        "durableOpTime" : {
            "ts" : Timestamp(1614179254, 1),
            "t" : NumberLong(1)
        },
        "lastAppliedWallTime" : ISODate("2021-02-24T15:07:34.381Z"),
        "lastDurableWallTime" : ISODate("2021-02-24T15:07:34.381Z")
    },
    "lastStableRecoveryTimestamp" : Timestamp(1614179214, 1),
    "electionCandidateMetrics" : {
        "lastElectionReason" : "electionTimeout",
        "lastElectionDate" : ISODate("2021-02-24T14:58:54.274Z"),
        "electionTerm" : NumberLong(1),
        "lastCommittedOpTimeAtElection" : {
            "ts" : Timestamp(0, 0),
            "t" : NumberLong(-1)
        },
        "lastSeenOpTimeAtElection" : {
            "ts" : Timestamp(1614178734, 1),
            "t" : NumberLong(-1)
        },
        "numVotesNeeded" : 1,
        "priorityAtElection" : 1,
        "electionTimeoutMillis" : NumberLong(10000),
        "newTermStartDate" : ISODate("2021-02-24T14:58:54.328Z"),
        "wMajorityWriteAvailabilityDate" : ISODate("2021-02-24T14:58:54.411Z")
    },
    "members" : [
        {
            "_id" : 0,
            "name" : "ce74cad70774:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 540,
            "optime" : {
                "ts" : Timestamp(1614179254, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2021-02-24T15:07:34Z"),
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "",
            "electionTime" : Timestamp(1614178734, 2),
            "electionDate" : ISODate("2021-02-24T14:58:54Z"),
            "configVersion" : 1,
            "configTerm" : 1,
            "self" : true,
            "lastHeartbeatMessage" : ""
        }
    ],
    "ok" : 1,
    "$clusterTime" : {
        "clusterTime" : Timestamp(1614179254, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    },
    "operationTime" : Timestamp(1614179254, 1)
}

当我尝试通过连接字符串进行连接时: mongo --host mongodb://localhost:27017/?replicaSet=rs0

收到错误:

Error: connect failed to replica set rs0/localhost:27017 

我可以只使用 1 个默认节点吗?

我连接到主服务器的有效连接字符串是什么?

标签: mongodbdocker-composereplicaset

解决方案


推荐阅读