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

如何保证Redis的HA高可用

目录

  • 1.关于Redis
  • 2.Redis 的使用场景
  • 3.Redis的高可用
    • 3.1 哨兵模式(Sentinel)
    • 3.2 集群模式(Cluster)
  • 4.参考

本文主要介绍Redis如何保证高可用。

1.关于Redis

Redis(Remote Dictionary Server)是一个开源的,基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

Redis支持多种类型的数据结构,如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)以及位图(Bitmaps)、HyperLogLogs和地理空间索引半径查询等。

Redis具有以下特性:

  1. 性能高效:由于所有数据都存储在内存中,因此Redis能提供高速的读写速率。
  2. 持久化:Redis可以将内存中的数据持久化到磁盘,用于防止数据丢失。
  3. 支持多种数据结构:Redis支持多种数据结构,可以满足不同的数据存储需求。
  4. 支持事务:Redis支持事务,可以保证一系列命令的原子性。
  5. 支持发布订阅模式:Redis支持发布订阅模式,可以用于实现消息队列。
  6. 支持Lua脚本:Redis支持Lua脚本,可以在服务器端执行复杂的操作。
  7. 支持主从复制:Redis支持主从复制,可以用于数据备份或提高读取性能。
  8. 支持高可用和分区:通过Redis Sentinel和Redis Cluster,Redis支持高可用和数据分区。

2.Redis 的使用场景

Redis可以用于多种场景,以下是一些常见的用途:

  1. 缓存系统:由于Redis的高性能和丰富的数据结构,它经常被用作缓存系统,可以有效地减少对后端数据库的访问,提高应用的响应速度。
  2. 消息队列:Redis的发布订阅功能可以用来实现消息队列,用于在不同的应用程序之间异步传递消息。
  3. 排行榜:Redis的有序集合(Sorted Sets)非常适合用来实现排行榜功能,可以快速地获取排名和分数,并实时更新。
  4. 会话缓存:Redis可以用来存储Web应用的会话信息,比如用户的登录状态、购物车信息等。
  5. 实时分析:Redis的快速读写和丰富的数据结构使得它非常适合用来进行实时分析,例如统计网站的访问量、用户行为等。
  6. 地理空间数据:Redis的地理空间索引可以用来存储地理位置信息,并进行位置的查询和距离计算。
  7. 计数器:Redis的INCR和DECR命令可以用来实现计数器功能,例如统计网站的点击量、下载量等。
  8. 分布式锁:Redis可以用来实现分布式锁,用于在分布式环境中对资源的互斥访问。

以上只是Redis的一部分用途,由于Redis的灵活性和高性能,它可以用于更多的场景。

Redis有丰富的应用场景,保证其高可用,是重中之重。
接下来介绍 Redis 高可用。

3.Redis的高可用

Redis的高可用主要是两种:哨兵模式(Sentinel) 和 集群模式(Cluster)。

3.1 哨兵模式(Sentinel)

Redis Sentinel是Redis官方推荐的高可用解决方案,它可以监控Redis主从服务器,进行故障转移,以及发送通知。

Redis主从复制,可以将一个Redis服务器的数据复制到一个或多个Redis服务器,在配置文件中,使用slaveof指令指定主节点的IP地址和端口。
slaveof <masterip> <masterport>

Redis Sentinel 配置过程如下:

首先需要在每个Sentinel节点上创建一个配置文件,例如sentinel.conf,并设置监控的Redis服务器,以及其他选项。

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000

其中,mymaster是主服务器的名称,
127.0.0.1 6379是主服务器的地址和端口,
2是判断主服务器失效所需的Sentinel数量,5000是判断主服务器失效的超时时间,10000是故障转移的超时时间。

然后使用配置文件启动每个Sentinel节点。

redis-sentinel ./sentinel.conf

3.2 集群模式(Cluster)

Redis Cluster是Redis的分布式解决方案,它可以自动将数据分片,进行故障转移,以及重新分配分片。

  1. 数据分片:Redis Cluster将所有的数据分成16384个槽(slot),每个槽对应一部分键。每个Redis节点负责一部分槽,也就是一部分数据。当需要获取或设置一个键的值时,Redis Cluster会根据键的哈希值计算出对应的槽,然后找到负责这个槽的节点。这种方式可以将数据均匀地分布在所有的节点上,提高存储和处理的效率。
  2. 故障检测:Redis Cluster的每个节点都会定期与其他节点进行通信,检查其他节点的状态。这种通信是通过Gossip协议实现的,每个节点都会定期地向其他节点发送ping消息,如果在指定的时间内没有收到回应,那么这个节点会被标记为失效。
  3. 故障转移:当一个节点被标记为失效后,Redis Cluster会选择一个从节点来接管失效节点的数据。这个从节点会被提升为主节点,并接管失效节点的所有槽。在故障转移过程中,Redis Cluster可能会拒绝部分写操作,以保证数据的一致性。这个过程是自动进行的,不需要人工干预。
  4. 数据一致性:Redis Cluster使用异步复制,但是在进行故障转移时,会尽可能地保证数据的一致性。当一个主节点失效时,只有当至少一个从节点完成了数据同步,才会进行故障转移。这样可以保证在主节点失效后,至少有一个从节点拥有最新的数据。

