简单认识redis高可用实现方法

news/2024/5/17 6:23:24

文章目录

  • 一、redis群集三种模式
  • 二、 Redis 主从复制
    • 1、简介
    • 2、作用:
    • 3、流程:
    • 4.配置主从复制
  • 三、Redis 哨兵模式
    • 1、简介
    • 2、原理:
    • 3、作用:
    • 4、哨兵结构由两部分组成,哨兵节点和数据节点:
    • 5、故障转移机制:
    • 6、主节点的选举:
    • 7、配置哨兵模式
    • 8、故障模拟
    • 9、恢复故障节点
  • 四、 Redis 群集模式
    • 1、简介
    • 2、集群的作用,可以归纳为两点:
    • 3、Redis集群的数据分片:
    • 4、Redis集群的主从复制模型
    • 5、搭建 redis cluster 集群


一、redis群集三种模式

redis群集有三种模式,分别是主从同步/复制、哨兵模式、Cluster

主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。
缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。

哨兵:在主从复制的基础上,哨兵实现了自动化的故障恢复。
缺陷:写操作无法负载均衡;存储能力受到单机的限制;哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。

集群:通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

二、 Redis 主从复制

1、简介

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

2、作用:

数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

3、流程:

(1)若启动一个Slave机器进程,则它会向Master机器发送一个“sync command”命令,请求同步连接。
(2)无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。
(3)后台进程完成缓存操作之后,Master机器就会向Slave机器发送数据文件,Slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。
(4)Master机器收到Slave端机器的连接后,将其完整的数据文件发送给Slave端机器,如果Mater同时收到多个Slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。
在这里插入图片描述

4.配置主从复制

主节点:192.168.116.40
从节点:192.168.116.50
从节点:192.168.116.60

主、从节点配置文件修改

vim /etc/redis/6379.conf#70行,每台添加本机的地址
bind 127.0.0.1 192.168.116.40#700行,开启AOF
appendonly yes

从节点添加

vim /etc/redis/6379.conf#288行,指定master
replicaof 192.168.116.40 6379

在这里插入图片描述
查看日志发现,主从已经进行RDB数据完全同步
在这里插入图片描述

执行 info replication 可以查看同步信息
在这里插入图片描述
主添加数据,测试aof同步
在这里插入图片描述
查看从节点是否有这个数据(都有则同步成功)

在这里插入图片描述
在这里插入图片描述

三、Redis 哨兵模式

1、简介

主从切换技术的方法是:当服务器宕机后,需要手动一台从机切换为主机,这需要人工干预,不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点,就有了哨兵机制。

哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移。

2、原理:

哨兵(sentinel):是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的 Master并将所有slave连接到新的 Master。所以整个运行哨兵的集群的数量不得少于3个节点。

3、作用:

●监控:哨兵会不断地检查主节点和从节点是否运作正常。
●自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。
●通知(提醒):哨兵可以将故障转移的结果发送给客户端。

4、哨兵结构由两部分组成,哨兵节点和数据节点:

●哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。
●数据节点:主节点和从节点都是数据节点。

5、故障转移机制:

1.由哨兵节点定期监控发现主节点是否出现了故障
每个哨兵节点每隔1秒会向主节点、从节点及其它哨兵节点发送一次ping命令做一次心跳检测。如果主节点在一定时间范围内不回复或者是回复一个错误消息,那么这个哨兵就会认为这个主节点主观下线了(单方面的)。当超过半数哨兵节点认为该主节点主观下线了,这样就客观下线了。

2.当主节点出现故障,此时哨兵节点会通过Raft算法(选举算法)实现选举机制共同选举出一个哨兵节点为leader,来负责处理主节点的故障转移和通知。所以整个运行哨兵的集群的数量不得少于3个节点。

3.由leader哨兵节点执行故障转移,过程如下:
●将某一个从节点升级为新的主节点,让其它从节点指向新的主节点;
●若原主节点恢复也变成从节点,并指向新的主节点;
●通知客户端主节点已经更换。

