MongoDB高可用和分片集群知识

一、MongoDB实现高可用

1. MongoDB复制集(Replication Set)

  在实际生产中,MongoDB要实现高可用,以免MongoDB单实例挂了,服务不可用。MongoDB实现高可用是以MongoDB复制集的形式实现,和集群部署概念相同,MongoDB复制集有多个MongDB实例,其中包含一个主节点和多个从节点组成。所有对MongoDB的写操作都写入到主节点,从节点通过数据同步从主节点中复制数据(备节点不只是从主节点上同步数据,还可以选择一个离自己最近(心跳延时最小)的节点来复制数据),以保证数据的高可用。

   复制集高可用依赖于两个功能实现: 1.数据被写入后,数据迅速的同步到另一个节点上。2.主节点发生故障后其他节点实例能自动的选取出一个新的替代节点。

在实现MongoDB复制集的同时,也实现了以下几个功能:

  1. 读写分离: 不同类型的压力分别在不同的节点上执行
  2. 异步容灾: 在数据中心故障时候快速切换到异地
  3. 数据分发: 将数据从一个区域复制到另一个区域,减少另一个区域的读延迟

2.复制集模式

  通常复制集由三个节点组成,来保障数据的高可用,其中复制集模式可以分为PSS模型、PSA模式。

2.1 PSS模型(官方推荐)

  PSS为一个primary节点和两个secondary节点,既一主两从。
在这里插入图片描述

  一旦主节点出现故障,从节点会自动选举出一个新的主节点。

2.2 PSA模型

  PSA为一个primary节点和一个secondary节点以及一Arbiter(仲裁)节点,既一主一从一仲裁。

在这里插入图片描述

Arbiter节点不存储数据副本,也不提供业务的读写操作。Arbiter节点发生故障不影响业务,仅影响选举投票

3.复制集高可用依据

3.1 复制集选举方面

  选举的过程中会进行投票选举,选举中为避免平票的情况,MongoDB的实例节点数要为奇数,主要措施有两个:

  1. 为选举定时器增加少量的随机时间偏差,这样避免各个节点在同一时刻发起选举,提高成功率。
    2 .使用仲裁者角色,该角色不做数据复制,也不承担读写业务,仅仅用来投票。
3.2 自动故障转移

  MongoDB节点之间会通过心跳机制进行通信,复制集建立好之后,就开启定时器,实现心跳检测功能,选举心跳检测失败后,不会立即触发重新选举,直到electionTimeout被触发。
  electionTimeout触发选举需要满足的条件有: (1)当前节点是备节点 (2)当前节点具备选举条件 (3)在心跳检测期间主节点还没能进行通信

3.3复制集同步数据
3.3.1 同步数据原理

  主节点和备节点之间是通过opLog进行同步数据的,opLog是一个固定集合的结构,其中主节点向opLog写入数据,备节点在opLog中读取数据,以达到同步。
在这里插入图片描述
其中opLog保证节点有序,备节点通过轮询的方式进行拉取数据。每个备节点都维护了一个offset,也就是从主节点拉取的最后一条日志的optime,在执行同步时就通过这个optime向主节点的oplog集合发起查询。

每一条oplog记录都描述了一次数据的原子性变更,对于oplog来说,必须保证是幂等性的。

3.3.2 复制延迟以及解决办法

 &esmp;复制延迟情况的产生,是因为主节点的写入速度太快了,备节点从opLog上拉取不过来,从而导致复制延迟。 复制延迟的解决方案有以下措施:

  1. 降低主节点的写入速度
  2. 提高opLog的容量大小,并保持监视
  3. 避免字段使用太大的数组

二、MongoDB分片集群

1.分片

  在大数据发展的时代,数据存储会在多个不同的机器上,要进行分布式的存储,进行分片是一个好的措施,将数据按某种方式进行切分存储在不同的机器上。

2.分片集群架构

  对MongoDB进行分片集群部署,有利于数据存放的横向拓展。分片集群架构除分片节点外,还有配置节点、路由节点等。

在这里插入图片描述