上面提到Gossip协议,这里简单介绍下。

在Redis Cluster中,Gossip协议主要用于节点之间的信息交换,包括节点的发现、故障检测和配置信息的传播。

  1. 节点发现:新加入的节点通过Gossip协议可以快速地被集群中的其他节点发现,同时,已经存在的节点也可以通过Gossip协议发现新加入的节点。
  2. 故障检测:节点通过定期向其他节点发送ping消息,并等待pong回复来检测其他节点的状态。如果在一定时间内没有收到pong回复,那么该节点会被标记为失效。
  3. 配置信息传播:节点之间可以通过Gossip协议传播配置信息,例如节点的角色(主节点或从节点)、数据槽的分配情况等。
    Gossip协议是一种基于"流言"传播的信息交换协议,它可以在大规模分布式系统中实现高效的信息交换。在Redis Cluster中,Gossip协议是实现节点管理和故障转移的重要机制。

Redis Cluster 配置过程如下:

在每个Redis节点上创建一个配置文件,例如redis.conf,并设置cluster-enabled为yes,以及其他选项。

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

然后使用redis-cli工具创建Cluster。

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

以上是保证Redis高可用的基本方法,具体的配置和使用可以根据实际需求进行调整。在实际使用中,可能还需要考虑其他因素,例如网络分区、数据一致性等

4.参考

Redis文档

Redis的所有官方文档,包括快速入门指南、命令参考、主题指南等。你可以在这里找到关于Redis的所有信息,包括安装、配置、使用方法等。

相关文章:

如何保证Redis的HA高可用

目录 1.关于Redis2.Redis 的使用场景3.Redis的高可用3.1 哨兵模式&#xff08;Sentinel&#xff09;3.2 集群模式&#xff08;Cluster&#xff09; 4.参考 本文主要介绍Redis如何保证高可用。 1.关于Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的…...

第一百六十三回 如何在任意位置显示PopupMenu

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了PopupMenuButton相关的内容&#xff0c;本章回中将介绍如何在任意位置显示PopupMenu.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在上一章回中介绍了PopupMenuButton相关的内容&#xff0c;它主…...

采用python中的opencv2的库来运用机器视觉移动物体

一. 此次我们来利用opencv2来进行机器视觉的学习 1. 首先我们先来进行一个小的案例的实现. 这次我们是将会进行一个小的矩形手势的移动. import cv2 from cvzone.HandTrackingModule import HandDetectorcap cv2.VideoCapture(0) # cap.set(3, 1280) # cap.set(4, 720) col…...

一、thymeleaf简介

1.1 什么是thymeleaf Thymeleaf是一个适用于web和独立环境的现代服务器端Java模板引擎&#xff0c;能够处理HTML、XML、JavaScript、CSS甚至纯文本。主要目标是提供一种优雅且高度可维护的创建模板的方法。 何为模板引擎呢&#xff1f;模板引擎就是为了使用户页面和业务数据…...

二分查找模版

对于一个递增序列我们要找大于等于target的数&#xff0c;返回结果的下标时 比如 序列 5 7 7 8 8 10 初始化左右指针l0 rn-1 猜测区间 [l,r] 闭区间&#xff0c;mid(lr)/2 防溢出就写成 midl(r-l)/2 如果有nums[mid]<target 那么[l,mid]这个区间的数就都小于target 更新 lmi…...

idea清空缓存类

解决办法 网上有很多是让你去清空什么maven依赖&#xff0c;但假如这个项目是你不可以大刀阔斧的话 可以清空idea缓存 选择 Invalidate 开头的 然后全选 运行重启idea OK...

PAT(Basic Level) Practice(中文) 1015德才论

前言 ※ PTA是 程序设计类实验辅助教学平台 &#xff0c;里边包含一些编程题目集以供练习。 这道题用java解&#xff0c;我试了三种解法&#xff0c;不断优化&#xff0c;但始终是三个测试点通过、三个测试点超时。我把我的代码放在这里&#xff0c;做个参考吧。 1015 德才…...

