redis 高可用及哨兵模式 @by_TWJ

news/2025/1/15 21:33:07/

目录

  • 1. 高可用
  • 2. redis 哨兵模式
  • 3. 图文的方式让我们读懂这几个算法
    • 3.1. Raft算法 - 图文
    • 3.2. Paxos算法 - 图文
    • 3.3. 区别:

1. 高可用

在 Redis 中,实现 高可用 的技术主要包括 持久化、复制、哨兵 和 集群,下面简单说明它们的作用,以及解决了什么样的问题:

  • 持久化:持久化是 最简单的 高可用方法。它的主要作用是 数据备份,即将数据存储在 硬盘,保证数据不会因进程退出而丢失。
  • 复制:复制是高可用 Redis 的基础,哨兵 和 集群 都是在 复制基础 上实现高可用的。复制主要实现了数据的多机备份以及对于读操作的负载均衡和简单的故障恢复。缺陷是故障恢复无法自动化、写操作无法负载均衡、存储能力受到单机的限制。
  • 哨兵:在复制的基础上,哨兵实现了 自动化 的 故障恢复。缺陷是 写操作 无法 负载均衡,存储能力 受到 单机 的限制。
  • 集群:通过集群,Redis 解决了 写操作 无法 负载均衡 以及 存储能力 受到 单机限制 的问题,实现了较为 完善 的 高可用方案。

redis__12">2. redis 哨兵模式

介绍:哨兵模式是为了解决服务器故障。
功能:Redis 哨兵模式是指在 Redis 集群中,有一组专门的进程(即哨兵进程)负责监控主节点和从节点的状态,并在发现故障时自动进行故障转移,以保证 Redis 集群的高可用性。

是否默认开启:Redis并没有默认开启哨兵模式,需要手动配置哨兵节点,并通过哨兵节点监控Redis主从节点的健康状态。

哨兵模式三大任务:监控、提醒、自动故障迁移

解决办法:raft算法(基于领导者的一致性算法)、Paxos算法(基于提案的一致性算法)

  1. raft算法(基于领导者的一致性算法):角色分为:领导者、候选者、跟随者
    初始化什么时候变成候选者 - 集群启动时,所有的节点都是跟随者,没有领导者。每个节点都有一个选举超时时间,随机在150ms到300ms之间,如果在超时时间内没有收到领导者的心跳包,就会转变为候选者,开始发起选举。
    发起选举发送选举时,发送什么到其他候选者 - 候选者会增加自己的选举轮次(term),并向其他节点发送选举请求,包含自己的选举轮次和标识。同时,候选者会给自己投一票,并重置自己的选举超时时间。
    投票是否给这个候选者投票 - 跟随者收到选举请求后,会比较自己的选举轮次和候选者的选举轮次,如果自己的选举轮次更大,或者已经给其他候选者投过票,就会拒绝投票;否则,就会同意投票,并重置自己的选举超时时间。
    统计票数统计有多少人给你投票 - 候选者收到投票回复后,会统计自己的票数,如果超过半数,就会成为领导者,并向其他节点发送心跳包,通知自己的领导地位;如果没有超过半数,就会继续等待投票回复,直到超时或者收到心跳包。
    维持领导者领导者诞生,并向其他发送心跳包 - 领导者会周期性地向所有跟随者发送心跳包,维持自己的领导地位,并检查跟随者的状态。如果领导者发现自己的选举轮次小于某个跟随者的选举轮次,就会认为自己的领导地位已经过期,转变为跟随者,重新开始选举超时计时。
    处理冲突故障导致多个领导者出现 - 如果集群中出现网络分区或者节点故障,可能会导致多个候选者同时发起选举,造成选举冲突。Raft算法通过随机化选举超时时间,使得冲突的概率降低。同时,如果一个候选者收到了另一个候选者的选举请求,它会拒绝投票,并重置自己的选举超时时间,避免无效的选举。
    最终,只有一个候选者能够获得多数的票数,成为领导者,结束选举。

  2. Paxos算法(基于提案的一致性算法):角色分为:提议者和接受者
    准备阶段生成提案编号 - 提议者会生成一个唯一的提案编号(n),并向所有的接受者发送准备请求,包含提案编号(n)。
    承诺阶段承诺不再接受任何编号小于n的提案 - 接受者收到准备请求后,会比较自己已经接受过的最大提案编号(n’)和当前提案编号(n),如果n’ >= n,就会拒绝准备请求;否则,就会承诺不再接受任何编号小于n的提案,并回复提议者,包含自己已经接受过的最大提案编号(n’)和对应的从节点标识(v’)。
    接受阶段接收到所有提案,然后统计,第一次确认 - 提议者收到半数以上的接受者的回复后,会从中选择最大的提案编号(n’)和对应的从节点标识(v’),如果n’为0,就说明没有接受者接受过任何提案,此时提议者可以自由选择一个从节点标识(v)。然后,提议者会向所有的接受者发送接受请求,包含提案编号(n)和从节点标识(v)。
    确认阶段统计后,向其他接收者第二次确认,再也没有新的提案了(二阶段确认) - 接受者收到接受请求后,会比较自己已经承诺过的最小提案编号(n’‘)和当前提案编号(n),如果n’’ > n,就会拒绝接受请求;否则,就会接受提案,并回复提议者,包含提案编号(n)和从节点标识(v)。
    完成阶段提升为主节点 - 提议者收到半数以上的接受者的回复后,就会认为提案达成一致,即从节点标识(v)被选为新的主节点,并通知所有的接受者。

