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

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...