MongoDB基础入门之一:基础入门和复制集

mongoDB基础入门

介绍

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

  • mongoDB的结构:

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

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

docker run --name mymongo -v /mongo/data:/data/db -d mongo:4
docker ps #查看容器状态
docker logs mymongo   #查看日志

mongoExpress 的使用

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

docker pull mongo-express
docker run --link mymongo:mongo -p 8081:8081 mongo-express

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

mongo Shell客户端

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

运行mongo shell

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

mongoDB复制集

数据复制

带来的好处

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

复制集

mongodb集群

  • 不同节点有不同的分工

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

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

  • 触发选举的事件

    • 主节点和副节点之间的心跳超时
    • 复制集初始化
    • 新节点加入复制集

投票机

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

初始同步

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

同步写库记录

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

复制集的搭建

  • 使用docker的方式
### 前期准备
~]# 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()

原文地址:https://blog.51cto.com/13812615/2482347

时间: 2024-10-06 00:20:12

MongoDB基础入门之一:基础入门和复制集的相关文章

【MongoDB】windows平台搭建Mongo数据库复制集(类似集群)(转)

原文链接:[MongoDB]windows平台搭建Mongo数据库复制集(类似集群)(一) Replica  Sets(复制集)是在mongodDB1.6版本开始新增的功能,它可以实现故障自动切换和自动修复功能成员节点的功能,各个DB之间的数据完全一致,大大降低了单点故障的风险. [] 以上图示是三个节点的Replica Set架构.该图来源于红丸编写的<Mongodb管理与开发精要>这本书.从上图可以看出,结构类似与一个集群,其实完全可以当做一个集群.因为它确实和集群实现的作用是相同的. 一

【MongoDB】windows平台搭建Mongo数据库复制集(类似集群)(三)

关于windows平台搭建Mongo数据库复制集这个话题,我已经在前面写了两篇博客 第一篇: 如何在windows平台搭建Mongo数据库复制集 第二篇: 数据同步和故障自适应测试 在本篇里面,咱们重点总结一下复制集,以及分析一下它的工作原理 一.常见场景 应用程序和数据库之间的网络连接丢失 计划停机.断电.数据库服务硬盘故障等等 复制可以进行故障转移,复制能让你在副本间均衡读负载,保证复制节点与主节点保持同步 二.工作原理 副本集依赖于两个基础机制:oplog和"心跳"(heartb

【MongoDB】windows平台搭建Mongo数据库复制集(类似集群)(二)

在上篇博客中,我们主要阐述了在windows平台下如何搭建mongodb复制集.详细博客地址: 由于篇幅有限在上篇没有对结果进行验证,在本篇博客中我们主要进行测试: 通过rs.status()命令我们可以查询到各个节点运行正常. 一.数据同步测试 在28011.28012端口上进行插入: 查看原因:网上找到答案 首先这是正常的,因为SECONDARY是不允许读写的, 在写多读少的应用中,使用Replica Sets来实现读写分离.通过在连接时指定或者在主库指定slaveOk,由Secondary

【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(一)

Replica  Sets(复制集)是在mongodDB1.6版本号開始新增的功能.它能够实现故障自己主动切换和自己主动修复功能成员节点的功能,各个DB之间的数据全然一致,大大减少了单点故障的风险. [] 以上图示是三个节点的Replica Set架构.该图来源于红丸编写的<Mongodb管理与开发精要>这本书.从上图能够看出,结构类似与一个集群.事实上全然能够当做一个集群.由于它确实和集群实现的作用是同样的. 一.部署Replica Sets. 接下来显示怎样在一台server上面演示部署3

MongoDB实战指南(七):MongoDB复制集之复制集工作机制

http://www.cnblogs.com/longshiyVip/p/5097336.html 概述了复制集,整体上对复制集有了个概念,但是复制集最重要的功能之——自动故障转移是怎么实现的呢?数据同步又是如何实现的?带着这两个问题,下面展开分析. 一. 数据同步 先利用mongo客户端登录到复制集的primary节点上. >mongo --port 40000 查看实例上所有数据库 rs0:PRIMARY> show dbs local 0.09375GB 可以看到只有一个local数据库

Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析

转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编译,所以借此篇内容说明一下原由并为之后文章的学习做准备. 即使本片内容只是在围绕一个小小的HelloWorld程序开展,但还是希望朋友们不要急于求成,"欲速则不达". 文章整体思路: 我们循序渐进地来看,一个Qt应用的完成有以下一个重要的步骤: 项目创建->源码编译->程序运行

一起学Google Daydream VR开发,快速入门开发基础教程一:Android端开发环境配置一

原文因涉及翻墙信息,被强制删除,此文为补发! 准备工作 进入Google Daydream开发者官网,开启准备工作,官网地址:https://vr.google.com/daydream/developers/ -------------------------------------------------------------------------------------------------------------------- Google Daydream开发者网址: https

Qt入门之基础篇 ( 一 ) :Qt4及Qt5的下载与安装

转载请注明出处:CN_Simo. 导语: Qt是一个跨平台的C++图形界面应用程序框架.它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序.Qt很容易扩展,并且允许真正地组件编程.基本上,Qt同X Window上的Motif,Openwin,GTK等图形界面库以及Windows平台上的MFC.OWL.VCL.ATL是同类型的东西. 本系列教程以Qt5.6为基础展开精讲. 参考书目: [1]霍亚飞.Qt Creator快速入门(第3版).2017年 [2]蔡

HBase入门修行基础篇

HBase入门修行基础篇 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力.HBase是Apache的Hadoop项目的子项目.HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是H