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

Redis高可用性详解

 

目录

​编辑

高可用性:

主从复制(Master-Slave Replication):

主从复制的一般工作流程:

哨兵模式(Sentinel Mode):

哨兵模式的一般工作流程:

集群模式(Cluster Mode):

集群模式的一般工作流程:

总结:


高可用性:

Redis是一种流行的开源内存数据库,被广泛用于缓存、会话存储和消息传递等场景。在构建高可用性的Redis架构时,可以采取以下几个关键步骤:

  1. 主从复制(Master-Slave Replication):Redis支持主从复制机制,其中一个Redis实例作为主节点(master),负责处理写入操作,而其他实例作为从节点(slave),负责复制主节点的数据。主从复制提供了数据冗余和读取负载均衡的功能。当主节点发生故障时,可以将一个从节点升级为主节点,确保系统的持续可用性。

  2. 哨兵模式(Sentinel Mode):Redis哨兵模式是一种自动故障转移和监控机制,用于管理多个Redis实例。哨兵进程会监控Redis实例的健康状态,当主节点宕机时,会自动将一个从节点升级为主节点,并更新其他从节点的配置。哨兵模式提供了故障检测和自动切换的能力,保证系统的高可用性。

     

  3. 集群模式(Cluster Mode):Redis集群模式是一种分布式架构,可以将数据分散存储在多个节点上。每个节点负责存储部分数据,并通过内部通信协议进行数据交互。集群模式提供了横向扩展和负载均衡的能力,可以处理大规模的数据和请求。如果集群中的某个节点故障,其他节点可以继续提供服务,确保系统的可用性。

主从复制(Master-Slave Replication):

当使用Redis时,主从复制(Master-Slave Replication)是一种常用的数据复制和冗余机制。主从复制允许将一个Redis实例(主节点)的数据复制到其他Redis实例(从节点),从而实现数据的冗余备份、读取负载均衡和故障恢复的功能。在Redis主从复制中,主节点负责处理所有写入操作,而从节点复制主节点的数据,并处理读取请求。

主从复制的一般工作流程:

  1. 配置主从关系:首先,需要在Redis的配置文件中分别配置主节点和从节点。主节点的配置需要设置slaveof指令,指定从节点的IP地址和端口。从节点的配置需要设置slave指令,指定主节点的IP地址和端口。

  2. 初始全量复制:当从节点启动时,它会连接主节点,并发送一个同步请求。主节点接收到请求后,会执行一个后台的RDB持久化操作,将数据保存到磁盘并发送给从节点。从节点接收到数据后,会加载并构建与主节点相同的数据集。

  3. 增量复制:一旦初始全量复制完成,主节点会将每个写操作的数据变更发送给从节点。从节点会接收并应用这些变更,以保持与主节点的数据一致性。Redis使用异步复制机制,即主节点不会等待从节点确认复制操作,因此从节点的复制延迟可能存在一定的时间差。

  4. 读取负载均衡:应用程序可以通过向主节点写入数据,并从任意的从节点读取数据,以实现读写分离和负载均衡。通过将读操作分摊到多个从节点上,可以提高系统的并发性和吞吐量。

  5. 故障转移:当主节点发生故障时,可以手动或自动将一个从节点升级为新的主节点。在故障转移过程中,需要修改从节点的配置,使其成为新的主节点,并让其他从节点复制新的主节点。一旦故障主节点恢复,可以将其重新配置为从节点,并加入到新的主节点中。

主从复制在Redis中的应用场景非常广泛。它提供了数据冗余和读取负载均衡的能力,同时增加了系统的可用性和扩展性。通过合理配置主从复制,可以构建高可用性的Redis架构,保护数据并提供稳定的服务。

哨兵模式(Sentinel Mode):

是一种用于管理和监控Redis实例的自动故障转移机制。哨兵模式通过监控Redis实例的状态,检测主节点故障,并自动将一个从节点升级为新的主节点,以确保系统的高可用性。

哨兵模式的一般工作流程:

  1. 配置哨兵节点:首先,需要选择一个或多个Redis实例作为哨兵节点,这些节点负责监控和管理Redis主从关系。每个哨兵节点都会连接到Redis实例,并定期发送心跳检测,以确保与实例的连接正常。

  2. 监控主节点:哨兵节点会通过发送命令和接收回复的方式,持续监控主节点的状态。它们会检查主节点是否正常运行、网络连接是否断开以及主节点是否过载等情况。

  3. 故障检测:当哨兵节点检测到主节点故障时,它们会开始进行故障检测。哨兵节点会互相通信,收集关于主节点状态的信息,并进行投票决策。如果大多数哨兵节点都认为主节点失效,那么故障会被确认。

  4. 选举新主节点:一旦主节点故障被确认,哨兵节点会选择一个从节点作为新的主节点。它们会考虑从节点的复制偏移量(replication offset)和优先级等因素,选择出一个最适合的从节点升级为主节点。

  5. 更新配置信息:哨兵节点会更新所有Redis实例的配置文件,将新的主节点信息通知给从节点和其他哨兵节点。从节点会重新连接到新的主节点,并开始复制新的数据集。其他哨兵节点也会更新其内部状态,以反映新的主从关系。

  6. 故障恢复:一旦新的主节点选举完成并配置更新完成,系统将恢复正常运行。客户端可以通过连接到新的主节点来进行读写操作,而旧的主节点(如果修复)可以作为从节点加入到新的主节点中。

