zoukankan      html  css  js  c++  java
  • docker添加mongo4.0.3并配置复制集

    1、创建docker 具体略过 自行百度

    2、创建数据持久化目录文件(/data/mongo0是个例子 命名随意)  拉取mongo docker pull mongo:4.0.3

    3、启动容器

    1 docker run --name mongo0 -p 27017:27017 --restart=always -v /data/mongo:/data/db -d mongo:4.0.3 --replSet "rs0"
    2 -v /etc/localtime:/etc/localtime:ro 同步主机时间
    3 --name 指定容器名称
    4 -p 映射容器端口
    5 -v 将服务器文件挂载到容器
    6 -d 后台运行
    7 --replSet "rs0" 设置集群的名称为rs0 这个名字可以随便起 但是需要保证参与集群的数据库名字一直

    如果希望容器随docker启动而启动 可添加

    --restart=always

    如果要设置已经启动的容器可以使用一下命令

    docker container update --restart=alway 容器名

    如果是修改mongod.conf 需要添加

    1 replication: //删除“#”,开启复制集功能
    2 replSetName: test-rc //名称为test-rc


    4、单机情况下需要查看mongoDB的在docker中的ip(当然可以设置不同的端口启用该步骤)

    docker inspect mongo0 | grep IPAddress 
    moogo0 为容器的名字

    5、进入容器

    docker exec -it mongo0 bash
    

      

    特别提醒:在数据库使用复制集之前 请先备份好数据 以免造成不必要的损失

    ./mongodump -o /data/export/ 备份所有数据库 (需要在mongo的bin目录下执行,也可使用绝对路径执行)
    ./mongorestore -h ip地址 -d zz_spiders /data/export/zz_spiders/
    -h 为需要恢复的服务器 -d为指定数据库 /data/export/zz_spiders/ 为备份文件所在地址(注意 批量备份后,仍需要单个文件恢复,否则会出现文件路径错误提示)

    6、登录mongoDB

    1 执行命令如下
    2 rs.initiate( {_id : "rs0",members: [{ _id: 0, host: "172.17.0.2:27017" },{ _id: 1, host: "172.17.0.3:27017" },{ _id: 2, host: "172.17.0.4:27017" }]})
    3 可以使用 {_id:0,host:'127.0.0.1:10002',priority:1} 指定主节点(多个节点 priority越高的 会成为主节点)
    4 _id:复制集的名称。必须与启动 mongod 的 --replSet 一致
    5 members:成员配置文件的列表。
    6 members[n]._id:用来识别成员的 id 不可以重复
    7 members[n].host:成员对应的 host:port 第四步中得到的ip

    7、使用rs.status();查看集群状态

    8、从库默认没有读写权限

    1 需要进入从库的mongoDB执行rs.slaveOk();或者db.getMongo().setSlaveOk();
    2 但是但是但是!!!
    3 只有当次生效!只有当次生效!只有当次生效!
    4 如果需要永久生效 可以依次执如下命令
    5 find / -name .mongorc.js
    6 vim /home/shengyang/.mongorc.js
    7 添加内容
    8 rs.slaveOk();

    强制更换主节点办法
    http://www.mongoing.com/docs/tutorial/force-member-to-be-primary.html

    1 注:
    2 在搭建过程中,遇到一个问题
    3 当将两个从节点停掉之后 在主使用rs.stepDown(120)将现有主节点切换为从节点 导致主节点丢失,该情况下 可以将停掉的一个从节点重启,此时主节点会自动选出,一位复制集的规则是必须有两台可用的数据库,才能够自动选举主从节点。
    4 另:本篇未涉及投票节点,感兴趣的可自行搜索相关文档即可
    5 多讲一句:本篇为4.0.3版本,4.0版本以下的相关命令 可能会失效! //经测试,个人操作原因,需要在执行 rs.reconfig();时添加"protocolVersion" : 1  
    比如这样:rs.reconfig( {_id : "rs0", "protocolVersion" : 1, members: [{ _id: 0, host: "192.168.1.64:27017",priority:2 },{ _id: 1, host: "192.168.1.50:27017" },{ _id: 2, host: "192.168.1.51:27017" }]})
    如果需要非主节点执行需要添加{ "force": true } 例如 rs.reconfig(cfg, { "force": true })

    //下面为设置已经启动的mongoDB的数据

    非docker环境 (当前目录在data)
    mkdir core
    cd core
    //生成keyfile
    openssl rand -base64 741 > mongodb-keyfile
    chmod 600 mongodb-keyfile

    mongod.conf中添加(注意json的格式)

    1 security:
    2    keyFile: "/data/core/mongodb-keyfile"
    3 replication:
    4    replSetName: rs0

    查看进程并关闭mongo

    1 ps aux | grep mongo 
    2 kill mongo进程
    3 
    4 当然也可以进入mongo依次执行(推荐)
    5 use admin
    6 db.shutdownServer();
    7 来关闭mongo

    重启mongo

    将mongodb-keyfile复制到其他mongo服务器
    执行

    chmod 600 mongodb-keyfile

    如果是docker 还需要执行

    chown 999 mongodb-keyfile

    普通环境下配置mongod.conf同上


    docker环境下执行

    1 docker run --name mongo -p 27017:27017 --restart=always -v /etc/localtime:/etc/localtime:ro -v /data/mongo:/data/db -v /data/core/mongodb-keyfile:/opt/mongodb-keyfile -d mongo:4.0.3 --smallfiles --keyFile=/opt/mongodb-keyfile --replSet "rs0"
    2 
    3 --smallfiles 开启验证
    4 --keyFile 设置统一的key

    进入主节点 auth验证之后 执行

    rs.add('从节点ip:从节点端口')
    

    至此,mongo复制集基本就搭建完成,并且数据已经开始同步了,本篇未涉及投票节点  

    常用命令

    设置从节点可用
    mongo --port 27018(填写实际的从节点地址)
    rs.slaveOk()

    查看集群状态
    mongo --port 27018
    rs.status()

    查看是否primary节点
    mongo --port 27018
    rs.isMaster()

    查看集群配置
    mongo --port 27018
    rs.conf()

    添加节点
    mongo 主节点地址
    rs.add({} | host地址) 例如rs.add('192.168.1.96:27017')

    删除节点
    mongo 主节点地址
    删除前,建议先停止这个节点的服务
    rs.remove(hostname) 例如rs.remove('192.168.1.96:27017')

    更改集群配置
    mongo 主节点地址
    rs.reconfig({},{})

  • 相关阅读:
    POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)
    UVaLive 5031 Graph and Queries (Treap)
    Uva 11996 Jewel Magic (Splay)
    HYSBZ
    POJ 3580 SuperMemo (Splay 区间更新、翻转、循环右移,插入,删除,查询)
    HDU 1890 Robotic Sort (Splay 区间翻转)
    【转】ACM中java的使用
    HDU 4267 A Simple Problem with Integers (树状数组)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4417 Super Mario (树状数组/线段树)
  • 原文地址:https://www.cnblogs.com/phpk/p/11121412.html
Copyright © 2011-2022 走看看