当前位置: 首页 > news >正文

redis复制和分区:主从复制、哨兵模式和集群模式

概述

在 Redis 中,复制和分区是用于数据冗余和性能扩展的关键特性。以下是主从复制、哨兵模式和集群模式的工作原理的简要概述:

主从复制 (Replication)

  1. 基本概念:Redis 的主从复制功能允许多个 Redis 服务器具有相同的数据副本。这在读取操作的负载均衡、数据备份、灾难恢复等方面非常有用。

  2. 工作原理

    • 主节点(Master):负责处理写操作并将数据更改同步给从节点。
    • 从节点(Slave):接收主节点的数据副本。可以配置多个从节点。从节点通常用于处理读请求,减轻主节点的压力。
    • 数据同步:当从节点启动时,它会连接到主节点并请求一个数据副本。此后,所有对主节点数据的更改都会实时同步到从节点。
  3. 故障转移:如果主节点出现故障,其中一个从节点可以被提升为新的主节点,以保证服务的连续性。但这种故障转移不是自动的,需要外部干预或使用哨兵模式。

哨兵模式 (Sentinel)

  1. 基本概念:哨兵是一个分布式系统,用于自动进行故障检测和故障转移。

  2. 工作原理

    • 监控:哨兵持续检查主节点和从节点的健康状况。
    • 通知:在检测到节点故障时,哨兵会通知系统管理员或其他应用。
    • 自动故障转移:如果主节点失效,哨兵会自动从现有的从节点中选举一个新的主节点,并让其他从节点更新配置以指向新的主节点。
    • 配置提供者:哨兵还会作为配置提供者,帮助客户端了解哪个是当前的主节点。
  3. 可靠性:由于哨兵本身也可以进行复制,因此可以配置多个哨兵以提高系统的可靠性。

集群模式 (Cluster)

  1. 基本概念:Redis 集群通过分区(Partitioning)来提供数据的自动分片,支持多个 Redis 节点之间的数据共享。

  2. 工作原理

    • 数据分片:集群中的每个节点负责维护数据的一部分。Redis 使用一种称为哈希槽(Hash Slot)的机制来决定数据应该存储在哪个节点。
    • 自动分片:数据会被自动分配到不同的节点,这样就可以实现数据和负载的均衡分配。
    • 高可用性:每个分片可以有多个副本,保证数据的高可用性和容错性。
    • 故障转移:如果某个节点失败,其它节点可以接管失败节点的数据和请求。
  3. 扩展性:集群模式支持在线扩容和缩容,可以动态地添加或移除节点,非常适合动态变化的负载情况。

总之,Redis 通过这些特性提供了一个灵活、高效且可靠的数据存储和缓存解决方案。主从复制用于数据冗余和读负载分散,哨兵模式提供自动故障转移,而集群模式通过数据分片和自动故障转移提供了更强大的扩展性和高可用性。

区别归纳

  • 主从复制:这是最基本的数据冗余和读负载分担方法。一个主节点负责写操作,多个从节点用于读操作和数据备份。
  • 哨兵模式:在主从复制的基础上提供自动的故障转移。哨兵节点监控主从节点,并在主节点故障时自动将从节点升级为新的主节点。
  • 集群模式:提供数据分片和高可用性。在集群模式下,每个节点存储数据的一部分,并且节点间可以进行故障转移。

总结来说,虽然 INFO 命令在不同模式下都可用,但它返回的信息会根据节点的角色和配置有所不同。主从模式侧重于简单的数据复制,哨兵模式在此基础上添加了故障检测和自动故障转移,而集群模式则提供了更复杂的数据分片和高可用性支持。

redis集群涉及的协议和机制

