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游戏之基地工程车执行部署命令 前面已经分析接收到网络命令后,可以拿到多个命令对象, 通过命令对象进行遍历,最终会在比较部署命令的类里相同,从而执行部署命令。 可见,网络游戏里的对象操作,都是通过网络发送给服务器,再从服务器返回消息来执行对象的动…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

