当前播放: 10 | 复制集机制及原理
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
课程目录
第一章:MongoDB再入门 (12讲)
01 | 课程介绍
免费
02 | 内容综述
免费
03 | 认识文档数据库MongoDB
免费
04 | MongoDB特色及优势
免费
05 | 实验:安装MongoDB
免费
06 | MongoDB基本操作
07 | 实验:Hello World程序开发
08 | 聚合查询
09 | 实验:聚合查询
10 | 复制集机制及原理
11 | 实验:搭建MongoDB复制集
12 | MongoDB全家桶
第二章:从熟练到精通的开发之路 (12讲)
13 | 模型设计基础
14 | JSON文档模型设计特点
15 | 文档模型设计之一:基础设计
16 | 文档模型设计之二:工况细化
17 | 文档模型设计之三:模式套用
18 | 设计模式集锦
19 | 事务开发:写操作事务
20 | 事务开发:读操作事务之一
21 | 事务开发:读操作事务之二
22 | 事务开发:多文档事务
23 | Change Stream
24 | MongoDB开发最佳实践
10 | 复制集机制及原理

10 | 复制集机制及原理

唐建法(TJ)
Tapdata CTO、MongoDB中文社区主席、前MongoDB大中华区首席架构师
47讲 约500分钟3451
单独订阅¥129
2人成团¥99
本节摘要

下次更新时间为:12 月 4 日
课件和 Demo 地址
https://github.com/geektime-geekbang/geektime-mongodb-course

展开
登录 后留言

