Redis 主从集群 哨兵原理

news2024/11/26 2:29:43

一. Redis 主从集群

1.1 基本概念

  • 主从架构:Redis主从集群采用“一主多从”的架构模式,其中主节点(Master)负责处理客户端的读写请求,而从节点(Slave)则负责处理读请求。这种读写分离的设计使得Redis能够充分利用多核CPU的优势,提高整体的读写性能。
  • 数据同步:主节点会将写操作的数据同步到从节点,保证数据的一致性。当主节点出现故障时,可以从从节点中选取一个作为新的主节点,继续提供服务,实现故障转移。

1.2 搭建主从集群

单节点 Redis 的并发能力是有上限的,要进一步提高 Redis 的并发能力,就需要搭建主从集群,实现读写分离。
在这里插入图片描述

我们可以采用Docker-Compose 的方式启动多台Redis 容器 (注意:下面只是启动服务并没有绑定主从关系)

Docker配置文件的基础内容

在这里插入图片描述

建立集群

虽然我们启动了3个 Redis 实例,但是他们并没有形成主从关系。我们需要通过命令配置主从关系:

salveof <masterip> <masterport>
replicaof <masterip> <masterport>

有临时和永久两种模式:

  • 永久生效:在 redis.conf 文件中利用 slaveof 命令指定 master 节点
  • 临时生效:直接利用 redis-cli 控制台输入 slaveof 命令,指定 master 节点

1.3 主从同步原理

当主从第一次同步连接或断开重连时,从节点都会发送 psync 请求,尝试数据同步:
在这里插入图片描述

  • replicatonID: 每一个 master 节点都有自己的的唯一 id, 简称 replid
  • offset: repl_backlog 中写入过的数据长度,写操作越多,offset 值越大,主从对 offset 一致代表数据一致。
    在这里插入图片描述

可以从以下几个方面来优化 Redis 主从集群群:

  • 在 master 中配置 repl-diskless-sync yes 启用无磁盘复制,避免全量同步时的磁盘 IO
  • Redis 单节点上的内存占用不要太大,减少 RDB 导致的过多磁盘 IO
  • 适当提高 repl_baklog 的大小,发现 slave 宕机时尽快实现故障恢复,尽可能避免全量同步
  • 限制一个 master 上的 slave 节点数量,如果实在是太多 slave, 则可以采用 主-从-从链式结构,减少 master 压力
    在这里插入图片描述

1.4 总结

简述全量同步和增量同步区别?

  • 全量同步:master 将完整内存数据生成 RDB, 发送 RDB 到 slave
  • 增量同步:slave 提交自己的 offset 到 master, master 获取 repl_baklog 中 slave 的 offset 之后的命令给 slave

什么时候执行全量同步?

  • slave 节点第一次连接 master 节点时
  • slave 节点断开时间太久,repl_baklog 中的 offset 已经被覆盖时

什么时候执行增量同步?

  • slave 节点断开又恢复,并且在 repl_baklog 中能找到 offset 时

二. 哨兵原理

2.1 基本作用

Redis 提供了哨兵 (Senntiel)机制来是实现主从集群的自动故障恢复。哨兵的具体作用如下:

  • 监控:Sentinel 会不断检查您的 master 和 slave 是否按预期工作
  • 自动故障切换: 如果 master 故障,Sentinel 会将一个slave 提升为 master。当故障实例恢复后也以新的 master 为主
  • 通知:当集群发生故障转移时,Sentinel 将最新节点角色信息推送给 Redis 客户端。
    在这里插入图片描述

2.2 服务状态监控

Sentinel 基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送 ping 命令:

  • 主观下线:如果某 sentinel 节点发现某实例未在规定时间响应,则认为该实例主观下线
  • 客观下线:如果超过指定数量 (quorum) 的 sentinel 都认为该实例主观下线,则该实例客观下线。 quorum 值最好超过Sentinel 实例数量的一半。
    在这里插入图片描述

选举新的 master

一旦发现 master 故障,sentinel 需要在 slave 中选择一个 作为 新的 master, 选择的依据是这样:

  • 首先会判断 slave 节点与 master 节点断开时间长短,如果超过指定值 (down-after-millseconds * 10) 则会排除该 slave 节点
  • 然后判断 slave 节点的 slave-priority 值,越小优先级越高,如果是0则永不参与 选举
  • 如果 slave-priority 一样,则判断 slave 节点的 offset 值,越大说明数据越新,优先级越高
  • 最后是判断 slave 节点运行 id 大小,越小优先级越高。

如何实现故障转移

