【Java面试题】Redis中篇(高可用:主从复制、哨兵、集群)

文章目录

  • 高可用
    • 14.Redis如何保证高可用?
    • 15.Redis的主从复制?
    • 16.Redis主从有几种常见的拓扑结构?
    • 17.Redis的主从复制原理了解吗?
    • 18.说说主从数据同步的方式?
    • 19.主从复制存在的问题?
    • 20.Redis Sentinel(哨兵)了解吗?
    • 21.Redis Sentinel(哨兵)的实现原理?
    • 22.Redis集群了解吗?

高可用

14.Redis如何保证高可用?

Redis 保证高可用主要有三种方式:主从、哨兵、集群。

15.Redis的主从复制?

  1. 主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为 主节点(master),后者称为 从节点(slave)
  2. 且数据的复制是 单向 的,只能由主节点到从节点。Redis 主从复制支持 主从同步从从同步 两种,后者是 Redis 后续版本新增的功能,以减轻主节点的同步负担。

Redis主从复制简图

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

16.Redis主从有几种常见的拓扑结构?

  1. Redis 的复制拓扑结构可以支持单层或多层复制关系,根据拓扑复杂性可以分为以下三种:一主一从、一主多从、树状主从结构。

    1. 一主一从结构:一主一从结构是最简单的复制拓扑结构,用于主节点出现宕机时从节点提供故障转移支持

      image-20240329095921273

    2. 一主多从结构(星形拓扑结构):使得应用端可以利用多个从节点实现读写分离。对于读占比较大的场景,可以把读命令发送到从节点来分担主节点压力。

      image-20240329095935427

    3. 树状主从结构(树状拓扑结构):使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下层复制。通过引入复制中间层,可以有效降低主节点负载和需要传送给从节点的数据量。

      image-20240329100006480

17.Redis的主从复制原理了解吗?

  • Redis 主从复制的工作流程大概可以分为如下几步:
    1. 保存主节点(master)信息:这一步只是保存主节点信息,保存主节点的 ip 和 port。
    2. 主从建立连接:从节点(slave)发现新的主节点后,会尝试和主节点建立网络连接。
    3. 发送 ping 命令:连接建立成功后从节点发送 ping 请求进行首次通信,主要是检测主从之间网络套接字是否可用、主节点当前是否可接受处理命令。
    4. 权限验证:如果主节点要求密码验证,从节点必须正确的密码才能通过验证。
    5. 同步数据集:主从复制连接正常通信后,主节点会把持有的数据全部发送给从节点。
    6. 命令持续复制:接下来主节点会持续地把写命令发送给从节点,保证主从数据一致性

18.说说主从数据同步的方式?

  • Redis 在 2.8 及以上版本使用 psync 命令完成主从数据同步,同步过程分为:全量复制和部分复制

  • 全量复制:

    • 一般用于初次复制场景

    • Redis 早期支持的复制功能只有全量复制,它会把主节点全部数据一次性发送给从节点,当数据量较大时,会对主从节点和网络造成很大的开销。

    • 完全运行流程:

      image-20240329101256214

      1. 发送 psync 命令进行数据同步,由于是第一次进行复制,从节点没有复制偏移量和主节点的运行 ID,所以发送 psync-1。
      2. 主节点根据 psync-1 解析出当前为全量复制,回复+FULLRESYNC 响应。
      3. 从节点接收主节点的响应数据保存运行 ID 和偏移量 offset
      4. 主节点执行 bgsave 保存 RDB 文件到本地
      5. 主节点发送 RDB 文件给从节点,从节点把接收的 RDB 文件保存在本地并直接作为从节点的数据文件
      6. 对于从节点开始接收 RDB 快照到接收完成期间,主节点仍然响应读写命令,因此主节点会把这期间写命令数据保存在复制客户端缓冲区内,当从节点加载完 RDB 文件后,主节点再把缓冲区内的数据发送给从节点,保证主从之间数据一致性。
      7. 从节点接收完主节点传送来的全部数据后会清空自身旧数据
      8. 从节点清空数据后开始加载 RDB 文件
      9. 从节点成功加载完 RDB 后,如果当前节点开启了 AOF 持久化功能, 它会立刻做 bgrewriteaof 操作,为了保证全量复制后 AOF 持久化文件立刻可用。
  • 部分复制:部分复制主要是 Redis 针对全量复制的过高开销做出的一种优化措施, 使用 psync{runId}{offset}命令实现。当从节点(slave)正在复制主节点 (master)时,如果出现网络闪断或者命令丢失等异常情况时,从节点会向 主节点要求补发丢失的命令数据,如果主节点的复制积压缓冲区内存在这部分数据则直接发送给从节点,这样就可以保持主从节点复制的一致性。

