Docker两主机配置MongoDB复制集

268 阅读2分钟

通过Docker用两台主机配置并测试一下MongoDB复制集,比较详细

1. 建立Swarm集群 - 连接两台服务器

  1. 第一台主机设置为集群manager

    docker swarm init
    
  2. 查找Swarm Manager的token

    docker swarm join-token worker -q
    

    得到token:

    SWMTKN-1-226ce73rn808wmcy91zg68qfn6jq021rrh385e8nuyal0cz51g-bgy5jkn6tt606u209n1nd9i0f
    
  3. 查找Swarm Manager的ip / port

    docker node inspect self
    

    得到信息:

    "ManagerStatus": {
                "Leader": true,
                "Reachability": "reachable",
                "Addr": "172.18.7.130:2377"
            }
    
  4. 建立集群Overlay网络

    docker network create --driver=overlay --atachable my-overlay-network
    
  5. 第二台主机加入Swarm网络

    docker swarm join --token 得到的token 得到的ip:得到的port
    

2. 两台主机上分别创建Container

  1. 创建Container

    docker run \
    -dit \
    --name mongo1 \
    --net my-overlay-network \
    mongo mongod --replSet rs0
    
  2. 进入container

    docker run -dit --name mongo1 --net my-overlay-network mongo mongod --replSet rs0
    
    docker exec -it mongo1 mongosh
    
    rs.initiate({_id: "rs0", members: [{_id: 0, host: "mongo1:27017"}, {_id: 1, host: "mongo2:27017"}]})
    
  3. 验证

    rs.status()
    
    members: [
        {
          _id: 0,
          name: 'mongo1:27017',
          health: 1,
          state: 1,
          stateStr: 'PRIMARY',
          uptime: 470,
          optime: { ts: Timestamp({ t: 1682403381, i: 7 }), t: Long("1") },
          optimeDate: ISODate("2023-04-25T06:16:21.000Z"),
          lastAppliedWallTime: ISODate("2023-04-25T06:16:21.304Z"),
          lastDurableWallTime: ISODate("2023-04-25T06:16:21.304Z"),
          syncSourceHost: '',
          syncSourceId: -1,
          infoMessage: 'Could not find member to sync from',
          electionTime: Timestamp({ t: 1682403379, i: 1 }),
          electionDate: ISODate("2023-04-25T06:16:19.000Z"),
          configVersion: 1,
          configTerm: 1,
          self: true,
          lastHeartbeatMessage: ''
        },
        {
          _id: 1,
          name: 'mongo2:27017',
          health: 1,
          state: 2,
          stateStr: 'SECONDARY',
          uptime: 18,
          optime: { ts: Timestamp({ t: 1682403381, i: 7 }), t: Long("1") },
          optimeDurable: { ts: Timestamp({ t: 1682403381, i: 7 }), t: Long("1") },
          optimeDate: ISODate("2023-04-25T06:16:21.000Z"),
          optimeDurableDate: ISODate("2023-04-25T06:16:21.000Z"),
          lastAppliedWallTime: ISODate("2023-04-25T06:16:21.304Z"),
          lastDurableWallTime: ISODate("2023-04-25T06:16:21.304Z"),
          lastHeartbeat: ISODate("2023-04-25T06:16:25.966Z"),
          lastHeartbeatRecv: ISODate("2023-04-25T06:16:25.467Z"),
          pingMs: Long("0"),
          lastHeartbeatMessage: '',
          syncSourceHost: 'mongo1:27017',
          syncSourceId: 0,
          infoMessage: '',
          configVersion: 1,
          configTerm: 1
        }
      ],
    

    测试一下,大功告成