哨兵模式提供了自动故障转移和监控的能力,可以在主节点故障时快速恢复系统的可用性。它通过多个哨兵节点的协作,实现了故障检测、选举新主节点和更新配置信息等关键步骤。这样,Redis可以在单点故障的情况下保持高可用性,并提供可靠的服务。

集群模式(Cluster Mode):

是一种分布式架构,用于扩展Redis并提供高可用性的解决方案。在集群模式下,数据被分片存储在多个Redis节点上,并通过内部通信协议进行数据交互,从而实现水平扩展和负载均衡。

集群模式的一般工作流程:

  1. 配置集群节点:首先,需要选择一组Redis实例作为集群节点,并对其进行配置。每个节点都必须具有唯一的节点标识和监听端口。在配置文件中,需要指定集群节点的IP地址、端口和节点标识等信息。

  2. 创建集群:使用Redis提供的redis-trib.rb工具或其他第三方工具,可以创建Redis集群。在创建过程中,需要将所有节点的地址和端口信息提供给工具,工具将会自动进行集群初始化。

  3. 数据分片:集群中的数据会被分片存储在不同的节点上。Redis使用哈希槽(hash slots)的概念来划分数据,一共有16384个哈希槽。集群中的每个节点负责管理一部分哈希槽,并存储对应的数据。

  4. 客户端路由:当客户端发送写入或读取请求时,它们会根据数据的键(key)计算哈希槽,并将请求路由到负责该哈希槽的节点上。客户端可以直接连接到集群中的任意节点,节点会负责将请求转发给正确的节点进行处理。

  5. 节点间通信:集群节点之间通过内部通信协议进行数据交互。节点之间会进行消息广播、状态同步和数据迁移等操作,以保持集群的一致性和可用性。如果有节点离线或加入集群,其他节点会进行自动的重新分配哈希槽和数据迁移。

  6. 故障恢复:当集群中的某个节点发生故障时,Redis会自动进行故障转移。集群中的其他节点会检测到故障节点的离线,并将负责的哈希槽重新分配给其他节点。这样可以保证数据的可用性,并且集群可以继续正常运行。

Redis集群模式提供了横向扩展和负载均衡的能力,可以处理大规模的数据和请求。它使用哈希槽的数据分片方式,将数据均匀地分布在多个节点上,从而实现数据的分散存储和并行处理。通过增加节点数量,可以进一步扩展集群的容量和性能。

总结:

除了上述步骤,还可以采取其他措施,如使用故障切换技术、合理配置Redis参数、优化网络和硬件资源等,以提高Redis的高可用性。

相关文章:

Redis高可用性详解

目录 ​编辑 高可用性: 主从复制(Master-Slave Replication): 主从复制的一般工作流程: 哨兵模式(Sentinel Mode): 哨兵模式的一般工作流程: 集群模式&#xff08…...

MySQL(1) ---- 数据库介绍与MySQL概述

介绍 1、什么是数据库? 数据库:DateBase(DB),是存储和管理数据的仓库。数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件。SQL&#xff1…...

面试题之软件测试流程

说说公司的软件测试流程,这,是常考的面试题之一。 不同公司的流程不一样,现状决定流程,没有绝对的对错。 以结果为导向,保证产品质量,提高测试效率,才是王道。 以下的流程为业界比较标准的流程&…...

MyBatis中#{}与${}的区别,与各自的应用场景

#{}和${}的区别: #{}: 底层使用PreparedStatement。特点:先进行SQL语句的编译,然后给SQL语句的占位符问号?传值。可以避免SQL注入的风险。 ${}:底层使用Statement。特点:先进行SQL语句的拼接,然后再对SQL语…...

泛型类相关

