Redis 哨兵集群如何实现高可用?(1)

news/2024/7/27 7:25:35/文章来源:https://blog.csdn.net/weixin_55682785/article/details/136611278

目录

1.哨兵的介绍

2.哨兵的核心知识

3.Redis 哨兵主备切换的数据丢失问题

(1)异步复制导致的数据丢失

(2)脑裂导致的数据丢失

4.数据丢失问题的解决方案

(1)减少异步复制数据的丢失

(2)减少脑裂的数据丢失

5.sdown 和 odown 转换机制        ·sdown 是主观宕机,就一个哨兵如果自己觉得一个 master 宕机了,那么就是主观宕机。       

6.哨兵集群的自动发现机制


1.哨兵的介绍

sentinel,中文名是哨兵。哨兵是 Redis 集群架构中非常重要的一个组件,主要有以下功能:
        ·集群监控:负责监控 Redis master 和 slave 进程是否正常工作。        
        ·消息通知:如果某个 Redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。

        ·故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。
        ·配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。
        哨兵用于实现 Redis 集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。
        ·故障转移时,判断一个 master node 是否宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题。
        ·即使部分哨兵节点挂掉了,哨兵集群还是能正常工作的,因为如果一个作为高可用机制重要组成部分的故障转移系统本身是单点的,那就很坑爹了。

2.哨兵的核心知识

        ·哨兵至少需要3个实例,来保证自己的健壮性。
        ·哨兵+ Redis 主从的部署架构,是不保证数据零丢失的,只能保证 Redis 集群的高可用性。

        ·对于哨兵+Redis 主从这种复杂的部署架构,尽量在测试环境和生产环境,都进行充足的测试和演练。
        哨兵集群必须部署2个以上节点,如果哨兵集群仅仅部署了2个哨兵实例,quorum=1。

        配置 quorum=1 ,如果 master 宕机, s1和 s2 中只要有1个哨兵认为 master 宕机了,就可以进行切换,同时 s1和 s2 会选举出一个哨兵来执行故障转移。但是同时这个时候,需要majority,也就是大多数哨兵都是运行的。

        如果此时仅仅是 M1进程宕机了,哨兵 s1 正常运行,那么故障转移是 OK 的。但是如果是整个M1 和 S1 运行的机器宕机了,那么哨兵只有1个,此时就没有 majority 来允许执行故障转移,虽然另外一台机器上还有一个 R1,但是故障转移不会执行。
        经典的3节点哨兵集群是这样的: 

        配置 quorum=2 ,如果 M1所在机器宕机了,那么三个哨兵还剩下2个,S2 和 S3 可以一致认为 master 宕机了,然后选举出一个来执行故障转移,同时3个哨兵的 majority是 2,所以还剩下的2个哨兵运行着,就可以允许执行故障转移。

3.Redis 哨兵主备切换的数据丢失问题

导致数据丢失的两种情况(主备切换的过程,可能会导致数据丢失)

(1)异步复制导致的数据丢失

        因为 master->slave 的复制是异步的,所以可能有部分数据还没复制到 slave,master 就宕机了,此时这部分数据就丢失了。

(2)脑裂导致的数据丢失

        脑裂,也就是说,某个 master 所在机器突然脱离了正常的网络,跟其他 slave 机器不能连接,但是实际上 master 还运行着。此时哨兵可能就会认为 master 宕机了,然后开启选举,将其他 slave 切换成了 master。这个时候,集群里就会有两个 master ,也就是所谓的脑裂。
        此时虽然某个 slave 被切换成了 master,但是可能 client 还没来得及切换到新的 master,还继续向旧 master 写数据。因此旧 master 再次恢复的时候,会被作为一个 slave 挂到新的 master上去,自己的数据会清空,重新从新的 master 复制数据。而新的 master 并没有后来 client 写入的数据,因此,这部分数据也就丢失了。 

4.数据丢失问题的解决方案

进行如下配置:

min-slaves-to-write 1
min-slaves-max-lag 10

        表示,要求至少有1个 slave,数据复制和同步的延迟不能超过 10 秒。
        如果说一旦所有的 slave,数据复制和同步的延迟都超过了 10 秒钟,那么这个时候,master 就不会再接收任何请求了。

(1)减少异步复制数据的丢失

        有了 min-slaves-max-lag 这个配置,就可以确保说,一旦 slave 复制数据和 ack 延时太长就认为可能 master 宕机后损失的数据太多了,那么就拒绝写请求,”这样可以把 master 宕机时由于部分数据未同步到 slave 导致的数据丢失降低的可控范围内。


