前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB Docker版本:基础入门和复制集

MongoDB Docker版本:基础入门和复制集

作者头像
alexhuiwang
发布2020-09-24 11:21:01
7210
发布2020-09-24 11:21:01
举报
文章被收录于专栏:运维博客

mongoDB基础入门

介绍

mongoDB是一个存储文档非关系型数据库

  • mongoDB的结构:
    • 数据库: 包含集合
    • 集合: 存储文档
    • 文档: json格式

一条命令在docker容器中运行mongoDB

代码语言:javascript
复制
docker run --name mymongo -v /mongo/data:/data/db -d mongo:4
docker ps #查看容器状态
docker logs mymongo   #查看日志

mongoExpress 的使用

基于网络的mongoDB数据库管理页面

代码语言:javascript
复制
docker pull mongo-express
docker run --link mymongo:mongo -p 8081:8081 mongo-express

浏览器访问http://ip:8081 即可

mongo Shell客户端

是一个用来操作mongoDB的javascript客户端界面

代码语言:javascript
复制
运行mongo shell

docker exec -it mymongo mongo
> exit #退出mongoshell进程

mongoDB复制集

数据复制

带来的好处

  • 高可用性
  • 安全性
  • 分流与分工

复制集

mongodb集群

  • 不同节点有不同的分工
    • 主节点: 处理写请求
    • 副节点: 从主节点复制和更新数据,和主节点数据保持一致;处理读请求
  • 复制集节点
    • 每个节点都会想其他节点按照一定频率发送心跳请求
    • 每隔2s发送一次,超过10s则请求超时
    • 每个复制集节点最多有50个节点(因为心跳请求的数量是有限的,会影响机器的性能)
  • 复制集选举
    • 复制集节点上有term的计数器,每次选举会将term+1
    • 如果主节点下线或者故障,剩余的副节点会因为心跳不通而开始选举
    • 各节点优先级的不同会使其成为新主节点的可能性
    • 候选节点会发起选举,先给自己投一票,然后更新计数器
    • 对比数据和先主节点的数据同步程度,高的会优先选择
    • 候选节点得票数超过一半,会优先被选举成新的主节点

复制集的候选节点发起选举,每个节点投票给比自己更同步的节点 得到超过半数选票的候选节点会当选为主节点 复制集中最多可以有7个投票节点

  • 触发选举的事件
    • 主节点和副节点之间的心跳超时
    • 复制集初始化
    • 新节点加入复制集

投票机

  • 也是一个副节点
  • 不会从主节点同步数据
  • 不可能被选举为主节点
  • 可以参与投票,但不能给自己投票

初始同步

  • 主节点上的所有信息拷贝到副节点

同步写库记录

  • 性能比较差,会出现block的情况
  • local.oplog.rs(主副节点是同步的)
  • 写库记录中的每条记录都可以被重复使用
  • 多个线程分批次使用日志记录
  • 写库日志的大小和文档的大小不一定成正比

复制集的搭建

  • 使用docker的方式
代码语言:javascript
复制
### 前期准备
~]# docker network create mynetwork
~]# docker network ls
~]# docker run --net mynetwork --name mongo1 -v /mymongo/data1:/data/db -p 27017:27017 -d mongo:4 --replSet myset --port 27017
~]# docker run --net mynetwork --name mongo2 -v /mymongo/data2:/data/db -p 27018:27018 -d mongo:4 --replSet myset --port 27018
~]# docker run --net mynetwork --name mongo3 -v /mymongo/data3:/data/db -p 27019:27019 -d mongo:4 --replSet myset --port 27019
### 创建复制集
~]#  docker exec -it mongo1 mongo
> rs.initiate(
    {
        _id: "myset",
        members: [
            { _id: 0, host: "mongo1:27017" },
            { _id: 1, host: "mongo2:27018" },
            { _id: 2, host: "mongo3:27019" }
        ]
    }
)
> rs.status()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mongoDB基础入门
    • 介绍
      • 一条命令在docker容器中运行mongoDB
      • mongoExpress 的使用
      • mongo Shell客户端
  • mongoDB复制集
    • 数据复制
      • 复制集
        • 投票机
          • 初始同步
          • 同步写库记录
        • 复制集的搭建
        相关产品与服务
        容器镜像服务
        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档