Redis高可用性详解
目录
编辑
高可用性:
主从复制(Master-Slave Replication):
主从复制的一般工作流程:
哨兵模式(Sentinel Mode):
哨兵模式的一般工作流程:
集群模式(Cluster Mode):
集群模式的一般工作流程:
总结:
高可用性:
Redis是一种流行的开源内存数据库,被广泛用于缓存、会话存储和消息传递等场景。在构建高可用性的Redis架构时,可以采取以下几个关键步骤:
-
主从复制(Master-Slave Replication):Redis支持主从复制机制,其中一个Redis实例作为主节点(master),负责处理写入操作,而其他实例作为从节点(slave),负责复制主节点的数据。主从复制提供了数据冗余和读取负载均衡的功能。当主节点发生故障时,可以将一个从节点升级为主节点,确保系统的持续可用性。
-
哨兵模式(Sentinel Mode):Redis哨兵模式是一种自动故障转移和监控机制,用于管理多个Redis实例。哨兵进程会监控Redis实例的健康状态,当主节点宕机时,会自动将一个从节点升级为主节点,并更新其他从节点的配置。哨兵模式提供了故障检测和自动切换的能力,保证系统的高可用性。

-
集群模式(Cluster Mode):Redis集群模式是一种分布式架构,可以将数据分散存储在多个节点上。每个节点负责存储部分数据,并通过内部通信协议进行数据交互。集群模式提供了横向扩展和负载均衡的能力,可以处理大规模的数据和请求。如果集群中的某个节点故障,其他节点可以继续提供服务,确保系统的可用性。
主从复制(Master-Slave Replication):
当使用Redis时,主从复制(Master-Slave Replication)是一种常用的数据复制和冗余机制。主从复制允许将一个Redis实例(主节点)的数据复制到其他Redis实例(从节点),从而实现数据的冗余备份、读取负载均衡和故障恢复的功能。在Redis主从复制中,主节点负责处理所有写入操作,而从节点复制主节点的数据,并处理读取请求。
主从复制的一般工作流程:
-
配置主从关系:首先,需要在Redis的配置文件中分别配置主节点和从节点。主节点的配置需要设置
slaveof指令,指定从节点的IP地址和端口。从节点的配置需要设置slave指令,指定主节点的IP地址和端口。 -
初始全量复制:当从节点启动时,它会连接主节点,并发送一个同步请求。主节点接收到请求后,会执行一个后台的RDB持久化操作,将数据保存到磁盘并发送给从节点。从节点接收到数据后,会加载并构建与主节点相同的数据集。
-
增量复制:一旦初始全量复制完成,主节点会将每个写操作的数据变更发送给从节点。从节点会接收并应用这些变更,以保持与主节点的数据一致性。Redis使用异步复制机制,即主节点不会等待从节点确认复制操作,因此从节点的复制延迟可能存在一定的时间差。
-
读取负载均衡:应用程序可以通过向主节点写入数据,并从任意的从节点读取数据,以实现读写分离和负载均衡。通过将读操作分摊到多个从节点上,可以提高系统的并发性和吞吐量。
-
故障转移:当主节点发生故障时,可以手动或自动将一个从节点升级为新的主节点。在故障转移过程中,需要修改从节点的配置,使其成为新的主节点,并让其他从节点复制新的主节点。一旦故障主节点恢复,可以将其重新配置为从节点,并加入到新的主节点中。
主从复制在Redis中的应用场景非常广泛。它提供了数据冗余和读取负载均衡的能力,同时增加了系统的可用性和扩展性。通过合理配置主从复制,可以构建高可用性的Redis架构,保护数据并提供稳定的服务。
哨兵模式(Sentinel Mode):
是一种用于管理和监控Redis实例的自动故障转移机制。哨兵模式通过监控Redis实例的状态,检测主节点故障,并自动将一个从节点升级为新的主节点,以确保系统的高可用性。
哨兵模式的一般工作流程:
-
配置哨兵节点:首先,需要选择一个或多个Redis实例作为哨兵节点,这些节点负责监控和管理Redis主从关系。每个哨兵节点都会连接到Redis实例,并定期发送心跳检测,以确保与实例的连接正常。
-
监控主节点:哨兵节点会通过发送命令和接收回复的方式,持续监控主节点的状态。它们会检查主节点是否正常运行、网络连接是否断开以及主节点是否过载等情况。
-
故障检测:当哨兵节点检测到主节点故障时,它们会开始进行故障检测。哨兵节点会互相通信,收集关于主节点状态的信息,并进行投票决策。如果大多数哨兵节点都认为主节点失效,那么故障会被确认。
-
选举新主节点:一旦主节点故障被确认,哨兵节点会选择一个从节点作为新的主节点。它们会考虑从节点的复制偏移量(replication offset)和优先级等因素,选择出一个最适合的从节点升级为主节点。
-
更新配置信息:哨兵节点会更新所有Redis实例的配置文件,将新的主节点信息通知给从节点和其他哨兵节点。从节点会重新连接到新的主节点,并开始复制新的数据集。其他哨兵节点也会更新其内部状态,以反映新的主从关系。
-
故障恢复:一旦新的主节点选举完成并配置更新完成,系统将恢复正常运行。客户端可以通过连接到新的主节点来进行读写操作,而旧的主节点(如果修复)可以作为从节点加入到新的主节点中。
哨兵模式提供了自动故障转移和监控的能力,可以在主节点故障时快速恢复系统的可用性。它通过多个哨兵节点的协作,实现了故障检测、选举新主节点和更新配置信息等关键步骤。这样,Redis可以在单点故障的情况下保持高可用性,并提供可靠的服务。
集群模式(Cluster Mode):
是一种分布式架构,用于扩展Redis并提供高可用性的解决方案。在集群模式下,数据被分片存储在多个Redis节点上,并通过内部通信协议进行数据交互,从而实现水平扩展和负载均衡。
集群模式的一般工作流程:
-
配置集群节点:首先,需要选择一组Redis实例作为集群节点,并对其进行配置。每个节点都必须具有唯一的节点标识和监听端口。在配置文件中,需要指定集群节点的IP地址、端口和节点标识等信息。
-
创建集群:使用Redis提供的
redis-trib.rb工具或其他第三方工具,可以创建Redis集群。在创建过程中,需要将所有节点的地址和端口信息提供给工具,工具将会自动进行集群初始化。 -
数据分片:集群中的数据会被分片存储在不同的节点上。Redis使用哈希槽(hash slots)的概念来划分数据,一共有16384个哈希槽。集群中的每个节点负责管理一部分哈希槽,并存储对应的数据。
-
客户端路由:当客户端发送写入或读取请求时,它们会根据数据的键(key)计算哈希槽,并将请求路由到负责该哈希槽的节点上。客户端可以直接连接到集群中的任意节点,节点会负责将请求转发给正确的节点进行处理。
-
节点间通信:集群节点之间通过内部通信协议进行数据交互。节点之间会进行消息广播、状态同步和数据迁移等操作,以保持集群的一致性和可用性。如果有节点离线或加入集群,其他节点会进行自动的重新分配哈希槽和数据迁移。
-
故障恢复:当集群中的某个节点发生故障时,Redis会自动进行故障转移。集群中的其他节点会检测到故障节点的离线,并将负责的哈希槽重新分配给其他节点。这样可以保证数据的可用性,并且集群可以继续正常运行。
Redis集群模式提供了横向扩展和负载均衡的能力,可以处理大规模的数据和请求。它使用哈希槽的数据分片方式,将数据均匀地分布在多个节点上,从而实现数据的分散存储和并行处理。通过增加节点数量,可以进一步扩展集群的容量和性能。
总结:
除了上述步骤,还可以采取其他措施,如使用故障切换技术、合理配置Redis参数、优化网络和硬件资源等,以提高Redis的高可用性。
相关文章:
Redis高可用性详解
目录 编辑 高可用性: 主从复制(Master-Slave Replication): 主从复制的一般工作流程: 哨兵模式(Sentinel Mode): 哨兵模式的一般工作流程: 集群模式(…...
MySQL(1) ---- 数据库介绍与MySQL概述
介绍 1、什么是数据库? 数据库:DateBase(DB),是存储和管理数据的仓库。数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件。SQL࿱…...
面试题之软件测试流程
说说公司的软件测试流程,这,是常考的面试题之一。 不同公司的流程不一样,现状决定流程,没有绝对的对错。 以结果为导向,保证产品质量,提高测试效率,才是王道。 以下的流程为业界比较标准的流程&…...
MyBatis中#{}与${}的区别,与各自的应用场景
#{}和${}的区别: #{}: 底层使用PreparedStatement。特点:先进行SQL语句的编译,然后给SQL语句的占位符问号?传值。可以避免SQL注入的风险。 ${}:底层使用Statement。特点:先进行SQL语句的拼接,然后再对SQL语…...
泛型类相关
package com.test.test02;/* * GenericTest就是一个普通的类 * GenericTest<E>就是一个泛型类 * <>里面就是一个参数类型,但是这个类型是什么呢?这个类型现在是不确定的,相当于一个占位。 * 但是现在确定的是这个类型一定是一…...
一文速学数模-季节性时序预测SARIMA模型详解+Python实现
目录 前言 一、季节时间序列模型概述 二、SARIMA模型定义 三.SARIMA模型算法原理...
二叉树与图(C++刷题笔记)
二叉树与图(C刷题笔记) 113. 路径总和 II 力扣 从根节点深度遍历二叉树,先序遍历时,将节点存储至path栈中,使用path_val累加节点值 当遍历到叶子节点,检查path_val是否为sum,若是,…...
STM32-ADC多通道输入实验
之前已经介绍了几个ADC的笔记和实验了,链接如下: 关于ADC的笔记1_Mr_rustylake的博客-CSDN博客 STM32-ADC单通道采集实验_Mr_rustylake的博客-CSDN博客 STM32-单通道ADC采集(DMA读取)实验_Mr_rustylake的博客-CSDN博客 接下来…...
javaIO流之文件流
目录 简介一、File的构造方法二、File的常用方法1、获取功能的方法2、绝对路径和相对路径3、判断功能的方法4、创建、删除功能的方法5、目录的遍历6、递归遍历 三、RandomAccessFile1、主要方法 四、Apache FileUtils 类1、复制文件或目录:2、删除文件或目录&#x…...
DMA-STM32
DMA-STM32 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源 12个独立可配置的通道:DMA1 (7个通道),DMA2 (5个通道) 每个通道都支持软件触发和特定的硬件触发 STM32…...
代码随想录算法训练营第二十七天|39. 组合总和、40.组合总和II、131.分割回文串
目录 39. 组合总和 40.组合总和II 131.分割回文串 39. 组合总和 本题是 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制 题目链接/文章讲解:代码随想录 视频讲解:带你学透回溯算法-组合总和(对应…...
泛型(Generic) <? extends T>,<? super T>
通配符边界引入背景 使用泛型的过程中,经常出现一种很别扭的情况。我们有 Fruit 类,和它的派生类 Apple 类。 class Fruit {}class Apple extends Fruit {}然后有一个最简单的容器:Plate 类。盘子里可以放一个泛型的 “东西”. class Plat…...
数云融合|数字化转型中的利器:揭秘云技术的重要角色
数字化转型不仅是一个流行语,而是一项真正能够改变你的业务流程并提高客户参与度的重要战略。要实现数字化转型,必须重新构建业务流程,同时利用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地址映射关系:…...
《微服务实战》 第九章 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算法的应用题目代码实现 一、暴力匹配法 动画演示 时间复杂度为: 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编程的一般步骤如下: (1)包含头文件: 在代码中包含必要的头文件,以便使用UDP编程所…...
linux内核篇-进程及其调度
介绍一个程序从源文件到进程执行的过程 1、编译链接(源文件到二进制文件) Linux 下面二进制的程序也要有严格的格式,称为ELF(Executeable and Linkable Format,可执行与可链接格式) ,这个格式可…...
C#开发的OpenRA游戏之基地工程车执行部署命令
C#开发的OpenRA游戏之基地工程车执行部署命令 前面已经分析接收到网络命令后,可以拿到多个命令对象, 通过命令对象进行遍历,最终会在比较部署命令的类里相同,从而执行部署命令。 可见,网络游戏里的对象操作,都是通过网络发送给服务器,再从服务器返回消息来执行对象的动…...
从零开始掌握ky:基于fetch的轻量级HTTP客户端实战指南
1. 为什么你需要ky这个HTTP客户端? 如果你经常用JavaScript写前端项目,肯定对原生fetch不陌生。这个浏览器自带的API确实解决了XMLHttpRequest的很多痛点,但用久了就会发现它有不少"反人类"设计。比如: 必须手动检查res…...
TrollInstallerX终极指南:简单快速安装TrollStore的完整教程
TrollInstallerX终极指南:简单快速安装TrollStore的完整教程 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 您是否一直在寻找一种简单可靠的方法࿰…...
安全:经验总结
那份报价单比正确的贵了30%:一次版本事故的完整复盘“胡总,您看看这个报价,土耳其那边说我们价格太高了。” 我接过手机,看到客户发来的邮件截图。那份报价单清清楚楚写着:“V2方案,总价130万美元ÿ…...
告别谷歌WebRTC:轻量级替代方案libdatachannel与AioRTC的保姆级环境搭建与对比
告别谷歌WebRTC:轻量级替代方案libdatachannel与AioRTC的保姆级环境搭建与对比 在实时音视频通信领域,WebRTC技术早已成为行业标准。然而,谷歌官方实现的庞大代码库和复杂依赖链,常常让初学者望而生畏。本文将带你探索两个更轻量…...
UR5机械臂避障实战:如何用包围盒快速过滤点云(附D435i/Kinect2配置模板)
UR5机械臂点云避障实战:包围盒滤波与多传感器适配指南 在工业自动化与机器人应用领域,UR5协作机械臂因其灵活性和安全性成为中小型工作单元的热门选择。但当机械臂需要与环境动态交互时,如何准确识别有效障碍物、过滤机械臂自身点云成为关键挑…...
建立班级相册?超简单,保姆级教你在PPT里建立班级“小红书”,3步打造有温度的班级小世界!
边听边看收获更多! 班级相册超简单,保姆级教你在PPT里建立班级“小红书”社区!你有搞班级相册吗? 是不是早已 “名存实亡”? 每次班级活动拍了几十张照片,最后都散落在微信群、QQ 群的聊天记录里 —— 想找…...
InteractiveHtmlBom:从静态表格到动态可视化的PCB BOM革命
InteractiveHtmlBom:从静态表格到动态可视化的PCB BOM革命 【免费下载链接】InteractiveHtmlBom Interactive HTML BOM generation plugin for KiCad, EasyEDA, Eagle, Fusion360 and Allegro PCB designer 项目地址: https://gitcode.com/gh_mirrors/in/Interact…...
从混乱到秩序:FancyZones如何重塑你的Windows多任务工作流
从混乱到秩序:FancyZones如何重塑你的Windows多任务工作流 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trending/po/Power…...
技术管理中的目标设定与绩效评估
技术管理中的目标设定与绩效评估:驱动团队高效创新的核心 在快速发展的技术领域,目标设定与绩效评估是管理团队、推动创新的关键工具。明确的目标能够为技术团队提供方向,而科学的绩效评估则能确保资源高效利用,激发成员潜力。无…...
大模型显存占用对比:Qwen2.5-7B推理vs微调,你的显卡够用吗?
Qwen2.5-7B模型显存实战指南:从消费级显卡到专业硬件的适配策略 当你在本地部署一个7B参数的大语言模型时,第一道门槛往往不是算法理解,而是冰冷的硬件现实——显存不足的报错提示。去年团队第一次尝试在RTX 3090上跑Qwen2.5-7B推理时&#…...