19.主从复制存在的问题?

第一个问题是 Redis 的高可用问题,第二、三个问题属于 Redis 的分布式问题。

  • 高可用问题:一旦主节点出现故障,需要手动将一个从节点晋升为主节点,同时需要修改应用方的主节点地址,还需要命令其他从节点去复制新的主节点,整个过程都需要人工干预。
  • 分布式问题:主节点的写能力受到单机的限制。
  • 分布式问题:主节点的存储能力受到单机的限制。

20.Redis Sentinel(哨兵)了解吗?

  1. 主从复制存在一个问题,没法完成自动故障转移。所以我们需要一个方案来完成自动故障转移,它就是 Redis Sentinel(哨兵)

  2. Redis Sentinel ,它由两部分组成,哨兵节点和数据节点

    • 哨兵节点: 哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的 Redis 节点,不存储数据,对数据节点进行监控。

    • 数据节点: 主节点和从节点都是数据节点;

      image-20240329101954973

  3. 在复制的基础上,哨兵实现了 自动化的故障恢复 功能,下面是官方对于哨兵功能的描述:

    1. 监控(Monitoring): 哨兵会不断地检查主节点和从节点是否运作正常。
    2. 自动故障转移(Automatic failover):主节点 不能正常工作时,哨兵会开始 自动故障转移操作,它会将失效主节点的其中一个 从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
    3. 配置提供者(Configuration provider): 客户端在初始化时,通过连接哨兵来获得当前 Redis 服务的主节点地址。
    4. 通知(Notification): 哨兵可以将故障转移的结果发送给客户端。

21.Redis Sentinel(哨兵)的实现原理?

  1. 哨兵模式是通过哨兵节点完成对数据节点的监控、下线、故障转移

    image-20240329102848476

  2. 定时监控:三个定时监控任务完成对各个节点发现和监控:

    1. 每隔 10 秒,每个 Sentinel 节点会向主节点和从节点发送 info 命令获取最新的拓扑结构
    2. 每隔 2 秒,每个 Sentinel 节点会向 Redis 数据节点的sentinel:hello 频道上发送该 Sentinel 节点对于主节点的判断以及当前 Sentinel 节点的信息
    3. 每隔 1 秒,每个 Sentinel 节点会向主节点、从节点、其余 Sentinel 节点发送一条 ping 命令做一次心跳检测,来确认这些节点当前是否可达

    image-20240329102940302

  3. 主观下线/客观下线

    • 主观下线:一个哨兵节点认为某个节点有问题
      • 每个 Sentinel 节点会每隔 1 秒对主节点、从节点、其他 Sentinel 节点发送 ping 命令做心跳检测
      • 这些节点超过 down-after-milliseconds 没有进行有效回复,Sentinel 节点就会对该节点做失败判定,这个行为叫做主观下线。
    • 客观下线:超过一定数量的哨兵节点认为主节点有问题。
      • 当 Sentinel 主观下线的节点是主节点时,该 Sentinel 节点会通过 sentinel is- master-down-by-addr 命令向其他 Sentinel 节点询问对主节点的判断
      • 当超过 quorum 个数,Sentinel 节点认为主节点确实有问题,这时该 Sentinel 节点会做出客观下线的决定

    image-20240329103034117

  4. 领导者Sentinel节点选举

    • Sentinel 节点之间会做一个领导者选举的工作
    • 选出一个 Sentinel 节点作为领导者进行故障转移的工作。
    • Redis 使用了 Raft 算法实现领导者选举。
  5. 故障转移

    • 领导者选举出的 Sentinel 节点负责故障转移,过程如下:

      • 在从节点列表中选出一个节点作为新的主节点,这一步是相对复杂一些的一步
      • Sentinel 领导者节点会对第一步选出来的从节点执行 slaveof no one 命令让其成为主节点
      • Sentinel 领导者节点会向剩余的从节点发送命令,让它们成为新主节点的从节点
      • Sentinel 节点集合会将原来的主节点更新为从节点,并保持着对其关注,当其恢复后命令它去复制新的主节点

      image-20240329103721193