采用二阶段确认的方式来达成共识的

参考:Redis哨兵模式中的选举算法:Raft vs Paxos
参考:Paxos算法
参考:redis默认开启哨兵模式的吗

3. 图文的方式让我们读懂这几个算法

3.1. Raft算法 - 图文

在这里插入图片描述

3.2. Paxos算法 - 图文

在这里插入图片描述

3.3. 区别:

确认阶段不同:

  • Raft算法:判断是否投过票
  • Paxos算法:不接受任何小于该编号的提案,而且还有第二阶段确认

相同:

  • 都是半数以上确认,都需要确认当前选举轮次/提案编号是最新的。

http://www.ppmy.cn/news/1465973.html

相关文章

Leetcode 3169. Count Days Without Meetings

Leetcode 3169. Count Days Without Meetings 1. 解题思路2. 代码实现 题目链接:3169. Count Days Without Meetings 1. 解题思路 这一题的话我们只需要先对meeting的时间进行一下排序,然后不断更新当前连续开会的时间即可。当某一个会议开始时&#…

英伟达A100算力卡性能及应用

英伟达A100是一款高性能计算卡,基于英伟达Ampere架构,专为数据中心和高性能计算领域设计。以下是关于A100的性能参数及应用的详细介绍: 性能参数 架构与制程: 架构:Ampere制程:7纳米核心与频率&#xff1…

微信小程序如何使用地图

微信小程序使用地图功能时&#xff0c;主要涉及到地图组件的引入、配置、以及相关的API调用。以下是一个详细的使用指南&#xff1a; 1. 引入地图组件 在微信小程序的.wxml文件中&#xff0c;通过<map>标签引入地图组件。你可以设置地图的经纬度、缩放级别、控件等属性…

音视频开发—FFmpeg播放YUV文件,YUV转换为JPEG操作

文章目录 1.使用命令行播放YUV数据1.1命令解析1.2参数说明 2.使用C语言实现将YUV数据转为JPEG图片格式2.1需求分析2.2读取YUV源文件2.3将YUV数据封装为AVFrame2.4将NV12 转换为YUV420平面格式2.5初始化MJPEG编码器2.6将YUV420P编码为JPEG2.7将编码数据写入图片文件2.8完整代码 …

中国历年肥料进口数量统计报告

数据来源于国家统计局&#xff0c;为1991年到2021年我国每年肥料进口数量统计。 2021年&#xff0c;我国进口肥料909万吨&#xff0c;比上年减少151万吨。 数据统计单位为&#xff1a;万吨 数据说明&#xff1a; 数据来源于国家统计局&#xff0c;为海关进出口统计数 我国肥料…

Nature Communications|柔性自驱动仿生眼(离子凝胶/仿生眼/柔性电子)

2024年4月10日,黄维(Wei Huang)院士、南京工业大学刘举庆(Juqing Liu)教授和刘正东(Zhengdong Liu)副教授课题组,在《Nature Communications》上发布了一篇题为“A bionic self-driven retinomorphic eye with ionogel photosynaptic retina”的论文,罗旭(Xu Luo)、陈晨(…

基于SSM前后端分离版本的论坛系统-自动化测试

目录 前言 一、测试环境 二、环境部署 三、测试用例 四、执行测试 4.1、公共类设计 创建浏览器驱动对象 测试套件 释放驱动类 4.2、功能测试 注册页面 登录页面 版块 帖子 用户个人中心页 站内信 4.3、界面测试 注册页面 登录页面 版块 帖子 用户个人中心页…

Laravel 富文本内容

Laravel 获取富文本的纯文本内容-CSDN博客 Laravel 富文本内容里面的图片添加前缀URL-CSDN博客 Laravel 富文本图片的style样式删除-CSDN博客. 富文本字体font-famly删除 $data preg_replace(/(<[^>])style["\][^"\]*font-family:[^"\]*["\]([^&…