Redis 集群使用了一套特定的协议和机制来管理其节点之间的通信、数据分布和故障转移。这些协议和机制主要包括:

  1. Gossip 协议

    • Gossip 协议用于节点之间的信息交换。每个节点定期与其他节点交换信息,包括自身的状态和它所知道的其他节点的状态。
    • 这种协议使得每个节点都能获得有关集群状态的最新信息,即使在部分节点无法直接通信的情况下也是如此。
  2. 故障检测

    • Redis 集群使用 Gossip 协议进行故障检测。节点通过交换心跳信息来监测彼此的健康状况。
    • 如果一个节点认为另一个节点已经失效(例如,没有响应心跳),它会通过 Gossip 协议将这一信息传播到集群中的其他节点。
  3. 故障转移

    • 当主节点失败时,集群会自动进行故障转移。集群中的从节点会选举出一个新的主节点来接管失败的主节点的工作。
    • 选举过程考虑多种因素,包括从节点的更新程度、ID 和其他参数。
  4. 共识算法

    • 在进行关键操作(如故障转移)时,Redis 集群使用 Raft-like 的共识算法来确保一致性。这意味着集群中的多数节点需要同意这一操作。
  5. 哈希槽(Hash Slot)分配

    • Redis 集群通过分配 16384 个哈希槽来处理数据分片。每个键根据其哈希值被分配到一个特定的槽。
    • 集群中的每个节点负责一部分哈希槽。这种方式使得数据可以在不同节点间均匀分布。
  6. 重定向和懒惰迁移

    • 当客户端尝试访问一个存储在特定节点的键时,如果该请求发送到了错误的节点,该节点会返回一个重定向信息,指示客户端连接到正确的节点。
    • 集群在进行哈希槽迁移时采用懒惰迁移策略,仅在访问特定键时才执行迁移。

Redis 集群的这些协议和机制共同工作,确保了数据的高可用性、一致性和分布式处理能力。它们使得 Redis 集群能够在节点故障、网络分区和其他异常情况下保持正常运行和数据一致性。

相关文章:

redis复制和分区:主从复制、哨兵模式和集群模式

概述 在 Redis 中,复制和分区是用于数据冗余和性能扩展的关键特性。以下是主从复制、哨兵模式和集群模式的工作原理的简要概述: 主从复制 (Replication) 基本概念:Redis 的主从复制功能允许多个 Redis 服务器具有相同的数据副本。这在读取操…...

个人实现的QT拼图游戏(开源),QT拖拽事件详解

文章目录 效果图引言玩法 拖拽概念基本概念如何在Qt中使用拖放注意事项 游戏关键问题总结 效果图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c6dd66befd314442adf07e1dec0d550c.png 引言 在学习QT demo时,发现有一个拼图demo,介绍拖…...

gin渲染篇

1. 各种数据格式的响应 json、结构体、XML、YAML类似于java的properties、ProtoBuf package mainimport ("github.com/gin-gonic/gin""github.com/gin-gonic/gin/testdata/protoexample" )// 多种响应方式 func main() {// 1.创建路由// 默认使用了2个中…...

第三方控价服务商怎么选

用对了方法,事半功倍,品牌控价也是如此,品牌方在治理工作中,如果选择自建团队进行处理,需要包含对数据技术的抓取团队,还要有对治理规则熟悉的操作团队,涉及人员和系统,费用成本相应…...

大模型的学习路线图推荐—多维度深度分析【云驻共创】

🐲本文背景 近年来,随着深度学习技术的迅猛发展,大模型已经成为学术界和工业界的热门话题。大模型具有数亿到数十亿的参数,这使得它们在处理复杂任务时表现得更为出色,但同时也对计算资源和数据量提出了更高的要求。 …...

【学习】focal loss 损失函数

focal loss用于解决正负样本的不均衡情况 通常我们需要预测的正样本要少于负样本,正负样本分布不均衡会带来什么影响?主要是两个方面。 样本不均衡的话,训练是低效不充分的。因为困难的正样本数量较少,大部分时间都在学习没有用…...

几个好玩好用的AI站点

本文作者系360奇舞团前端开发工程师 ai能力在去年一年飞速增长,各种AI产品如雨后春笋般冒出来,在各种垂直领域上似乎都有AI的身影出现,今天就总结几款好玩的场景,看大家工作生活中是否会用到。 先说一个比较重要的消息是&#xff…...

Java算法 leetcode简单刷题记录5

Java算法 leetcode简单刷题记录5 老人的数目: https://leetcode.cn/problems/number-of-senior-citizens/ substring(a,b) 前闭后开 统计能整除数字的位数: https://leetcode.cn/problems/count-the-digits-that-divide-a-number/ 并不复杂,…...

计算机网络自顶向下Wireshark labs1-Intro

Wireshark labs1 实验文档:http://www-net.cs.umass.edu/wireshark-labs/Wireshark_Intro_v8.0.pdf 介绍 加深对网络协议的理解通常可以通过观察协议的运行和不断调试协议来大大加深,具体而言,就是观察两个协议实体之间交换的报文序列&…...