package com.test.test02;/* * GenericTest就是一个普通的类 * GenericTest<E>就是一个泛型类 * <>里面就是一个参数类型&#xff0c;但是这个类型是什么呢&#xff1f;这个类型现在是不确定的&#xff0c;相当于一个占位。 * 但是现在确定的是这个类型一定是一…...

一文速学数模-季节性时序预测SARIMA模型详解+Python实现

目录 前言 一、季节时间序列模型概述 二、SARIMA模型定义 三.SARIMA模型算法原理...

二叉树与图(C++刷题笔记)

二叉树与图&#xff08;C刷题笔记&#xff09; 113. 路径总和 II 力扣 从根节点深度遍历二叉树&#xff0c;先序遍历时&#xff0c;将节点存储至path栈中&#xff0c;使用path_val累加节点值 当遍历到叶子节点&#xff0c;检查path_val是否为sum&#xff0c;若是&#xff0c…...

STM32-ADC多通道输入实验

之前已经介绍了几个ADC的笔记和实验了&#xff0c;链接如下&#xff1a; 关于ADC的笔记1_Mr_rustylake的博客-CSDN博客 STM32-ADC单通道采集实验_Mr_rustylake的博客-CSDN博客 STM32-单通道ADC采集&#xff08;DMA读取&#xff09;实验_Mr_rustylake的博客-CSDN博客 接下来…...

javaIO流之文件流

目录 简介一、File的构造方法二、File的常用方法1、获取功能的方法2、绝对路径和相对路径3、判断功能的方法4、创建、删除功能的方法5、目录的遍历6、递归遍历 三、RandomAccessFile1、主要方法 四、Apache FileUtils 类1、复制文件或目录&#xff1a;2、删除文件或目录&#x…...

DMA-STM32

DMA-STM32 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#xff0c;节省了CPU的资源 12个独立可配置的通道:DMA1 (7个通道),DMA2 (5个通道) 每个通道都支持软件触发和特定的硬件触发 STM32…...

代码随想录算法训练营第二十七天|39. 组合总和、40.组合总和II、131.分割回文串

目录 39. 组合总和 40.组合总和II 131.分割回文串 39. 组合总和 本题是 集合里元素可以用无数次&#xff0c;那么和组合问题的差别 其实仅在于 startIndex上的控制 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;带你学透回溯算法-组合总和&#xff08;对应…...

泛型(Generic) <? extends T>,<? super T>

通配符边界引入背景 使用泛型的过程中&#xff0c;经常出现一种很别扭的情况。我们有 Fruit 类&#xff0c;和它的派生类 Apple 类。 class Fruit {}class Apple extends Fruit {}然后有一个最简单的容器&#xff1a;Plate 类。盘子里可以放一个泛型的 “东西”. class Plat…...

数云融合|数字化转型中的利器:揭秘云技术的重要角色

数字化转型不仅是一个流行语&#xff0c;而是一项真正能够改变你的业务流程并提高客户参与度的重要战略。要实现数字化转型&#xff0c;必须重新构建业务流程&#xff0c;同时利用AI、物联网、AR、ML、大数据分析等先进技术不断提升客户参与度。这就需要利用云技术提供的强大计…...

Linux篇2

Linux 0. 终端提示信息1. 文件目录结构1.1 文件目录 2. 文本编辑器VI/VIM2.1 VIM编辑器2.1 一般模式2.2 编辑模式2.3 命令模式 3. 网络配置3.1 VMware提供的三种网络连接模式3.2 静态配置网络IP地址3.3 配置主机名3.3.1 修改主机名3.3.2 配置主机名-IP地址映射关系&#xff1a;…...

《微服务实战》 第九章 Gitlab使用

前言 微服务项目,常常需要多人协作完成工作,本章教程是介绍Gitlab使用,使多人协作告别低端的手动拷贝,也告别传统的SVN。 1、下载安装git https://git-scm.com/download/win 1.1、安装好以后,cmd中输入git 2、生成ssh-key ssh-keygen -t rsa -C “zhangsan@163.com”…...

KMP匹配算法

目录 一、暴力匹配法动画演示代码实现 二、KMP算法的概念三、KMP算法的应用题目代码实现 一、暴力匹配法 动画演示 时间复杂度为&#xff1a; O ( m ∗ n ) O(m * n) O(m∗n) 代码实现 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std;int…...

ClickHouse笔记: Ubuntu/Centos下的安装, 配置和用户管理

ClickHouse ClickHouse 属于 OLAP 数据库 OLTP 与 OLAP OLTP (On-Line Transaction Processing 联机事务处理), 注重事务处理, 数据记录的性能和安全性OLAP (On-Line Analytical Processing 联机分析处理), 注重数据分析, 重点在查询的性能 一般使用 OLTP 数据库做业务数据…...

网络编程——UDP编程

UDP编程 UDP编程步骤通信流程serverclient 函数接口socketbindrecvfromsendto 举例UDP客户端UDP服务器 UDP编程步骤 在C语言中进行UDP编程的一般步骤如下&#xff1a; &#xff08;1&#xff09;包含头文件&#xff1a; 在代码中包含必要的头文件&#xff0c;以便使用UDP编程所…...

linux内核篇-进程及其调度

介绍一个程序从源文件到进程执行的过程 1、编译链接&#xff08;源文件到二进制文件&#xff09; Linux 下面二进制的程序也要有严格的格式&#xff0c;称为ELF&#xff08;Executeable and Linkable Format&#xff0c;可执行与可链接格式&#xff09; &#xff0c;这个格式可…...

C#开发的OpenRA游戏之基地工程车执行部署命令

C#开发的OpenRA游戏之基地工程车执行部署命令 前面已经分析接收到网络命令后,可以拿到多个命令对象, 通过命令对象进行遍历,最终会在比较部署命令的类里相同,从而执行部署命令。 可见,网络游戏里的对象操作,都是通过网络发送给服务器,再从服务器返回消息来执行对象的动…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...