数据分片: 分片用于存储真正的数据,并提供最终的数据读写访问,通常是复制集的形式存在。

配置节点: 配置节点不用于存储数据,而是保存了整个分片集群中的元数据,其中包含各个集合的分片策略,以及分片的路由表等

查询路由(mongos):mongos是分片集群的访问入口,其本身并不持久化数据。

3.分片策略

  分片策略指的是将一个大的数据集合通过何种策略进行分配到多个分片节点上。
在这里插入图片描述
集群分片涉及到chunk,chunk指的是一个范围区间的数据,集合在操作分片集合时,会根据分片键找到对应的chunk,并向chunk所在分片发起请求。
在这里插入图片描述

4.分片算法

  分片算法有范围分片和哈希分片两种。

  1. 范围分片: 按照一定的范围进行分片
    在这里插入图片描述
  2. hash分片:会生成一个哈希值,然后根据哈希值对范围分片的chunk进行切分。
    在这里插入图片描述
    hash算法使得数据分布更加均匀,保证了随机性,但在范围查询时,哈希分片需要对所有的chuck进行检索,效率低。

5. 数据均衡

5.1 实现均衡的措施

  想要实现数据在不同的分片中数量是均衡的,实现的方式有两种。

  1. 手动均衡(通过干预的方式进行均衡)

  2. 自动均衡: 以后台的方式监控chunk,chunk不均衡时进行搬迁以达到平衡。

5.2 chunk分裂

一个chunk的大小固定,一旦数据量超过chunk大小,chunk就会自动分裂,分类两个大小相同的chunk。

在这里插入图片描述

chunk分裂是基于分片键进行的,如果分片键的基数太小,则可能因为无法分裂而会出现jumbo chunk(超大块)的问题。jumbo chunk对水平扩展有负面作用,该情况不利于数据的均衡,业务上应尽可能避免。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/54201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

COTERRORSET—— LLM训练新基准让模型从自身错误中学习

概述 论文地址:https://arxiv.org/pdf/2403.20046.pdf 在最近的研究中,大规模语言模型因其推理能力而备受关注。这些模型在各种任务和应用中取得了令人瞩目的成果,尤其是使用思维链(CoT)提示方法的有效性已得到证实。…

研1日记12

1. 改19->10 2. 学习数据不平衡问题 1. 欠采样 合并两个样本数据 两种方式 1. 按原分布比例划分。sklearn中train_test_split里,参数stratify含义解析_traintestsplit参数stratify-CSDN博客 3.刘二大人 卷积操作 待看论文: 刘老师指导&#xff1a…

[Mamba_4]LMa-UNet

题目:LKM-UNet: Large Kernel Vision Mamba UNet for Medical Image Segmentation 中文题目:LMa-UNet: 探索大kernel Mamba在医学图像分割上的潜力 0摘要 在临床实践中,医学图像分割提供了有关目标器官或组织的轮廓和尺寸的有用信息&#…

外贸|基于Java+vue的智慧外贸平台系统(源码+数据库+文档)

外贸|智慧外贸平台|外贸服务系统 目录 基于Javavue的智慧外贸平台系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&…

Docker容器技术1——docker基本操作

Docker容器技术 随着云计算和微服务架构的普及,容器技术成为了软件开发、测试和部署过程中的重要组成部分。其中,Docker作为容器技术的代表之一,以其简便易用的特点赢得了广大开发者的青睐。 Docker允许开发者在轻量级、可移植的容器中打包和…

JDK 安装及配置教程(Windows)【安装】

文章目录 一、 下载1. 官网下载2. 其它渠道 二、 安装三、 配置四、 验证五、 双 JDK 环境 软件 / 环境安装及配置目录 一、 下载 1. 官网下载 安装地址:https://www.oracle.com/ 打开浏览器输入网址 https://www.oracle.com/index.html,进入 Oracle …

Java和西门子S7-1200通讯调试记录

这是很久以前做的一个项目,工业现场一个agv,主要作用的清扫摇床(一种选矿设备),选用的S7-1200的CPU。工作原理是agv上面放一个机械臂,机械臂上面装一个扫把,到固定位置以后,执行清扫…

