美文网首页
Docker中配置MongoDB副本集群

Docker中配置MongoDB副本集群

作者: 岑吾 | 来源:发表于2020-09-01 15:48 被阅读0次

    特性

    1. n个不同类型节点组成
    2. 每个节点数据相同
    3. 建议至少有一个primary和两个secondary节点
    4. 集群中只能有一个primary节点
    5. 写请求都通过primary节点
    6. 支持自动故障恢复
    7. primary节点不可用时,通过投票选举从secondary节点列表中选出primary节点,因此最好节点数量是奇数
    8. secondary节点从primary节点通过oplog异步方式同步数据 节点类型

    创建容器

    docker run -d --name m0 --volume /data/mdb/m0:/data/db -p 27017:27017 mongo /bin/bash -c 'mongod --replSet replset0' --auth
    docker run -d --name m1 --volume /data/mdb/m1:/data/db -p 27018:27017 mongo /bin/bash -c 'mongod --replSet replset0' --auth
    docker run -d --name m2 --volume /data/mdb/m2:/data/db -p 27019:27017 mongo /bin/bash -c 'mongod --replSet replset0' --auth
    
    容器名 ip 备注
    m0 127.0.0.1:27017 Primary(主, 读写)
    m1 127.0.0.1:27018 Secondary1(从,读)
    m2 127.0.0.1:27019 Secondary2(从, 读)

    配置副本集

    docker exec -it m0 mongo
    >use admin
    >config = { _id:"replset0", members:[{_id:0,host:"127.0.0.1:27017"},{_id:1,host:"127.0.0.1:27017"},{_id:2,host:"127.0.0.1:27019"}]}
    >rs.initiate(config)
    

    创建数据库密码

    docker exec -it m0 mongo admin --eval "db.createUser({ user: 'root', pwd: '123456', roles: [ { role: 'root', db: 'admin' } , 'readWriteAnyDatabase'] })"
    

    测试

    Primary 插入

    docker exec -it m0 mongo
    >use admin
    >db.auth("root", "123456")
    
    >use school
    >db.student.insert({name:"Guoke", age:16})
    >db.student.insert({name:"CenWu", age:15})
    

    Secondary1库查询

    docker exec -it m1 mongo
    >db.getMongo().setSlaveOk()
    >use school
    >db.student.find()
    { "_id" : ObjectId("5f4de851632fb64e4ba9838f"), "name" : "Guoke", "age" : 16 }
    { "_id" : ObjectId("5f4de855632fb64e4ba98390"), "name" : "CenWu", "age" : 15 }
    

    节点属性说明

    > rs.config()
    {
        "_id" : "replset0",
        "version" : 1,
        "protocolVersion" : NumberLong(1),
        "members" : [
            {
                "_id" : 0,
                "host" : "127.0.0.1:27017",
                "arbiterOnly" : false,
                "buildIndexes" : true,
                "hidden" : false,
                "priority" : 1,
                "tags" : {
                    
                },
                "slaveDelay" : NumberLong(0),
                "votes" : 1
            },
            {
                "_id" : 1,
                "host" : "127.0.0.1:27018",
                "arbiterOnly" : false,
                "buildIndexes" : true,
                "hidden" : false,
                "priority" : 1,
                "tags" : {
                    
                },
                "slaveDelay" : NumberLong(0),
                "votes" : 1
            },
            {
                "_id" : 1,
                "host" : "127.0.0.1:27019",
                "arbiterOnly" : false,
                "buildIndexes" : true,
                "hidden" : false,
                "priority" : 1,
                "tags" : {
                    
                },
                "slaveDelay" : NumberLong(0),
                "votes" : 1
            }
        ],
        "settings" : {
            "chainingAllowed" : true,
            "heartbeatIntervalMillis" : 2000,
            "heartbeatTimeoutSecs" : 10,
            "electionTimeoutMillis" : 10000,
            "getLastErrorModes" : {
                
            },
            "getLastErrorDefaults" : {
                "w" : 1,
                "wtimeout" : 0
            },
            "replicaSetId" : ObjectId("5f4de76695204c8d504ff50c")
        }
    }
    

    priority: 0 表示不是候选人,可以投票
    hidden:true 对用户端不可见,不可见的节点priority必须设置为0
    votes: 1 投票权限 0表示不能投票

    修改配置

    修改hidden属性

    > use admin 
    > cfg = rs.conf()
    > cfg.members[2].priority = 0
    > cfg.members[2].hidden = true
    > rs.reconfig(cfg)
    

    添加节点

    mongo 主节点地址
    rs.add({} | host地址)
    

    删除节点

    mongo 主节点地址
    # 删除前,建议先停止这个节点的服务
    rs.remove(hostname)
    

    更改集群配置

    mongo 主节点地址
    rs.reconfig({},{})
    

    相关文章

      网友评论

          本文标题:Docker中配置MongoDB副本集群

          本文链接:https://www.haomeiwen.com/subject/pzsvsktx.html