需要特别注意的是,客观下线是主节点才有的概念;如果从节点和哨兵节点发生故障,被哨兵主观下线后,不会再有后续的客观下线和故障转移操作。

6、主节点的选举:

1.过滤掉不健康的(已下线的),没有回复哨兵 ping 响应的从节点。
2.选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)
3.选择复制偏移量最大,也就是复制最完整的从节点。

哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式

7、配置哨兵模式

首先需要做好主从复制,上一部分已经完成。

复制并修改哨兵配置文件

cp /opt/redis-5.0.7/sentinel.conf /etc/redis/
cd /etc/redis/
vim sentinel.conf
#关闭保护模式
protected-mode no
#默认端口
port 26379
#打开后台运行
daemonize yes
#指定哨兵的pid和日志文件
pidfile "/var/run/redis-sentinel.pid"
logfile "/var/log/sentinel.log"
#指定redis数据文件
dir "/var/lib/redis/6379"
#指定哨兵模式主节点(2代表最少两个哨兵主观认为主宕机,才是客观宕机)
sentinel monitor mymaster 192.168.116.40 6379 2
#判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel down-after-milliseconds mymaster 10000
#同一个sentinel对同一个master两次故障恢复之间的间隔时间(180秒)
sentinel failover-timeout mymaster 180000

修改好的文件复制给从节点,并重启服务

#在主节点的/etc/redis/下执行远程传输
scp sentinel.conf 192.168.116.50:`pwd`
scp sentinel.conf 192.168.116.60:`pwd`#从节点重启服务加载配置
service redis restart

启动哨兵模式

#主从都执行
/usr/local/redis/bin/redis-sentinel sentinel.conf

在这里插入图片描述
查看哨兵模式信息
在这里插入图片描述

8、故障模拟

首先跟踪哨兵日志,此时显示主从是正常的

在这里插入图片描述
关闭主节点redis服务,查看是否完成故障切换
在这里插入图片描述
查看新主节点中的信息
在这里插入图片描述
查看从节点配置文件
在这里插入图片描述
在这里插入图片描述

9、恢复故障节点

恢复原来宕机的主节点,看他是否能加入到从节点中
在这里插入图片描述
查看配置文件
在这里插入图片描述
在这里插入图片描述
成功

四、 Redis 群集模式

1、简介

集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。

集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。

2、集群的作用,可以归纳为两点:

(1)数据分区:数据分区(或称数据分片)是集群最核心的功能。
集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
Redis单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave和bgrewriteaof的fork操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。

(2)高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务。

3、Redis集群的数据分片:

Redis集群引入了哈希槽的概念
Redis集群有16384个哈希槽(编号0-16383)
集群的每个节点负责一部分哈希槽
每个Key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作

#以3个节点组成的集群为例:
节点A包含0到5460号哈希槽
节点B包含5461到10922号哈希槽
节点C包含10923到16383号哈希槽

4、Redis集群的主从复制模型

集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为的主节点继续服务。当B和B1都失败后,集群将不可用。

5、搭建 redis cluster 集群

    一般一个群集需要3对一主一从,为了演示方便,这里使用一台主机redis的6001-6004端口,模拟6台不同的redis实例。

创建每个redis节点的目录,复制需要的文件

mkdir -p redis-cluster/redis600{1..6}#批量复制所需文件到6个目录下
cd /opt/redis-5.0.7/
for i in {1..6};do cp /opt/redis-5.0.7/redis.conf /etredis600$i;cp /opt/redis-5.0.7/src/redis-server /opt/redis-5.0.7/src/redis-cli /etredis600$i;done

在这里插入图片描述
修改6个实例的配置文件,之后全部开启

