当前位置: 首页 > 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.…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...