如何保证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具有以下特性:
- 性能高效:由于所有数据都存储在内存中,因此Redis能提供高速的读写速率。
- 持久化:Redis可以将内存中的数据持久化到磁盘,用于防止数据丢失。
- 支持多种数据结构:Redis支持多种数据结构,可以满足不同的数据存储需求。
- 支持事务:Redis支持事务,可以保证一系列命令的原子性。
- 支持发布订阅模式:Redis支持发布订阅模式,可以用于实现消息队列。
- 支持Lua脚本:Redis支持Lua脚本,可以在服务器端执行复杂的操作。
- 支持主从复制:Redis支持主从复制,可以用于数据备份或提高读取性能。
- 支持高可用和分区:通过Redis Sentinel和Redis Cluster,Redis支持高可用和数据分区。
2.Redis 的使用场景
Redis可以用于多种场景,以下是一些常见的用途:
- 缓存系统:由于Redis的高性能和丰富的数据结构,它经常被用作缓存系统,可以有效地减少对后端数据库的访问,提高应用的响应速度。
- 消息队列:Redis的发布订阅功能可以用来实现消息队列,用于在不同的应用程序之间异步传递消息。
- 排行榜:Redis的有序集合(Sorted Sets)非常适合用来实现排行榜功能,可以快速地获取排名和分数,并实时更新。
- 会话缓存:Redis可以用来存储Web应用的会话信息,比如用户的登录状态、购物车信息等。
- 实时分析:Redis的快速读写和丰富的数据结构使得它非常适合用来进行实时分析,例如统计网站的访问量、用户行为等。
- 地理空间数据:Redis的地理空间索引可以用来存储地理位置信息,并进行位置的查询和距离计算。
- 计数器:Redis的INCR和DECR命令可以用来实现计数器功能,例如统计网站的点击量、下载量等。
- 分布式锁: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的分布式解决方案,它可以自动将数据分片,进行故障转移,以及重新分配分片。
- 数据分片:Redis Cluster将所有的数据分成16384个槽(slot),每个槽对应一部分键。每个Redis节点负责一部分槽,也就是一部分数据。当需要获取或设置一个键的值时,Redis Cluster会根据键的哈希值计算出对应的槽,然后找到负责这个槽的节点。这种方式可以将数据均匀地分布在所有的节点上,提高存储和处理的效率。
- 故障检测:Redis Cluster的每个节点都会定期与其他节点进行通信,检查其他节点的状态。这种通信是通过Gossip协议实现的,每个节点都会定期地向其他节点发送ping消息,如果在指定的时间内没有收到回应,那么这个节点会被标记为失效。
- 故障转移:当一个节点被标记为失效后,Redis Cluster会选择一个从节点来接管失效节点的数据。这个从节点会被提升为主节点,并接管失效节点的所有槽。在故障转移过程中,Redis Cluster可能会拒绝部分写操作,以保证数据的一致性。这个过程是自动进行的,不需要人工干预。
- 数据一致性:Redis Cluster使用异步复制,但是在进行故障转移时,会尽可能地保证数据的一致性。当一个主节点失效时,只有当至少一个从节点完成了数据同步,才会进行故障转移。这样可以保证在主节点失效后,至少有一个从节点拥有最新的数据。
上面提到Gossip协议,这里简单介绍下。
在Redis Cluster中,Gossip协议主要用于节点之间的信息交换,包括节点的发现、故障检测和配置信息的传播。
- 节点发现:新加入的节点通过Gossip协议可以快速地被集群中的其他节点发现,同时,已经存在的节点也可以通过Gossip协议发现新加入的节点。
- 故障检测:节点通过定期向其他节点发送ping消息,并等待pong回复来检测其他节点的状态。如果在一定时间内没有收到pong回复,那么该节点会被标记为失效。
- 配置信息传播:节点之间可以通过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 哨兵模式(Sentinel)3.2 集群模式(Cluster) 4.参考 本文主要介绍Redis如何保证高可用。 1.关于Redis Redis(Remote Dictionary Server)是一个开源的…...
第一百六十三回 如何在任意位置显示PopupMenu
文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了PopupMenuButton相关的内容,本章回中将介绍如何在任意位置显示PopupMenu.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在上一章回中介绍了PopupMenuButton相关的内容,它主…...
采用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模板引擎,能够处理HTML、XML、JavaScript、CSS甚至纯文本。主要目标是提供一种优雅且高度可维护的创建模板的方法。 何为模板引擎呢?模板引擎就是为了使用户页面和业务数据…...
二分查找模版
对于一个递增序列我们要找大于等于target的数,返回结果的下标时 比如 序列 5 7 7 8 8 10 初始化左右指针l0 rn-1 猜测区间 [l,r] 闭区间,mid(lr)/2 防溢出就写成 midl(r-l)/2 如果有nums[mid]<target 那么[l,mid]这个区间的数就都小于target 更新 lmi…...
idea清空缓存类
解决办法 网上有很多是让你去清空什么maven依赖,但假如这个项目是你不可以大刀阔斧的话 可以清空idea缓存 选择 Invalidate 开头的 然后全选 运行重启idea OK...
PAT(Basic Level) Practice(中文) 1015德才论
前言 ※ PTA是 程序设计类实验辅助教学平台 ,里边包含一些编程题目集以供练习。 这道题用java解,我试了三种解法,不断优化,但始终是三个测试点通过、三个测试点超时。我把我的代码放在这里,做个参考吧。 1015 德才…...
接口自动化测试的概述及流程梳理~
接下来开始学习接口自动化测试。 因为之前从来没接触过,所以先了解一些基础知识。 1.接口测试的概述 2.接口自动化测试流程。 接口测试概述 接口,又叫API(Application Programming Interface,应用程序编程接口)&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 前言 🔥 优质竞赛项目系列&#x…...
虚拟货币(也称为加密货币或数字货币)的运作
虚拟币发展史 虚拟币的发展史可以追溯到20世纪末和21世纪初,以下是虚拟币的重要发展节点: 1998年:比特币白皮书的发布 比特币的概念最早由中本聪(Satoshi Nakamoto)在1998年提出,随后在2008年发布了一份名…...
N. Number Reduction
Problem - 1765N - Codeforces 发现如果是无前导0最小数那么在保证删除k个数时第1位是最小的,第二位一定是相对最小的,且答案第一位和第二位在原位置的间隔是小于等于还可以删除的位数的。 因此,对于原数字长度位n,要删除k&#…...
Java集合面试题
一、Java集合面试题 1.LinkedHashMap底层原理? HashMap是无序的,迭代HashMap所得到元素的顺序并不是它们最初放到HashMap的顺序,即不能保持它们的插入顺序。 LinkedHashMap继承于HashMap,是HashMap和LinkedList的融合体&#x…...
Python 编程基础 | 第三章-数据类型 | 3.5、列表
一、列表 1、创建列表 序列是Python中最基本的数据结构,Python有6个序列的内置类型,但最常见的是列表和元组。序列都可以进行的操作包括索引,切片,加,乘,检查成员。此外,Python已经内置确定序列…...
Spring Cloud Zuul 基本原理
Spring Cloud Zuul 底层是基于Servlet实现的,核心是通过一系列的ZuulFilter来完成请求的转发。 1、核心组件注册 1.1. EnableZuulProxy注解 启用Zuul作为微服务网关,需要在Application应用类加上EnableZuulProxy注解,而该注解核心是利用Im…...
QT实现TCP服务器客户端的实现
ser: widget.cpp: #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);// 此时…...
行为型设计模式——责任链模式
摘要 责任链模式(Chain of responsibility pattern): 通过责任链模式, 你可以为某个请求创建一个对象链. 每个对象依序检查此请求并对其进行处理或者将它传给链中的下一个对象。 一、责任链模式意图 职责链模式(Chain Of Responsibility) 是一种行为设…...
window安装压缩版postgresql
环境: window 11 专业版postgresql-16.0-1-windows-x64-binaries.zip 一、下载 1.1 从官网下载 https://www.postgresql.org/download/windows/ 1.2 从百度网盘下载 链接:https://pan.baidu.com/s/1fmQbgWSzX4hN07Lgdzfz0g?pwddzyy 提取码&#…...
数组(数据结构)
优质博文:IT-BLOG-CN 一、简介 数组Array是一种线性表数据结构,它用一组连续的内存空间,存储一组具有相同类型的数据。 数组因具有连续的内存空间的特点,数据拥有非常高效率的“随机访问”,时间复杂度为O(1)。但因要保…...
C/C++ 二分查找面试算法题
1.二分查找(有序数组) 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们好呀,今天,小雅兰的内容是Linux啦!!!主要是Linux的一些基本指令和Linux相关的基本概念(系统层面),下面,让我们进入Linux的世界吧!!…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