接口自动化测试的概述及流程梳理~

接下来开始学习接口自动化测试。 因为之前从来没接触过&#xff0c;所以先了解一些基础知识。 1.接口测试的概述 2.接口自动化测试流程。 接口测试概述 接口&#xff0c;又叫API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;&a…...

竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#x…...

虚拟货币(也称为加密货币或数字货币)的运作

虚拟币发展史 虚拟币的发展史可以追溯到20世纪末和21世纪初&#xff0c;以下是虚拟币的重要发展节点&#xff1a; 1998年&#xff1a;比特币白皮书的发布 比特币的概念最早由中本聪&#xff08;Satoshi Nakamoto&#xff09;在1998年提出&#xff0c;随后在2008年发布了一份名…...

N. Number Reduction

Problem - 1765N - Codeforces 发现如果是无前导0最小数那么在保证删除k个数时第1位是最小的&#xff0c;第二位一定是相对最小的&#xff0c;且答案第一位和第二位在原位置的间隔是小于等于还可以删除的位数的。 因此&#xff0c;对于原数字长度位n&#xff0c;要删除k&#…...

Java集合面试题

一、Java集合面试题 1.LinkedHashMap底层原理&#xff1f; HashMap是无序的&#xff0c;迭代HashMap所得到元素的顺序并不是它们最初放到HashMap的顺序&#xff0c;即不能保持它们的插入顺序。 LinkedHashMap继承于HashMap&#xff0c;是HashMap和LinkedList的融合体&#x…...

Python 编程基础 | 第三章-数据类型 | 3.5、列表

一、列表 1、创建列表 序列是Python中最基本的数据结构&#xff0c;Python有6个序列的内置类型&#xff0c;但最常见的是列表和元组。序列都可以进行的操作包括索引&#xff0c;切片&#xff0c;加&#xff0c;乘&#xff0c;检查成员。此外&#xff0c;Python已经内置确定序列…...

Spring Cloud Zuul 基本原理

Spring Cloud Zuul 底层是基于Servlet实现的&#xff0c;核心是通过一系列的ZuulFilter来完成请求的转发。 1、核心组件注册 1.1. EnableZuulProxy注解 启用Zuul作为微服务网关&#xff0c;需要在Application应用类加上EnableZuulProxy注解&#xff0c;而该注解核心是利用Im…...

QT实现TCP服务器客户端的实现

ser&#xff1a; widget.cpp&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);// 此时&#xf…...

行为型设计模式——责任链模式

摘要 责任链模式(Chain of responsibility pattern): 通过责任链模式, 你可以为某个请求创建一个对象链. 每个对象依序检查此请求并对其进行处理或者将它传给链中的下一个对象。 一、责任链模式意图 职责链模式&#xff08;Chain Of Responsibility&#xff09; 是一种行为设…...

window安装压缩版postgresql

环境&#xff1a; window 11 专业版postgresql-16.0-1-windows-x64-binaries.zip 一、下载 1.1 从官网下载 https://www.postgresql.org/download/windows/ 1.2 从百度网盘下载 链接&#xff1a;https://pan.baidu.com/s/1fmQbgWSzX4hN07Lgdzfz0g?pwddzyy 提取码&#…...

数组(数据结构)

优质博文&#xff1a;IT-BLOG-CN 一、简介 数组Array是一种线性表数据结构&#xff0c;它用一组连续的内存空间&#xff0c;存储一组具有相同类型的数据。 数组因具有连续的内存空间的特点&#xff0c;数据拥有非常高效率的“随机访问”&#xff0c;时间复杂度为O(1)。但因要保…...

C/C++ 二分查找面试算法题

1.二分查找&#xff08;有序数组&#xff09; https://blog.csdn.net/qq_63918780/article/details/122527681 1 #include <stdio.h>2 #include <string.h>3 4 int func(int *a,int j,int x)5 {6 int len j - 1,i 0,min;7 while(i<len)8 {9 …...

Linux基本指令(上)——“Linux”

各位CSDN的uu们好呀&#xff0c;今天&#xff0c;小雅兰的内容是Linux啦&#xff01;&#xff01;&#xff01;主要是Linux的一些基本指令和Linux相关的基本概念&#xff08;系统层面&#xff09;&#xff0c;下面&#xff0c;让我们进入Linux的世界吧&#xff01;&#xff01;…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

Element-Plus:popconfirm与tooltip一起使用不生效?

你们好&#xff0c;我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip&#xff0c;产品要求是两个需要结合一起使用&#xff0c;也就是鼠标悬浮上去有提示文字&#xff0c;并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...