(2)减少脑裂的数据丢失

        如果一个 master 出现了脑裂,跟其他 slave 丢了连接,那么上面两个配置可以确保说,如果不能继续给指定数量的 slave 发送数据,而且 slave 超过 10 秒没有给自己 ack 消息,那么就直接拒绝客户端的写请求。因此在脑裂场景下,最多就丢失10秒的数据。

5.sdown 和 odown 转换机制
        ·sdown 是主观宕机,就一个哨兵如果自己觉得一个 master 宕机了,那么就是主观宕机。       

        ·odown 是客观宕机,如果 quorum 数量的哨兵都觉得一个 master 宕机了,那么就是客观宕机。
        sdown 达成的条件很简单,如果一个哨兵 ping一个master,超过了 is-master-down-after-milliseconds 指定的毫秒数之后,就主观认为 master 宕机了;如果一个哨兵在指定时间内,收到了 quorum 数量的其它哨兵也认为那个 master 是 sdown 的,那么就认为是 odown 了。

6.哨兵集群的自动发现机制

        哨兵互相之间的发现,是通过Redis的 pub/sub 系统实现的,每个哨兵都会往_sentinel--:hello 这个 channel 里发送一个消息,这时候所有其他哨兵都可以消费到这个消息,并感知到其他的哨兵的存在。
        每隔两秒钟,每个哨兵都会往自己监控的某个 master+slaves 对应的 --sentinel--:hellochannel里发送一个消息,内容是自己的 host、ip 和 runid 还有对这个 master 的监控配置
        每个哨兵也会去监听自己监控的每个master+slaves 对应的 --sentinel--:hello channel,然后去感知到同样在监听这个 master+slaves 的其他哨兵的存在。
        每个哨兵还会跟其他哨兵交换对master的监控配置,互相进行监控配置的同步,

(ps:一个点赞一份爱,点个关注不迷路!)

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

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

相关文章

6、设计模式之适配器模式(Adapter)

一、什么是适配器模式 适配器模式是一种结构型设计模式,它允许将不兼容的对象转换成可兼容的接口。主要目的是解决在不改变现有代码的情况下,使不兼容的接口之间能够正常工作,通过创建一个中间转换的适配器来将一个对象转换成我们所需要的接口…

地理数据 vs. 3D数据

在表示我们周围的物理世界时,地理空间数据和 3D 建筑数据是两个最常见的选择。 他们在各个行业和项目中发挥着至关重要的作用。 从构建数字孪生到可视化城市景观和创建沉浸式应用程序。 尽管地理空间和 3D 建筑数据有相似之处,但它们不可互换。 虽然地…

关于分布式微服务数据源加密配置以及取巧方案(含自定义加密配置)

文章目录 前言Spring Cloud 第一代1、创建config server项目并加入加解密key2、启动项目,进行数据加密3、实际项目中的测试server Spring Cloud Alibaba低版本架构不支持,取巧实现无加密配置,联调环境问题加密数据源配置原理探究自定义加密解…

Redis底层数据结构之Hash