22.Redis集群了解吗?

  1. 前面说到了主从复制存在高可用和分布式的问题
  2. 哨兵解决了高可用的问题,而集群就是终极方案,一举解决高可用和分布式问题。

image-20240329103827998

  1. 数据分区 数据分区 (或称数据分片) 是集群最核心的功能。集群将数据分散到多个节点,一方面 突破了 Redis 单机内存大小的限制,存储容量大大增加另一方面 每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力
  2. 高可用 集群支持主从复制和主节点的 自动故障转移 (与哨兵类似),当任一节点发生故障时,集群仍然可以对外提供服务

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/507383.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Swap交易所系统开发流程与区块链交易所系统规划方案

随着区块链技术的迅速发展,交易所在加密货币行业中扮演着至关重要的角色。Swap交易所因其独特的去中心化交易模式备受关注。在本文中,我们将深入探讨Swap交易所系统的开发流程,并详细介绍区块链交易所系统的规划方案,以帮助读者更…

智慧城市数字孪生,综合治理一屏统览

现代城市作为一个复杂系统,牵一发而动全身,城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。城市工作要树立系统思维,从构成城市诸多要素、结构、功能等方面入手,系统推进…

算法沉淀 —— 深度搜索(dfs)

算法沉淀 —— 深度搜索(dfs) 一、计算布尔二叉树的值二、求根节点到叶节点数字之和三、二叉树剪枝四、验证二叉搜索树五、二叉搜索树中第K小的元素 一、计算布尔二叉树的值 【题目链接】:2331. 计算布尔二叉树的值 【题目】: …

Pyhon 大模型常见的微调方式,LLMs常见的Finetune方式;chatglm3微调实战;大模型微调通俗易懂总结

一、 LLMs微调 微调(Fine-tuning)是指在一个已经训练好的神经网络模型基础上,使用额外的数据集或调整超参数,以实现特定任务的训练过程。在微调中,通常会固定预训练模型的大部分参数,只调整最后几层或特定层…

Windows安装TortoiseSVN客户端结合Cpolar实现公网提交文件到本地服务器

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统,它与Apache Subversion(SVN)集成在一起,提供了一个用户友好的界面,方便用…

盲水印脚本安装说明_bwm、_bwmforpy

此工具需要python2/python3 脚本下载地址https://gitcode.com/chishaxie/BlindWaterMark/tree/master?utm_sourcecsdn_blog_hover 直接下载压缩包解压 在python里面添加两个库,python.exe目录上方输入cmd pip install opencv-python python.exe -m pip install …

docker部署实用的运维开发手册

下载镜像 docker pull registry.cn-beijing.aliyuncs.com/wuxingge123/reference:latestdocker-compose部署 vim docker-compose.yml version: 3 services:reference:container_name: referenceimage: registry.cn-beijing.aliyuncs.com/wuxingge123/reference:latestports:…

Gparted工具 初始化磁盘

Gparted工具 初始化磁盘 1、安装 没有此工具请先安装: yum install epel-release yum install gparted yum install yum-utils git gnome-common gcc-c yum-builddep gparted 2、打开Gparted工具,初始化磁盘 使用具有root权限的普通用户打开gparted&…

回溯算法|40.组合总和II