当选中其中一个 slave 为新的 master 后 (例如 slave1), 故障的转移的步骤如下:

  • sentinel 给备选的 slave1 节点发送 slaveof no one 命令,让该节点成为 master
  • sentinel 给所有其他 slave 发送 slaveof 192.168.150.101 7002 命令,让这些 slave 成为新 master 的从节点,开始从新的 master 上同步数据
  • 最后, sentinel 将故障节点标记为 slave,当故障节点恢复后会自动成为新的 master 的 slave 节点
    在这里插入图片描述

2.3 总结

Sentinel 的三个作用是什么?

  • 监控
  • 故障转移
  • 通知

Sentinel 如何判断一个 redis 是否健康?

  • 每隔1秒发送一次ping 命令,如果超过一定时间没有回应则认为是主观下线
  • 如果大多数 sentnel 都认为是主观下线,则判断服务下线 (客观下线)

故障转移步骤有哪些?

  • 首先选定一个 slave 作为 新的 master, 执行 slaveof no one
  • 然后让所有节点都执行 slaveof 新 master
  • 修改故障节点,执行slaveof 新 master

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytest 读取excel文件参数化应用

本文是基于Pytest框架&#xff0c;读取excel中的文件&#xff0c;传入页面表单中&#xff0c;并做相应的断言实现。 1、编辑媒体需求 首先明确一下需求&#xff0c;我们需要对媒体的表单数据进行编辑&#xff0c;步骤如下&#xff1a; 具体表单如下图所示 1、登录 2、点击我…

618洗地机全网热门推荐,跟着买错不了

步入酷热夏天&#xff0c;家中的清洁工作也迎来了新的挑战。天气炎热&#xff0c;细菌、异味滋生的困扰让日常打扫变得不再轻松&#xff0c;这时一台高性能的洗地机就成了提升生活品质的必备良品。不同于洗地机的技术与类别繁多&#xff0c;洗地机虽原理不复杂&#xff0c;但在…

堆栈溢出的攻击 -fno-stack-protector stack smash 检测

在程序返回的一条语句堆栈项目处&#xff0c;用新函数的起始地址覆盖&#xff0c;将会跳转到执行新函数。 现在系统对这个行为做了判断&#xff0c;已经无法实施这类攻击或技巧。 1&#xff0c;测试代码 #include <stdio.h> void cc() {printf("I am cc( )\n"…

【AI+编程】工作日常场景随时可以AI编程,记一个问答SQL快速导出数据日常示例

今天有个场景&#xff0c;我们有个老项目&#xff0c;由于历史原因差不多1年多没使用了&#xff0c;恰巧客户紧急情况要使用。因为当时没有需求&#xff0c;所以V1.0上线后 就没做更新。 需求很简单&#xff1a;我们假定 项目问题表、客户表、问题答案表&#xff0c; 实时查询…

VisionOS的未来愿景:苹果VisionPro创业者的愿望清单

随着苹果公司在增强现实(AR)领域的不断探索,VisionPro作为其前沿产品,已经开始展现出改变我们与数字世界互动方式的潜力。作为一名VisionPro创业者,对未来VisionOS的更新充满了期待,并提出了一系列愿望清单,这些愿望不仅代表了个人的需求,也反映了用户社区对苹果AR生态的…

【ETAS CP AUTOSAR基础软件】DET、Bfx、CRC、ComStack、rba_ArxmlGen模块详解

文章包含了AUTOSAR基础软件&#xff08;BSW&#xff09;中DET、Bfx、CRC、ComStack、rba_ArxmlGen模块相关的内容详解。本文从AUTOSAR规范解析&#xff0c;ISOLAR-AB配置以及模块相关代码分析三个维度来帮读者清晰的认识和了解DET、Bfx、CRC、ComStack、rba_ArxmlGen。文中涉及…

logTrick

贴一下灵神的题解里面的解释~ 就是一种优化策略&#xff0c;logtrick class Solution { public:int minimumDifference(vector<int>& nums, int k) {int res 0x3f3f3f3f;int n nums.size();for(int i0;i<n;i){res min(res,abs(nums[i]-k));for(int j i-1;j&g…

2024年6月15日 (周六) 叶子游戏新闻

期刊杂志: 聚合读者、意林、知音、故事会、花火以及国内各大知名报纸电子版&#xff0c;无需付费即可观看各种免费资源 中医自学宝典: 集合了中医医案&#xff0c;医经&#xff0c;方剂 药材知识的app&#xff0c;更方便的免费学习中医知识 《赛博朋克2077》被取消DLC泄露&…

20240615在WIN11下的串口调试助手的下载安装以及使用

