【mongo 系列】mongodb 学习九,MongoDB 主从集群 2

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 继续咱们 mongodb 集群的学习和分享上次分享了 mongodb 主从集群的同步机制(oplog),心跳机制,这次我们继续看看选举机

继续咱们 mongodb 集群的学习和分享

上次分享了 mongodb 主从集群的同步机制(oplog),心跳机制,这次我们继续看看选举机制和副本回滚

选举机制

咱们的主节点和其他次要节点选举策略默认的时间是 10 秒钟

image.png

例如上图

mongodb 主从集群中,primary 节点挂掉之后,剩下的两个 mongodb 次节点中间产生选举,选举出一个成为新的 primary 节点

对于上述集群,总共 3 个副本,计算出来结果是 2,则 mongodb 会在 这俩中选举一个出来

这个选举的方式是用的大多数选举机制,即为 集群的副本数 / 2 +1  , (一般集群都是奇数个的)

因为如果是偶数个副本,且他们又处于 2 个网络环境中,若其中一个副本挂掉,就会出现服务不可用的情况,所有我们选择集群使用奇数个,主要是为了保证高可用

可以举一个例子:

image.png

例如,有 4 个 mongodb 副本,部署在同一个环境中,则按照大多数选举机制,4/2 + 1 = 3 ,也就是说

当其中有  primary 挂掉的时候,只要剩下的 副本有 4 个或者 4 个以上,就可以选举出 1 个primary, 服务还是正常可用

image.png

若 这 4 个  mongodb 副本 分别部署在网络不通的 2 个机房里面,这个时候 其中 1 个副本挂掉,

那么在能够网络互相通的 副本里面,无法组成 3 个副本,因此无法选举,则服务就不可用了

所有节点都可以参与选举吗?

这里需要注意,并不是所有的节点都可以参与选举哟,例如 副本里面会设置相应的字段,vote : 0  的情况则是不参与选举,只会作为一个负载

priority 字段的范围是 0 - 1000 ,见名知意,该字段的数字越大,那么投票的权重就越高

副本回滚

副本回滚,见名知意,就是副本关于数据版本的回滚,那么具体是什么效果呢?

还是刚才的 1 主 2 次的集群,当客户端发送写操作给到主的时候,主接收到了,正要将其数据同步给两个次副本的时候,主副本挂掉了

image.png

这个时候,就会通过上述的大多数选举机制来选举出一个新的主副本,暂定选中 mongodb 2

那么,刚才的写操作,由于主副本挂掉,没有及时将数据同步到 次副本,那么mongodb 集群里面会开启重写,重新将刚才的写操作写入到新的主副本中

image.png

此时,刚才旧的主副本恢复过来后,就会将自己挂掉之前的写操作要同步给集群中的副本,可是这个时候,新的主副本就会告诉就的主副本,表示你的版本太旧了,需要回滚

这里刚才有说到重写,其实写操作既写入到了旧主副本中,也写入了新的主副本中,可是他们的插入数据库的 id 是不同的,因此新的主副本认为旧的主副本需要回滚

image.png

现在,集群又开始了正常的工作和运转,只不过主副本变成了 mongodb 2

image.png

集群的读写分离

在 mongodb 集群中,默认情况下,客户端的写操作是给 主副本的,读操作也是从主副本中读

我们也可以设置客户端直接从我们指定的次副本中读取数据,将读取操作放到次副本上

image.png

本次分享了

  • mongodb 的选举机制
  • 副本回滚
  • 集群的读写分离

学习所得,若有偏差,还请斧正


欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
打赏
0
0
0
0
63
分享
相关文章
客户说|知乎核心业务MongoDB集群的平滑上云迁移实践
客户说|知乎核心业务MongoDB集群的平滑上云迁移实践
|
4月前
|
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
107 15
MongoDB保姆级指南(中):从副本集群、分片集群起航,探索分布式存储的趋势!
本文一起来聊聊MongoDB集群,顺带以MongoDB集群为起点,共同探讨一下分布式存储的发展趋势~
1039 15
MongoDB集群同步
实现 MongoDB Cluster-to-Cluster 即集群同步的工具是:mongosync 详情可参考如下官方文档: https://www.mongodb.com/zh-cn/docs/cluster-to-cluster-sync/current/quickstart/ 以上这个地址的文档一看就是机器翻译的,可能有不恰当的地方,但基本可参考使用。 以下是本次在某项目地配置集群同步的简要步骤,可参考使用。
144 6
轻松上手:逐步搭建你的高可用MongoDB集群(分片)
【8月更文挑战第13天】在数据激增的背景下,传统单机数据库难以胜任。MongoDB作为流行NoSQL数据库,采用分片技术实现水平扩展,有效处理海量数据。分片将数据分散存储,提高并发处理能力和容错性,是高可用架构基石。构建MongoDB集群需理解shard、config server和router三组件协同工作原理。通过具体实例演示集群搭建流程,包括各组件的启动及配置,确保数据高可用性和系统稳定性。合理规划与实践可构建高效稳定的MongoDB集群,满足业务需求并支持未来扩展。
225 0
【Python】已解决:(MongoDB安装报错)‘mongo’ 不是内部或外部命令,也不是可运行的程序
【Python】已解决:(MongoDB安装报错)‘mongo’ 不是内部或外部命令,也不是可运行的程序
840 0
|
20天前
|
微服务——MongoDB常用命令1——数据库操作
本节介绍了 MongoDB 中数据库的选择、创建与删除操作。使用 `use 数据库名称` 可选择或创建数据库,若数据库不存在则自动创建。通过 `show dbs` 或 `show databases` 查看所有可访问的数据库,用 `db` 命令查看当前数据库。注意,集合仅在插入数据后才会真正创建。数据库命名需遵循 UTF-8 格式,避免特殊字符,长度不超过 64 字节,且部分名称如 `admin`、`local` 和 `config` 为系统保留。删除数据库可通过 `db.dropDatabase()` 实现,主要用于移除已持久化的数据库。
57 0
|
21天前
|
从 MongoDB 到 时序数据库 TDengine,沃太能源实现 18 倍写入性能提升
沃太能源是国内领先储能设备生产厂商,数十万储能终端遍布世界各地。此前使用 MongoDB 存储时序数据,但随着设备测点增加,MongoDB 在存储效率、写入性能、查询性能等方面暴露出短板。经过对比,沃太能源选择了专业时序数据库 TDengine,生产效能显著提升:整体上,数据压缩率超 10 倍、写入性能提升 18 倍,查询在特定场景上也实现了数倍的提升。同时减少了技术架构复杂度,实现了零代码数据接入。本文将对 TDengine 在沃太能源的应用情况进行详解。
40 0
数据库数据恢复—MongoDB数据库迁移过程中丢失文件的数据恢复案例
某单位一台MongoDB数据库由于业务需求进行了数据迁移,数据库迁移后提示:“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等