zoukankan      html  css  js  c++  java
  • Docker Mongo数据库主从同步配置方法

     一、具体操作方法

    1、启两个Mongo容器

    docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles --replSet rs1
    docker run --name mongo2 -p 22117:27017 -d mongo --noprealloc --smallfiles --replSet rs1

    也可以在启动容器的时候,自定义Mongo数据存放路径,且将mongo数据挂载到本地

    docker run --name mongo_rs1 -v ~/test/mongo_sr1:/mongodb -p 21117:27017 -d mongo mongod --logpath /mongodb/mongo.log  --logappend --dbpath /mongodb --replSet rs1
    
    docker run --name mongo_rs2 -v ~/test/mongo_sr2:/mongodb -p 22117:27017 -d mongo mongod --logpath /mongodb/mongo.log  --logappend --dbpath /mongodb --replSet rs1

    2、查看正在运行的容器

    docker ps | grep mongo

    3、查看mongo1、mongo2容器ip

    docker inspect mongo1 | grep IPA


    4、使用本机(宿主机)mongo客户端连接到21117端口(即连接到mongo1容器)

    mongo --port 21117

    5、开始配置 复制集的成员信息

     myconf = {"_id":"rs1","members":[{"_id":0,"host":"172.17.0.13:27017"},{"_id":1,"host":"172.17.0.14:27017"}]}

    6、初始化同步复制集群

    rs.initiate(myconf)

    注意:在启动容器时,--replSet rs1 这个值mongo1和mongo2要保持一致,否则在初始化同步时,会出错。

    7、查看当前复制集的节点信息

    rs.isMaster()

     可以看出连接到的容器ip是172.17.0.13 也可以看见谁是主节点

    查看状态

    rs.status()

     查看配置

    rs.conf()

    8、另外在本地再开一个终端 连接到第二个容器 

    mongo --port 22117

    查看当前master

    rs.isMaster()

    可以看到主节点的信息 和上个容器的信息一致

    rs.status()
    {
        "set" : "rs1",
        "date" : ISODate("2018-07-07T01:53:14.330Z"),
        "myState" : 2,
        "term" : NumberLong(1),
        "syncingTo" : "172.17.0.13:27017",
        "heartbeatIntervalMillis" : NumberLong(2000),
        "optimes" : {
            "lastCommittedOpTime" : {
                "ts" : Timestamp(1530928387, 1),
                "t" : NumberLong(1)
            },
            "readConcernMajorityOpTime" : {
                "ts" : Timestamp(1530928387, 1),
                "t" : NumberLong(1)
            },
            "appliedOpTime" : {
                "ts" : Timestamp(1530928387, 1),
                "t" : NumberLong(1)
            },
            "durableOpTime" : {
                "ts" : Timestamp(1530928387, 1),
                "t" : NumberLong(1)
            }
        },
        "members" : [
            {
                "_id" : 0,
                "name" : "172.17.0.13:27017",
                "health" : 1,
                "state" : 1,
                "stateStr" : "PRIMARY",
                "uptime" : 310,
                "optime" : {
                    "ts" : Timestamp(1530928387, 1),
                    "t" : NumberLong(1)
                },
                "optimeDurable" : {
                    "ts" : Timestamp(1530928387, 1),
                    "t" : NumberLong(1)
                },
                "optimeDate" : ISODate("2018-07-07T01:53:07Z"),
                "optimeDurableDate" : ISODate("2018-07-07T01:53:07Z"),
                "lastHeartbeat" : ISODate("2018-07-07T01:53:12.960Z"),
                "lastHeartbeatRecv" : ISODate("2018-07-07T01:53:12.960Z"),
                "pingMs" : NumberLong(0),
                "electionTime" : Timestamp(1530928094, 1),
                "electionDate" : ISODate("2018-07-07T01:48:14Z"),
                "configVersion" : 1
            },
            {
                "_id" : 1,
                "name" : "172.17.0.14:27017",
                "health" : 1,
                "state" : 2,
                "stateStr" : "SECONDARY",
                "uptime" : 366,
                "optime" : {
                    "ts" : Timestamp(1530928387, 1),
                    "t" : NumberLong(1)
                },
                "optimeDate" : ISODate("2018-07-07T01:53:07Z"),
                "syncingTo" : "172.17.0.13:27017",
                "configVersion" : 1,
                "self" : true
            }
        ],
        "ok" : 1,
        "operationTime" : Timestamp(1530928387, 1)
    }

    9、如果在从节点此时查看数据库会出错 ,信息显示不是主节点

    show dbs;

    设置从节点可以读

    db.getMongo().setSlaveOk();

     或者用

    rs.slaveOk()

    10、在主节点mongo1中插入数据

    show dbs;
    
    use test;
    
    db.user1.insert({"name":"mongodb is user1"})
    
    db.user2.insert({"name":"mongodb is user2"})

    11、在从节点mongo2中查看

    show dbs;
    
    use test;
    
    show collections;
    
    db.user1.find()
    
    db.user2.find()

    可以看到在mongo1插入的数据,同步到了mongo2数据库来了~

    13、此时如果在mongo2从节点中插入数据

    db.user3.insert({"name":"mongodb is user3"})

    可以看到提示不是master主节点,无法写数据~

    到此,就给大家介绍完了如何通过docker+mongo来实现主从同步的操作方法,喜欢的可以关注公众号哦~

  • 相关阅读:
    USACO2.3.3Zero Sum
    微信公众平台消息接口开发(8)小黄鸡(小贱鸡)机器人
    微信群二维码
    PHP正则表达式入门教程[转]
    微信公众平台消息接口开发(23)图片识别之男人味/女人味指数
    微信公众平台消息接口开发(50)在线点歌/在线音乐
    微信公众平台消息接口开发(21)图片识别之亲子鉴定
    微信公众平台消息接口开发(4)天气预报
    微信公众平台消息接口开发(5)股票查询
    微信公众平台消息接口开发(40)语音识别
  • 原文地址:https://www.cnblogs.com/jinjiangongzuoshi/p/9301062.html
Copyright © 2011-2022 走看看