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 集群能够在节点故障、网络分区和其他异常情况下保持正常运行和数据一致性。

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

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

相关文章

WGAN损失函数解读

WGAN是Wasserstein GAN 解读

【大数据Hive】hive 行列转换使用详解

目录 一、前言 二、使用场景介绍 2.1 使用场景1 2.2 使用场景2 三、多行转多列 3.1 case when 函数 语法一 语法二 操作演示 3.2 多行转多列操作演示 四、多行转单列 4.1 concat函数 语法 4.2 concat_ws函数 语法 4.3 collect_list函数 语法 4.4 collect_set函…

《设计模式的艺术》笔记 - 命令模式

介绍 命令模式将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为模式,其别名为动作模式或事务模式。 实现 myclass.h // // Created by …

数据预处理 matlab 数据质量评估

知乎 数据类型转换等 Mathworks 数据预处理 概念辨析 配对是同一批样本的前后比较,独立是两批不同样本的的比较 独立样本是指我们得到的样本是相互独立的。配对样本就是一个样本中的数据与另一个样本中的数据相对应的两个样本。配对样本可以消除由于样本指定的不公…

dpwwn:02

靶场下载地址 https://download.vulnhub.com/dpwwn/dpwwn-02.zip 环境配置 当打开此虚拟机环境的时候,可能会出现:当前硬件版本不支持设备“sata”。然后启动失败的情况~ 解决办法参考:https://www.cnblogs.com/yaodun55/p/16434468.html …

x-cmd pkg | fanyi - 命令行中英文翻译工具

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 fanyi 是命令行翻译工具,翻译数据来源于 icba.com 和 fanyi.youdao.com,仅支持中英文互译。支持 ChatGPT,可通过设置 OpenAI API 密钥以启用 ChatGPT 翻译。 注意:在 L…

QT上位机开发(动态数据采集与监控)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 上位机开发中,有一种类型的应用软件很特殊,它几乎没有什么交互操作,主要的工作就是检测和显示。如果说在此基础上有什么扩展的话,可能就是安全监控和报警。所以,这个上位机软件…

Flink SQL

Flink SQL 来源:B站尚硅谷 sql-client准备 Table API和SQL是最上层的API,在Flink中这两种API被集成在一起,SQL执行的对象也是Flink中的表(Table),所以我们一般会认为它们是一体的。Flink是批流统一的处理…

银河麒麟V10安装mysql5.7

本文介绍如何在银河麒麟高级服务器操作系统下安装 Mysql 数据库 1.适配系统版本 适用系统:V10(SP1) 适用架构:X86、AARCH64、LOONGARCH64 其他版本和架构可作参考 2.安装说明 X86 和 AARCH 架构的源中自带 Mysql 安装包,所以可以下载对…

本地运行LlaMA 2的简易指南

大家好,像LLaMA 2这样的新开源模型已经变得相当先进,并且可以免费使用。可以在商业上使用它们,也可以根据自己的数据进行微调,以开发专业版本。凭借其易用性,现在可以在自己的设备上本地运行它们。 本文将介绍如何下载…

@RequestBody注解基础

RequestBody RequestBody注解一般与post方法使用。 一个请求中只能存在一个RequestBody注解。 RequestBody 用于接收前端传递给后端的json字符串中的数据。(处理json格式的数据) 语法格式: ​(RequestBody Map map) (RequestBody Object obje…

numpy数组的max、min、argmax和argmin计算方法

numpy数组的max、min、argmax和argmin计算方法 官方对numpy.max和numpy.min的说明 numpy.max 参考官方的理解 数组: 24611529 import numpy as npif __name__ __main__:a np.array([[2, 4, 6, 1], [1, 5, 2, 9]])print(a)print(np.argmax(a, axis0)) # ax…

Java医院信息管理系统

技术框架: springboot shiro layui jquery thymeleaf nginx 有需要的可以联系我。 运行环境: jdk8 mysql IntelliJ IDEA maven项目功能: 本项目是用springbootlayuishiro写的医院管理系统,系统的业务比较复杂&#x…

11 - PXC集群|MySQL存储引擎

PXC集群|MySQL存储引擎 数据库系列文章PXC集群配置集群测试集群 MySQL存储引擎存储引擎介绍mysql服务体系结构mysql服务的工作过程处理查询访问的工作过程处理存储insert访问的工作过程 什么是搜索引擎 存储引擎管理查看存储引擎修改存储引擎 存储引擎特点myisam存储…

canvas能压缩图片?

之前写过一篇使用命令行工具压缩图片的博文:使用yx-tiny命令行工具进行图片压缩,大家感兴趣可以去瞅一眼。 这篇简单说一下使用canvas压缩图片 其实思路很简单,我们选择了图片之后,会获取到对应的文件流对象,然后我们…

jvm复习,深入理解java虚拟机一:运行时数据区域

程序计数器(Program Counter Register) 它是程序控制流的指示器,简单来说,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器 Java虚拟机栈(Java Virtual Machine Stack&#xf…

【LeetCode每日一题】2809. 使数组和小于等于 x 的最少时间

2024-1-19 文章目录 [2809. 使数组和小于等于 x 的最少时间](https://leetcode.cn/problems/minimum-time-to-make-array-sum-at-most-x/)思路: 2809. 使数组和小于等于 x 的最少时间 思路: 获取两个列表的长度n,并初始化一个二维数组f&…

一种更快的Kmeans原理与实现

普通的k-means实现大多需要多轮迭代,一轮需要O(n * k)的复杂度,其中n是数据量,k是聚类的数量。观察到大部分地方的标准均值中的大多数距离计算都是冗余的。 所以Elkan-Kmeans通过三角不等式来优化这一过程,减少无效计算。 困难在于三角不等式给出了上界,但我们需要下界以…

《微信小程序开发从入门到实战》学习八十六

6.15 设备API 6.15.5 屏幕亮度API 使用wx.setScreenBrightness可设置屏幕亮度。示例代码如下: wx.setScreenBrightness({ value: 0.5, // 屏幕亮度值,范围0~1,1表示最亮 success() {} }) 使用wx.getScreenBrightness可获取屏幕亮度,示例代…

我在提交代码的时候突然发现别人刚才提交了一点代码,我没有拉取导致问题,请问怎么解决

问: 回答: 问: 我跟随输入git pull ,然后又以下提示: Merge branch systemPower_dev of https://xxxx.com into xxxx_dev # Please enter a commit message to explain why this merge is necessary, # especially if it merges an updated upstream into a topic branch. …