CSS实现图片放大缩小的几种方法

参考 方法一&#xff1a; 常用使用img标签&#xff0c;制定width或者height的任意一个&#xff0c;图片会自动等比例缩小 <div><img src"https://avatar.csdn.net/8/5/D/1_u012941315.jpg"/> </div> <!-- CSS--> <style> img {widt…...

时间序列预测 — CNN-LSTM-Attention实现多变量负荷预测(Tensorflow):多变量滚动

专栏链接&#xff1a;https://blog.csdn.net/qq_41921826/category_12495091.html 专栏内容 ​ 所有文章提供源代码、数据集、效果可视化 ​ 文章多次上领域内容榜、每日必看榜单、全站综合热榜 ​ ​ ​ ​ ​ ​ ​ 时间序列预测存在的问题 ​ 现有的大量方法没有真正的预测未…...

angular-tree-component组件中实现特定节点自动展开

核心API 都在 expandToNode这个函数中 HTML treeData的数据结构大概如下 [{"key": "3293040275","id": "law_category/3293040275","name": "嘿嘿嘿嘿","rank": 0,"parentKey": "0&q…...

Linux系统下安装Vcpkg,并使用Vcpkg安装、编译OpenSceneGraph

环境&#xff1a;CentOS7 内存&#xff1a;8g(内存过少编译osg时会出现内存不足导致编译失败的情况&#xff0c;内存设置为4G时失败了&#xff0c;我直接加到了8g&#xff0c;所以就以8g为准了) 安装和配置vcpkg cd ~/ git clone https://www.github.com/microsoft/vcpkg cd …...

设计模式二(工厂模式)

本质&#xff1a;实例化对象不用new&#xff0c;用工厂代替&#xff0c;实现了创建者和调用者分离 满足&#xff1a; 开闭原则&#xff1a;对拓展开放&#xff0c;对修改关闭 依赖倒置原则&#xff1a;要针对接口编程 迪米特原则&#xff1a;最少了解原则&#xff0c;只与自己直…...

Maven应用手册

没加载出来就reimport&#xff0c;这个时候clean和install没用&#xff0c;那是编译安装项目的。 reimport干了什么&#xff1f; 结合idea的maven教程 父子模块 子模块不需要groupId ruoyi中父模块还添加了子模块的依赖&#xff0c;&#xff0c;&#xff0c; 先安装父再是子…...

笨蛋学设计模式行为型模式-状态模式【20】

行为型模式-状态模式 8.7状态模式8.7.1概念8.7.2场景8.7.3优势 / 劣势8.7.4状态模式可分为8.7.5状态模式8.7.6实战8.7.6.1题目描述8.7.6.2输入描述8.7.6.3输出描述8.7.6.4代码 8.7.7总结 8.7状态模式 8.7.1概念 ​ 状态模式是指对象在运行时可以根据内部状态的不同而改变它们…...

C++从零开始的打怪升级之路(day18)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于vector的题目 1.只出现一次的数字1 136. 只出…...

浅谈安科瑞直流电表在新加坡光伏系统中的应用

摘要&#xff1a;本文介绍了安科瑞直流电表在新加坡光伏系统中的应用。主要用于光伏系统中的电流电压电能的计量&#xff0c;配合分流器对发电量进行计量。 Abstract: This article introduces the application of Acrel DC meters in PV system in Indonesia.The device is …...

C++参悟:数值运算相关

数值运算相关 一、概述二、常用数学函数1. 基础运算1. 浮点值的绝对值&#xff08; |x| &#xff09;2. 浮点除法运算的余数3. 除法运算的有符号余数4. 除法运算的有符号余数和最后三个二进制位5. 混合的乘加运算6. 两个浮点值的较大者7. 两个浮点值的较小者8. 两个浮点值的正数…...

【Web前端开发基础】CSS的定位和装饰

CSS的定位和装饰 目录 CSS的定位和装饰一、学习目标二、文章内容2.1 定位2.1.1 定位的基本介绍2.1.2 定位的基本使用2.1.3 静态定位2.1.4 相对定位2.1.5 绝对定位2.1.6 子绝父相2.1.7 固定定位2.1.8元素的层级关系 2.2 装饰2.2.1 垂直对齐方式2.2.2 光标类型2.2.3 边框圆角2.2.…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...