力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& candidates, int target, int sum, int startIndex, vector<bool>& used) {if (sum target) {result.push_back…

OSPF不规则区域以及OSPF的数据库和优化OSPF的LSA

OSPF的不规则区域 远离骨干非骨干区域不连续骨干-----区域水平分割 解决方案&#xff1a; 1.tunnel ---点到点GRE 在合法与非法ABR(在两个区域之间&#xff0c;但没有连到骨干area0)间建立隧道&#xff0c;然后将其宣告于OSPF协议中&#xff1b; 缺点&#xff1a;1、周期和…

Web应急响应

2024年护网将至&#xff0c;最近我将分享一些红蓝对抗的一些技巧&#xff0c;应急响应、信息收集相关的知识概念以及相关技巧。 目录 1. 黑客攻击流程 2. webshell流量特征 1.1.菜刀特征 1.2.冰蝎3.0 &#xff1a; 1.3.冰蝎2.0&#xff1a; 1.4.冰蝎3.11流量特征 1.5.蚁…

cocos使用playable ads adapter打包试玩广告报错RangeError: Invalid string length

前言 最近有做试玩广告的需求&#xff0c;引擎用的cocos&#xff0c;打包使用的playable ads adapter插件。不过最近打包遇到个奇怪的问题&#xff0c;就是通过插件打包报错RangeError: Invalid string length。因为之前也用空包和早期项目测试过都能顺利打包&#xff0c;经过…

数码管时钟--LABVIEW编程

一、程序的前面板 1.获取系统时钟&#xff0c;年月日&#xff0c;时分秒&#xff0c;用14个数码管显示。 2.闹钟设定小时和分钟。 二、程序的后面板 三、程序运行图 四、程序源码 源程序可以在百度网盘自行下载&#xff0c;地址链接见下方。 链接&#xff1a;https://pan.b…

健身运动蓝牙耳机什么牌子好?五大业内顶级优品推荐

在当下这个健身热潮席卷的时代&#xff0c;越来越多的人开始注重运动与健康&#xff0c;而音乐作为运动时的最佳伴侣&#xff0c;无疑为锻炼过程增添了不少乐趣。为了在运动时享受音乐&#xff0c;一款优质的健身运动蓝牙耳机显得尤为重要&#xff0c;市场上各大品牌纷纷推出自…

python对接百度云车牌识别

注册百度智能云&#xff0c;选择产品服务。 https://console.bce.baidu.com/ 每天赠送200次&#xff0c;做开发测试足够了。 在应用列表复制 AppID , API Key ,Secret Key 备用。 SDK下载地址 https://ai.baidu.com/sdk#ocr 下载SDK文件&#xff0c;解压&#xff0c;…

如何在Plesk面板备份网站

本周有一个客户&#xff0c;购买Hostease的Windows虚拟主机&#xff0c;咨询我们的在线客服&#xff0c;询问Windows虚拟主机Plesk面板是否提供备份功能。我们为用户提供教程&#xff0c;用户很快完成了数据备份。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以对您…

差点引爆全球的核弹,深度分析XZ-Utils供应链后门投毒事件

处心积虑的投毒者蛰伏三年多&#xff0c;精心选择对象&#xff0c;通过复杂的攻击手法、专业的技战术&#xff0c;一步步支起一张大网&#xff0c;企图掌控全球主流linux发行版&#xff0c;一旦成功他将可以随意侵入全球绝大多数的服务器&#xff0c;这将是足以引爆全球的核弹危…

AI技术创业:挖掘行业解决方案、智能产品服务及教育培训的无限机遇

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

1 导入图片后 调整图片大小

导入图片 如下图&#xff0c;通过“文件 → 打开”在PS中导入一张图片&#xff0c;但是图片有点小 有三种改变大小的方法 1 只要部分图片&#xff0c;画布大小不变 方式&#xff1a;按住ctrlt&#xff0c;就会出现如图所示的选框 画布大小不变&#xff0c;但是拖动选框&…

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.9-3.11

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第三周&#xff1a;浅层神经网络(Shallow neural networks)3.9 神 经 网 络 的 梯 度 下 降 &#xff08; Gradient descent for neural networks&#xff09;3.10&#xff08;选修&#xff0…