精选留言(18)

  • 趁早
    为什么最多只有7个节点能拥有投票权
    2019-11-20
    2
    4
  • Julien
    老师你好。MongoDB官方好像是建议1主1从1arbiter。如果是1主2从,主节点挂掉后,两个从节点都投票给自己,这样僵持,不是会没法产生新的master吗?

    作者回复: “MongoDB官方好像是建议1主1从1arbiter” 请提供相应的文章。

    主节点挂了以后,两个从节点的投票算法会防止你说的现象发生。具体来说,如果两个从节点条件完全一样,那么第一个主张的节点就获胜。如果两个从节点同时主张自己,那么两个人同时放弃,并用一个随机值等待一小段时间(数秒),然后重试。所以总有一个节点会在另一个之前选为主节点。

    2019-11-25
    1
    2
  • walker
    通常怎样提高写性能?

    作者回复: - 升级存储是最直接的方案,如PCIE + SSD
    - 注意索引的数量:索引越多写入越慢
    - 分片: 增加写的节点来提供并发

    2019-11-22
    2
  • LbbNiu
    如果是奇数节点,那么主节点挂掉,不就变成偶数节点了?

    作者回复: 总数是看最初的配置,如你部署并配置了3个,虽然坏了一个,但是你的拓扑还是3节点, 按3节点的规则,剩下2个存活就可以正常工作。

    2019-11-21
    2
    2
  • 王征
    太多的slave 数据节点。都从主节点拉oplog 是否反而增加了主节点的压力?反而让主节点性能变差了?

    写主 读取从的这种配置是否还被推荐?什么场景适合这种?

    作者回复: 太多从节点会增加主节点的压力,大概是每增加一个节点会有10%左右的性能影响。

    主从读写分离还是比较常见的。所有读操作对数据时效(如报表型,或者历史数据)不高的都可以用从节点。

    2019-12-01
    1
  • walker
    老师前面答复中说,增加副本集节点,只能提高并发访问能力,单个查询并不会变快。
    那么有办法通过水平扩展的方式提高单个查询的性能吗?

    作者回复: 通过水平扩展可以提高整体的吞吐量,但是单个(比如说,查询 id=1234 这条记录)查询是不会得到改善的。因为这个查询就是会在一个节点上发生。

    提高单个查询性能就是把数据放在内存里,加上合适的索引可以来提升性能(降低读取延迟)

    2019-11-27
    1
    1
  • 朱仁欢
    唐老师,选举是发生在主节点故障时,那么它也会参与投票么?

    作者回复: 主节点故障如果是进程crash或者server crash,那么它当然无法进行选举。

    如果故障是因为节点之间网络不通,那失联的主节点会自动降级为从节点。

    如果是短暂故障马上回复后,主节点(这个时候已经是从节点了)会重新加入选举,但是有个30秒的等待期。

    2019-11-20
    1
  • 旺旺
    老师,
    1.建立3个独立的单机库,然后导入同一份数据,然后将3个节点设置为复制集模式,那么被设置为从节点的数据库里面的数据会被清空,然后再从主节点再同步回来吗?
    2.如果3个节点通过公网ip地址互连,那么这中间的数据通信需要做安全防护吗?也就是这个时候节点间的通信数据被窃取,是否有泄露数据的风险?

    作者回复: 1)是的会重新同步。节点之间判断是否需要同步是根据local库里的元数据决定的。里面记录了节点同步的状态信息,并不是看你实际存储的数据。

    2)建议用SSL/TLS 加密链路就可以有效防止数据被窃取。

    https://docs.mongodb.com/manual/tutorial/configure-ssl/index.html

    2019-12-13
  • 老师你好,主从复制是否会产生延迟,如果有延迟,那么常见有哪些因素会导致延迟,该如何避免或者降低延迟

    作者回复: 主从复制会有延迟。常见因素:
    1) 网络抖动 (没办法)
    2)网络拥挤 (评估数据增量需求,给予足够的带宽)
    3)节点之间延迟太长
    4)主节点压力过大 (注意监控,压力过大要扩容)
    5)从节点配置不均衡,低于主节点配置(尽量均衡)

    2019-12-08
  • cheriston
    老师,MongoDB 4.2 集群分片不均匀,怎么办?

    作者回复: 你可以描述的详细点吗?如何不均匀?

    2019-12-02
  • walker
    副本集提高读性能,是指提高并发访问的性能,还是指单个查询会变快?或者二者兼有之?

    作者回复: 通过增加节点,并且每个节点同时提供服务来提高并发访问能力。

    单个查询的性能不受影响(不会变快)。

    2019-11-26
    1
  • dream
    请问 mongodb 的复制线程是主节点上的线程还是从节点上的线程?复制是主节点通知从节点还是从节点定时拉去呢?

    作者回复: 主从复制是由从节点的线程发起的。通过监听主节点的oplog表的变化,并把oplog的entries pull到从节点进行回放。

    oplog变化通知的方式类似于你在linux 下执行一个tail -f 命令,一旦你tail的文件(oplog)有变化,马上就会打印出来。或者在java里是类似于observable pattern。

    2019-11-25
  • 雷敏
    TJ老师:
    菜鸟 有2个疑问:
    1 投票节点疑问:
    投票节点为什么不建议用?我看有的书上,如果是偶数的时候,又增加一个投票节点,这样就变成奇数了,比如3个数据节点,2个投票节点。mongo为什么要设计投票节点?

    2 集群部署问题:
    1 从节点之间出现心跳不通,但是都和主节点是通的,这个会出现问题么?是不是网络结构部署有问题?

    作者回复: 1)投票节点的最早设计初衷:需要奇数节点满足一致性协议,但同时又想节省资源。为何不建议用?降低的可用性(丢一个数据节点后风险很高),无法使用更高的writeConcern(后续章节会讲)来保证在主从切换的时候保证不丢失数据

    2) 这种现象出现的可能性不大,你可以尝试下画下网络拓扑,具体到物理层链路。如果真的出现了,应该是可以继续工作的。

    2019-11-23
  • 蓝魔丶
    选举这块,如果有三个节点,leader节点挂了,剩余的两个节点能对外提供服务吗?能完成选举不?

    作者回复: 可以 - 剩下两个满足大多数(2)就可以正常完成选举并工作。

    2019-11-21
    1
  • 尘封
    多谢TJ答复,不过经过多次测试发现一个问题
    假如A是master,B是slave,复制架构如下所示,里面有个库是db23,库里的集合有tb1 tb2 tb3
    A(master) ----> B(slave)
    现在新加入一个slave C,但是C在加入之前已经存在db23这个库,里面有一个集合tb1
    当C从A复制后发现,db23并没有被删掉db23重新同步,而是保留了C之前的db23这个库,里面只有tb1集合,其它tb2 tb3并没有同步过来。
    2019-11-21
    1
  • Aaron niu
    增加节点之后增加延迟
    2019-11-20
  • 尘封
    Mongodb2.4主从架构,从库复制从主库复制数据时会清空本地所有数据库吗?然后再同步?包括admin库

    作者回复: 如果是因为同步滞后,超过oplog window大小,或者是数据库损坏,或者是刚加入主库,都需要执行initial syn的操作,这个就会清空本地库再同步。

    2019-11-20
  • 乘坐Tornado的线程魔法师
    TJ你好!请问下有关选举过程:对于保证大多数选举节点存活这一个条件。举例有7个选举节点,是不是意味着必须有4个节点以上存活才可以进行选举?如果有4个节点存活,但是存活节点是偶数个,是否可以完成RAFT算法完成选举。还是说选举节点必须是奇数个?

    作者回复: 选举节点必须是奇数,过半数(4)才可以工作和选举

    2019-11-20
收起评论
看过的人还看
Elasticsearch核心技术与实战

阮一鸣  eBay Pronto平台技术负责人

100讲 | 16796 人已学习

拼团 ¥89 原价 ¥129
设计模式之美

王争  前Google工程师,《数据结构与算法之美》专栏作者

100讲 | 18080 人已学习

拼团 ¥129 原价 ¥199
后端技术面试38讲

李智慧  同程艺龙交通首席架构师,前Intel&阿里架构师,《大型网站技术架构》作者

38讲 | 3711 人已学习

拼团 ¥79 原价 ¥99
MySQL实战45讲

林晓斌  网名丁奇,前阿里资深技术专家

48讲 | 43741 人已学习

拼团 ¥69 原价 ¥99