揭开谜底:用 C 语言打造你的扫雷游戏!

目录 1. 功能概述 用户界面 2. 游戏分析与设计 2.1 数据结构分析 地雷存储: 玩家视图: 2.2 文件结构设计 3. 代码实现 game.h game.c test.c 亮点功能与创新 智慧的较量:核心游戏循环 进阶功能:让游戏更加与众不同 还…

人工智能GPT____豆包使用的一些初步探索步骤 体验不一样的工作

豆包工具是我使用比较频繁的一款软件,其集合了很多功能。对话 图像 AI搜索 伴读等等使用都非常不错。电脑端安装集合了很多功能。 官网直达:豆包 使用我的文案创作能力,您可以注意以下几个技巧: 明确需求: 尽可能具…

C++ ——string的模拟实现

目录 前言 浅记 1. reserve(扩容) 2. push_back(尾插) 3. iterator(迭代器) 4. append(尾插一个字符串) 5. insert 5.1 按pos位插入一个字符 5.2 按pos位插入一个字符串 …

C++第五十一弹---IO流实战:高效文件读写与格式化输出

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1. C语言的输入与输出 2. 流是什么 3. CIO流 3.1 C标准IO流 3.2 C文件IO流 3.2.1 以写方式打开文件 3.2.1 以读方式打开文件 4 stringstre…

flask框架

Flask 1 flask简介 我们之所以在浏览器中输入localhost:8080然后就可以把webapps下面的项目文件以浏览器的方式打开,功臣在与tomcat。python语言写的项目,转换为web,Flask框架 轻量级web应用框架。 环境准备: pip install fl…

【C语言】内存函数详细讲解

文章目录 前言strerror的声明和使用字符串分类函数字符转换函数内存拷贝函数(memcpy)memcpy的声明和使用memcpy函数的模拟实现 内存拷贝函数(memmove)memmove的声明和使用memmove模拟实现 内存比较函数(memcmp)memcmp的…

UDP_SOCKET编程实现

文章目录 socket编程接口认识struct sockaddr类 编写一个server服务Client代码查看启动结果代码修正1.获取内核分配给客户端的信息2.修正不匹配ip不能访问的问题 不同机器之间的通信利用xftp将udp_client传给wsl的ubuntu机器进行演示现在模拟在windows下的udp_client代码: 对方…

时序预测 | MATLAB实现BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测

时序预测 | MATLAB实现BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测 目录 时序预测 | MATLAB实现BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实现BKA-XGBoost时间序列预测&a…

C++从入门到起飞之——继承下篇(万字详解) 全方位剖析!

🌈个人主页:秋风起,再归来~🔥系列专栏:C从入门到起飞 🔖克心守己,律己则安 目录 1、派⽣类的默认成员函数 1.1 四个常⻅默认成员函数 1.2 实现⼀个不能被继承的类 ​编辑 2. 继承与友…

力扣题解2390

大家好,欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述​(中等): 从字符串中移除星号 给你一个包含若干星号 * 的字符串 s 。 在一步操作中,你可以: 选中 s 中的一个星号。 移除星号…

力扣刷题(6)

两数之和 II - 输入有序数组 两数之和 II - 输入有序数组-力扣 思路: 因为该数组是非递减顺序排列,因此可以设两个左右下标当左右下标的数相加大于target时,则表示右下标的数字过大,因此将右下标 - -当左右下标的数相加小于targ…

HashMap线程不安全|Hashtable|ConcurrentHashMap

文章目录 常见集合线程安全性HashMap为什么线程不安全?怎么保证HashMap线程安全 HashtableConcurrentHashMap 引入细粒度锁代码中分析总结 小结 常见集合线程安全性 ArrayList、LinkedList、TreeSet、HashSet、HashMap、TreeMap等都是线程不安全的。 HashTable是线…

C语言:数组

1. 数组的概念 数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息: • 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。 • 数组中存放的多个数据,类型是相同的。 数组分为⼀维数组和多维数组…