#先修改一个,再复制给其他的,修改端口和文件名序号即可
cd /etc/redis/redis-cluster/redis6001
vim redis.conf
#修改以下字段,其他可自行修改
bind 0.0.0.0    #为实验方便监听所有
protected-mode no    #关闭保护模式
port 6001    #监听端口(每台需要不一样6001-6002)
daemonize yes    #打开后台运行
appendonly yes    #打开aof
cluster-enabled yes    #开启集群模式
cluster-config-file nodes-6001.conf    #集群节点配置文件名(每台需要不一样6001-6002)
cluster-node-timeout 15000    #集群故障监听超时时间#开启所有
for i in {1..6};do cd /etc/redis/redis-cluster/redis600$i;./redis-server redis.conf;done    #开启cluster模式         
./redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.6005 127.0.0.1:6006 --cluster-replicas 1
#结尾的选项1,代表每个主有1个从节点                                                  

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以在数据库中使用 cluster slots 查看集群信息
在这里插入图片描述
测试插入数据(登入时加上-c选项,否则无法自动切换节点)
在这里插入图片描述


http://www.mrgr.cn/p/32058061

相关文章

软件外包开发的后台开发语言

在软件外包开发中,后台语言的选择通常取决于项目需求、客户偏好、团队技能和开发效率。今天和大家分享一些常用的后台语言及选择它们的原因,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。…

【利诱和强制分享下载】规则修改指引

代码审核环节,将会对小程序运营的内容进行核实是否存在阻断功能,损害用户体验。 常见利诱诱导类型: 1、利诱下载APP 小程序内出现不断弹窗、频繁提示诱导用户下载APP,强制用户必须下载APP才能体验完整功能服务。 示例&#xf…

数字化时代,如何做好用户体验与应用性能管理

引言 随着数字化时代的到来,各个行业的应用系统从传统私有化部署逐渐转向公有云、行业云、微服务,这种变迁给运维部门和应用部门均带来了较大的挑战。基于当前企业 IT 运维均为多部门负责,且使用多种运维工具,因此,当…

【Spring】Spring 中事务的实现

