当前位置: 首页 > 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;…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...