文章目录 1. Redis底层hash编码格式2. Redis 6源码分析3. Redis 7源码分析 1. Redis底层hash编码格式 在redis6中hash的编码格式分别是ziplist(压缩列表)和hashtable,但在redis7中hash的编码格式变为了listpack(紧凑列表&#xf…

Prometheus 系统监控

文章目录 1.Linux1.1.Node exporter1.2.安装部署 2.Windows2.1.windows_exporter2.2.安装部署 3.Docker3.1.cadvisor3.2.安装部署 4.Nginx4.1.nginx-vts-exporter4.2.安装部署 5.Redis5.1.redis_exporter5.2.安装部署 6.RabbitMQ6.1.rabbitmq_exporter6.2.安装部署 7.PostgreSQ…

三星泄露微软 Copilot 新功能:用自然语言操控各种功能

3 月 11 日消息,微软计划本月晚些时候发布新款 Surface 电脑和适用于 Windows 11 的 Copilot 新功能,但三星似乎等不及了,在其即将推出的 Galaxy Book4 系列产品宣传材料中泄露了一些即将到来的 Copilot 功能。 三星官网上发布的图片证实了此…

EasyExcel注解实现导出动态下拉框字符超出255

背景 项目需求要把某些用户数据通过下拉框的形式带出,供用户手动选择与自己相关的数据,从而实现excel的数据权限。由于字段有两个,后面可能更多,方便起见,使用自定义注解的形式,动态配置,并且动…

CSS 之 iconfont 字体图标的使用

iconfont 字体图标的常见使用场景: 如小米商城底部的导航栏 特点是:方便更改大小和颜色,可以使用字体的属性对其样式进行修改,从而更加轻易地实现图标和文字样式的同步修改。 第一步:在浏览器中搜索 https://www.i…

Visual Basic6.0零基础教学(3)—焦点概念和深入学习属性

焦点概念和深入学习属性 文章目录 焦点概念和深入学习属性前言一、什么是焦点(Focus)?焦点的特点 二、窗体属性一、窗体的结构二、窗体的属性三、事件四、方法 一.控件属性一. 标签 Label二.文本框 TextBox2.常用事件 三.命令按钮事件 总结 前言 今天我们来继续学习VB中的属性…

C编程基础四十分笔记

都是一些基础的C语言 一 输入一个整数,计算这个整数有几位二 编写程序计算一个分布函数三 输入一个字符串,再随便输入一个字母,判断这个字母出现几次四 求 1到10的阶乘之和五 求一个球体体积六 写一个链表,存1,2&#…

javaEE4(预习第3章,做课后习题1:简答)

1、简答 (1)Jsp页面翻译成的Servlet类的源文件在哪里可以找到?servlet实例是每次请求页面都会创建一个,还是只有一个(单例)? tomcat工作目录下的work目录下 只有一个 页面中定义变量加和不加…

一台服务器部署两个独立的mysql实例

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…

c++中的if语句、switch语句、std::map以及多态比较

实现多分支逻辑的场景通常可以使用以下几种技术手段可以选择 if-else语句switch语句三元运算符(只能实现2个分支的场景,本文不做讨论)映射表(std::map、数组或std::vector)多态(策略模式为例) …

Docker自建蜜罐系统【失陷检测、外网威胁感知、威胁情报】

项目地址: https://hfish.net Hfish是一款基于Docker的网络钓鱼平台,它能够帮助安全团队模拟各种网络钓鱼攻击,以测试和提高组织的安全防御能力。 Hfish的优点 为什么选择Hfish? 蜜罐通常被定义为具有轻量级检测能力、低误报率…

ELK 安装部署

文章目录 1.日志收集规划2.Elasticsearch部署2.1.Elasticsearch安装2.2.Elasticsearch-head安装2.3.Elasticsearch设置分片数2.4.elasticsearch健康检查 3.Kibana部署4.Logstash部署5.Filebeat部署 开源中间件 # Elastic Stackhttps://iothub.org.cn/docs/middleware/ https:/…

如何把网站的http改成https?

想把网站从不安全的HTTP换成安全的HTTPS?来瞧瞧下面几步操作: 1.挑个SSL证书: - 根据你的网站情况(比如就一个域名、多个域名还是啥域名都得管),找一款适合的SSL证书,有免费的DV(验…

Ypay源支付6.9无授权聚合免签系统可运营源码

YPay是一款专为个人站长设计的聚合免签系统,YPay基于高性能的ThinkPHP 6.1.2 Layui PearAdmin架构,提供了实时监控和管理的功能,让您随时随地掌握系统运营情况。 说明 Ypay源支付6.9无授权聚合免签系统可运营源码 已搭建测试无加密版本…

STM32平替GD32有多方便

众所周知, GD32一直模仿STM32,从未被超越。 我最近公司使用的GD32E230C6T6 这款芯片有48个引脚。 属于小容量的芯片。 我有一个用STM32写的代码,之前是用的 STM32F103CB 这款芯片是中容量的。 不过在keil中,只需要这两步,就能使用原来的逻辑,几乎不用修改代码。 1. …

【典】dp背包问题(树求方案)

回顾在acw上做过的题 有依赖的背包问题 这一题是与树相关的dp问题,根据父节点与子节点的相连关系,我们用dfs来处理根节点与子树的迭代更新,把每一颗最小单位子树看成一个物品,然后就有点像多重背包(因为有体积限制&…

大宗电子盘商品撮合制交易软件PHP后台

大宗电子盘商品撮合制交易软件是一种用于大宗商品电子交易的系统,其中撮合制是交易机制的核心部分,它负责将买卖双方的订单进行匹配并完成交易。在开发这类软件的PHP后台时,需要考虑以下几个关键方面: 系统架构设计: …