事务定义:将⼀组操作封装成⼀个执⾏单元(封装到⼀起),要么全部成功,要么全部失败 Spring 中的事务操作分为两类: 编程式事务(⼿动写代码操作事务)。声明式事务(利⽤注解…

【hive】Install hive using mysql as hive metadata service

文章目录 一. Requirements二. Installing Hive from a Stable Release三. Running Hive四. Running Hive CLI五.Running HiveServer2 and Beeline1. 下载安装mysql2. 下载mysql驱动3. 配置hive-site.xml4. 初始化元数据库5. 通过beeline进行连接 一. Requirements Users are s…

php 生成连续递增的Excel列索引 可以控制多少列

今天遇到需要生成对应的下拉&#xff0c;下拉的类 需要PHP 输出一个数组 如 A、B、C、D 到Z 列后 Excel 的列就变成 AA 、AB、 AC 依次类推 查询得知 Excel 最大列数 16384 最大行数 1048576 下面演示3000列或行 <?php$idx [idx > 0];for ($i …

OpenCV4.3 Java 编程入门:透明度与抠图

1. 基础知识 JPG 格式图片有损压缩和不支持半透明&#xff0c;如果想在图片上添加透明通道&#xff0c;一定不要用 JPG 格式的图片&#xff1b;PNG&#xff1a;既支持3通道RGB图像&#xff0c;也支持4通道RGBA图像&#xff08;红色、绿色、蓝色和透明度&#xff09;&#xff1…

NOSQL之Redis配置及优化

目录 一、关系型数据库 二、非关系型数据库 三、关系型数据库和非关系型数据库区别 1、数据存储方式不同 2、扩展方式不同 3、对事务性的支持不同 四、Redis简介 五、Redis优点 &#xff08;1&#xff09;具有极高的数据读写速度 &#xff08;2&#xff09;支持丰富的…

AI 绘画Stable Diffusion 研究(一)sd整合包v4.2 版本安装说明

部署包作者:秋葉aaaki 免责声明: 本安装包及启动器免费提供 无任何盈利目的 大家好&#xff0c;我是风雨无阻。众所周知&#xff0c;StableDiffusion 是非常强大的AI绘图工具&#xff0c;需要详细了解StableDiffusion的朋友&#xff0c;可查看我之前的这篇文章&#xff1a; 最…

9条建议告诉你如何正确处理PCB设计布线

一、关于PCB布线线宽 1、布线首先应满足工厂加工能力&#xff0c;首先向客户确认生产厂家&#xff0c;确认其生产能力&#xff0c;如图1所示。如客户无要求&#xff0c;线宽参考阻抗设计模板。 图1 PCB板厂线宽要求 2、阻抗模板&#xff0c;根据客户提供的板厚及层数要求&…

页面生成图片或PDF node-egg

没有特别的幸运&#xff0c;那么就特别的努力&#xff01;&#xff01;&#xff01; 中间件&#xff1a;页面生成图片 node-egg 涉及到技术node egg Puppeteer 解决文书智能生成多样化先看效果环境准备初始化项目 目录结构核心代码 完整代码https://gitee.com/hammer1010_ad…

[论文笔记] CLRerNet: Improving Confidence of Lane Detection with LaneIoU

Honda, Hiroto, and Yusuke Uchida. “CLRerNet: Improving Confidence of Lane Detection with LaneIoU.” arXiv preprint arXiv:2305.08366 (2023). 2023.05 出的一篇车道线检测的文章, 效果在CULane, CurveLanes SOTA 文章目录 简介LaneIoULineIoU存在问题为什么使用LaneIo…

06. 管理Docker容器数据

目录 1、前言 2、Docker实现数据管理的方式 2.1、数据卷&#xff08;Data Volumes&#xff09; 2.2、数据卷容器&#xff08;Data Volume Containers&#xff09; 3、简单示例 3.1、数据卷示例 3.2、数据卷容器示例 1、前言 在生产环境中使用 Docker&#xff0c;一方面…

记一次sql注入分析与绕过【一】

下面是来自今天的项目&#xff0c;简单记录一下 手工注入 加单引号sql报错 sql语句如下&#xff0c;可见参数id原本未被引号包裹 SELECT DISTINCT u.* FROM t_user u WHERE u.name like %1% and u.account like %1% and u.state ? order by id desc limit 0,20 多方尝试…

回归预测 | MATLAB实现GRNN广义回归神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GRNN广义回归神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现GRNN广义回归神经网络多输入单输出回归预测(多指标,多图)效果一览基本介绍程序设计参考资料效果一览 基本介绍 MATLAB实现GRNN广义回归神经网络多输入单输出回归…

Android 面试题 应用程序结构 九

&#x1f525; 核心应用程序 Activity五个状态&#x1f525; Starting-> running-> paused-> stopped-> killed 启动状态&#xff08;Starting&#xff09;&#xff1a;Activity的启动状态很短暂&#xff0c;当Activity启动后便会进入运行状态&#xff08;Running…

HTTP协议+GET/POST区别

1. web开发流程 &#xff08;1&#xff09; HTML、CSS、JS、图片等资源通过浏览器进行整合&#xff0c;最终渲染出所需画面。 &#xff08;2&#xff09;浏览器对Web服务器进行资源请求 浏览器通过url请求资源。【HTTP协议、URL&#xff1a;确定唯一的一个资源】 浏览器请求…

【Linux】进程轻松入门

目录 一&#xff0c; 冯* 诺依曼体系结构 1&#xff0c;存储结构 ​编辑 二&#xff0c; 操作系统 1&#xff0c;概念 2&#xff0c;设计OS的目的 3&#xff0c;定位 4&#xff0c;如何理解 "管理" 5&#xff0c; 总结 三&#xff0c;进程 1. 概念 那么…

保姆级秋招教程之简历篇

大家好&#xff0c;我是千寻哥&#xff0c;个人简历在程序员求职过程中扮演着至关重要的角色。 今天我将详细给大家介绍一下写简历的必备要素和布局&#xff0c;同时强调应避免的“坑”&#xff01; 希望能通过这些技巧&#xff0c;能帮助程序员打造一份出色的简历&#xff0c;…

Java代码连接RabbitMQ服务器

目录 1.添加依赖 2.生产者代码 3.消费者代码 4.效果 1.发送消息 2.消费消息 5.注意 1.添加依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.12.0</version></dependenc…