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({},{})

  • 相关阅读:
    阿里巴巴的云原生应用开源探索与实践
    Helm 3 发布 | 云原生生态周报 Vol. 27
    带你上手一款下载超 10 万次的 IDEA 插件
    最强CP!阿里云联手支付宝小程序如何助力双11?
    媲美5G的Wifi网速、“备战”资产一键领……揭秘双11小二背后的保障力量
    dubbo-go 的开发、设计与功能介绍
    饿了么交付中心语言栈转型总结
    数据一致性检测的应用场景与最佳实践
    2684亿!阿里CTO张建锋:不是任何一朵云都撑得住双11
    《DNS稳定保障系列3--快如闪电,域名解析秒级生效》
  • 原文地址:https://www.cnblogs.com/phpk/p/11121412.html
Copyright © 2011-2022 走看看