20240615在WIN11下的串口调试助手的下载安装以及使用 2024/6/15 18:06 百度&#xff1a;串口调试助手 blob:https://apps.microsoft.com/df934d29-fd7a-4873-bb6b-a4ab5a7934c9 串口调试助手 Installer.exe 收发的LOG&#xff1a; rootok3588:/# ./uart_test /dev/ttyS0 11520…

springboot+vue+mybatis家电系统+PPT+论文+讲解+售后

随着信息互联网购物的飞速发展&#xff0c;一般企业都去创建属于自己的电商平台以及购物管理系统。本文介绍了家电销售系统的开发全过程。通过分析企业对于家电销售系统的需求&#xff0c;创建了一个计算机管理家电销售系统的方案。文章介绍了家电销售系统的系统分析部分&#…

cs与msf权限传递,以及mimikatz抓取明文密码

cs与msf权限传递&#xff0c;以及mimikatz抓取win10明文密码 1、环境准备2、Cobalt Strike ------> MSF2.1 Cobalt Strike拿权限2.2 将CS权限传递给msf 3、MSF ------> Cobalt Strike3.1 msf拿权限3.2 将msf权限传递给CS 4、使用mimikatz抓取明文密码 1、环境准备 攻击&…

【Apache Doris】Compaction 原理 | 实践全析

【Apache Doris】Compaction 原理 | 实践全析 一、Compaction 前文概要二、Compaction 版本策略三、Compaction 类型说明四、Compaction 工程实现五、Compaction 生产实践 作者 &#xff5c; 俞剑波 一、Compaction 前文概要 LSM-Tree 简介 LSM-Tree&#xff08; Log Structu…

Three.js做了一个网页版的我的世界

前言 笔者在前一阵子接触到 Three.js 后, 发现了它能为前端 3D 可视化 / 动画 / 游戏方向带来的无限可能, 正好最近在与朋友重温我的世界, 便有了用 Three.js 来仿制 MineCraft 的想法, 正好也可以通过一个有趣的项目来学习一下前端 3D 领域 介绍 游戏介绍 相信大家对我的世…

Swift开发——循环执行方式

本文将介绍 Swift 语言的循环执行方式 01、循环执行方式 在Swift语言中,主要有两种循环执行控制方式: for-in结构和while结构。while结构又细分为当型while结构和直到型while结构,后者称为repeat-while结构。下面首先介绍for-in结构。 循环控制方式for-in结构可用于区间中的…

推荐这两款非常良心的录屏和文字转语音工具,很是让人心动,不要错过

VPot FREE 吾爱大神制作的文字转音频工具&#xff0c;免费使用。 支持英语、韩语、法语、日语等语言&#xff0c;还是支持男声、女声和儿童声音。 支持将以导入文本的格式转换成音频&#xff0c;并保存为MP3、WAV等常见的音频格式。 VPot FREE提供智能断句的功能&#xff0…

深度学习(八)——神经网络:卷积层

一、卷积层Convolution Layers函数简介 官网网址&#xff1a;torch.nn.functional — PyTorch 2.0 documentation 由于是图像处理&#xff0c;所以主要介绍Conv2d。 class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, b…

Linux host映射 设置主机名并通过主机名找到指定系统

一、windows ping linux 1.windows进入到 C:\Windows\System32\drivers\etc\hosts 内&#xff0c;使用edit with notepad打开hosts文件&#xff0c;在下面添加需要寻找的ip以及其主机名。该ip以及主机名即linux的一致。需要查看linux主机名的在终端使用 hostname进行查看&#…

ARP协议相关

把ip地址解析成mac地址这里的mac地址就是路由器的mac地址 免费ARP 源ip和目的ip都是一样的&#xff0c;那怎么让其他人更新arp表呢&#xff1f;&#xff1f; 是因为目标mac是全f&#xff0c;是一个广播报文 如果冲突就是ip一样但是mac又不一样 代理ARP pc1和pc4是在同一个子网…

MySQL----慢查询日志

慢日志 MySQL可以设置慢查询日志&#xff0c;当SQL执行的时间超过我们设定的时间&#xff0c;那么这些SQL就会被记录在慢查询日志当中&#xff0c;然后我们通过查看日志&#xff0c;用explain分析这些SQL的执行计划&#xff0c;来判定为什么效率低下。 查看相关信息 show va…

计算机体系结构重点学习(一)

从外部I/O与上层应用交互的整体软硬件过程 上层应用发出I/O请求&#xff1a;上层应用程序&#xff0c;如一个文本编辑器、网络浏览器或者任何软件应用&#xff0c;需要读取或写入数据时&#xff0c;会通过调用操作系统提供的API&#xff08;如文件操作API、网络操作API等&…