redis哨兵主从不切换_《「面试突击」—Redis篇》-- Redis的主从复制?哨兵机制?...

Redis如何保证高并发,高可用?

高并发:redis的单机吞吐量可以达到几万不是问题,如果想提高redis的读写能力,可以用redis的主从架构,redis天热支持一主多从的准备模式,单主负责写请求多从负责读请求,主从之间异步复制,把主的数据同步到从。

高可用:首先利用redis的主从架构解决redis的单点故障导致的不可用,然后如果使用的是主从架构,那么只需要增加哨兵机制即可,就可以实现,redis主实例宕机,自动会进行主备切换。以此来达到redis的高可用。

你刚才说主从复制,那你能具体聊一下主从复制的原理吗?

e8b8061bdbb44d2e4bd9033085f7ea31.png

在redis主从架构中,master负责接收写请求,写操作成功后返回客户端OK,然后后将数据异步的方式发送给多个slaver进行数据同步,不过从redis 2.8开始,slave node会周期性地确认自己每次复制的数据量。

当启动一个slave node的时候,它会发送一个PSYNC命令给master node。如果slave node是重新连接master node,那么master node仅仅会复制给slave部分缺少的数据; 否则如果是slave node第一次连接master node,那么会触发一次full resynchronization全量复制。

开始full resynchronization的时候,master会启动一个后台线程,开始生成一份RDB快照文件,同时还会将从客户端收到的所有写命令缓存在内存(内存缓冲区)中。RDB文件生成完毕之后,master会将这个RDB发送给slave,slave会先写入本地磁盘,然后再从本地磁盘加载到内存中。然后master会将内存中缓存的写命令发送给slave,slave也会同步这些数据。

另外slave node做复制的时候,是不会block master node的正常工作的,也不会block对自己的查询操作,它会用旧的数据集来提供服务; 但是复制完成的时候,需要删除旧数据集,加载新数据集,这个时候就会暂停对外服务了。slave node主要用来进行横向扩容,做读写分离,扩容的slave node可以提高读的吞吐量。slave与高可用性有很大的关系。

Tips:边讲边画图最好了。

主从复制的过程中如果因为网络原因停止复制了会怎么样?

如果出现网络故障断开连接了,会自动重连的,从redis 2.8开始,就支持主从复制的断点续传,可以接着上次复制的地方,继续复制下去,而不是从头开始复制一份。

master如果发现有多个slave node都来重新连接,仅仅会启动一个rdb save操作,用一份数据服务所有slave node。

master node会在内存中创建一个backlog,master和slave都会保存一个replica offset,还有一个master id,offset就是保存在backlog中的。如果master和slave网络连接断掉了,slave会让master从上次的replica offset开始继续复制。

但是如果没有找到对应的offset,那么就会执行一次resynchronization全量复制。

好的,那你能说说什么是哨兵有什么作用吗?

哨兵是redis集群架构中非常重要的一个组件,主要功能如下

(1)集群监控,负责监控redis master和slave进程是否正常工作

(2)消息通知,如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员

(3)故障转移,如果master node挂掉了,会自动转移到slave node上

(4)配置中心,如果故障转移发生了,通知client客户端新的master地址

哨兵本身也是分布式的,作为一个哨兵集群去运行,互相协同工作

(1)故障转移时,判断一个master node是宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题

(2)即使部分哨兵节点挂掉了,哨兵集群还是能正常工作的,因为如果一个作为高可用机制重要组成部分的故障转移系统本身是单点的,那就很坑爹了。

目前采用的是sentinal 2版本,sentinal 2相对于sentinal 1来说,重写了很多代码,主要是让故障转移的机制和算法变得更加健壮和简单。

如果有面试问题的可以一起来探讨:https://shimo.im/docs/VqQR6tPrpR3C3tjq/

为什么redis哨兵集群只有2个节点无法正常工作?

如果两个哨兵实例,即两个redis实例,一主一从的模式。

则redis的配置quorum=1,表示一个哨兵认为master宕机即可认为master已宕机。

但是如果是机器1宕机了,那哨兵1和master都宕机了,虽然哨兵2知道master宕机了,但是这个时候,需要majority,也就是大多数哨兵都是运行的,2个哨兵的majority就是2(2的majority=2,3的majority=2,5的majority=3,4的majority=2),2个哨兵都运行着,就可以允许执行故障转移。

但此时哨兵1没了就只有1个哨兵了了,此时就没有majority来允许执行故障转移,所以故障转移不会执行。

主备切换的时候会有数据丢失的可能吗?

会有,而且有两种可能,一种是异步复制,一种是脑裂导致的数据丢失。

简单描述一下这两种数据丢失的过程吧

好的,第一种很好理解,因为master 到 slave的复制是异步的,所以可能有部分数据还没复制到slave的时候,master就宕机了,此时这些部分数据就丢失了。虽然master会做持久化,但是哨兵将slave提升为master后,如果旧的master这时候好了,会当做slave挂到新的master上,从新的master同步数据,原来的数据还是会丢失。

第二种,也就是说,某个master所在机器突然脱离了正常的网络,跟其他slave机器不能连接,但是实际上master还运行着,即集群分区现象。此时哨兵可能就会认为master宕机了,然后开启选举,将其他slave切换成了master.

这个时候,集群里就会有两个master,也就是所谓的脑裂。

此时虽然某个slave被切换成了master,但是可能client还没来得及切换到新的master,还继续向旧master写数据,这部分数据可能就丢失了。因此旧master再次恢复的加入到主从结构中时,会被作为一个slave挂到新的master上去,自己的数据会清空,重新从新的master复制数据,原来的写到旧master的数据就丢失了。

那有什么办法解决这个数据丢失的问题吗?

数据丢失的问题是不可避免的,但是我们可以尽量减少。

在redis的配置文件里设置参数

min-slaves-to-write 1

min-slaves-max-lag 10

min-slaves-to-write默认情况下是0,min-slaves-max-lag默认情况下是10。

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

上面两个配置可以减少异步复制和脑裂导致的数据丢失。

设置了这俩参数具体是怎么减少数据丢失的呢?

以上面配置为例,这两个参数表示至少有1个salve的与master的同步复制延迟不能超过10s,一旦所有的slave复制和同步的延迟达到了10s,那么此时master就不会接受任何请求。

我们可以减小min-slaves-max-lag参数的值,这样就可以避免在发生故障时大量的数据丢失,一旦发现延迟超过了该值就不会往master中写入数据。

那么对于client,我们可以采取降级措施,将数据暂时写入本地缓存和磁盘中,在一段时间后重新写入master来保证数据不丢失;也可以将数据写入kafka消息队列,隔一段时间去消费kafka中的数据。

通过上面两个参数的设置我们尽可能的减少数据的丢失,具体的值还需要在特定的环境下进行测试设置。

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

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

相关文章

run till exit from #0_华为认证hcip H13821 v2.0云服务考试真题每日一练(一)

1.微服务云应用平台(ServiceStage),可以完成以下哪些功能?(多选)A.创建应用依赖计算资源B.使用 AOS 模板自动化应用编排C.查看应用各项指标D.在线可视化升级应用E.容器应用需要自己在 Service Storage 上搭建容器管理平台,比如需自己搭建 kubernetes 管理 docker 容器应用Answ…

什么笔记本电脑好用_苹果笔记本好用吗?苹果笔记本怎么样?

阅读本文前,请您先点击上面的蓝色字体“科技论吖”,再点击“关注”,这样您就可以继续免费收到文章了。每天都有分享,完全是免费订阅,请放心关注!苹果笔记本好用吗苹果笔记本好用吗?用苹果电脑最大的好处就…

apple ii 模拟器 mac_苹果自研芯片Mac价格曝光

11月3日凌晨,苹果又在官网宣布了今年秋季的第三场新品发布会将在北京时间2020年11月11日凌晨2点举行,这次发布会预计会带来搭载苹果自研Apple Silicon芯片的Mac产品。彭博社的报道显示,这次的新品发布会将会推出三款产品,分别是13…

win10文件夹加密_(十六)小众但好用:免费开源免注册的同步盘加密工具 Cryptomator...

之前写过同步盘加密工具 boxcryptor,今天给大家推荐另一款开源免费多平台的同步盘加密工具 Cryptomator。节省时间,直接开始。Cryptomator 官方网站:点击这里首先简单对比一下 Cryptomator 和 boxcryptor。Cryptomator 加密原理和 boxcryptor…

simulink仿真及代码生成技术入门到精通_Simulink仿真零基础入门到精通实用教学教程 自学全套...

Simulink仿真零基础入门到精通实用教学教程 自学全套,以教程文字为主,毕业论文和报告均可以借鉴。Simulink是电气工程必学的模型仿真专业工具软件,非常的实用。小编在全网中搜索都没有找到非常系统的学习教程和教材,想学习却找不到…

plupload怎么设置属性_店铺收银系统怎么用?好收银系统能提升店铺效率

经营一家店铺,无论是小型便利店还是大型超市,都少不了使用收益系统,那么常用的店铺收银系统要怎么用呢?店铺收银系统怎么用一款好用的收银系统,是可以起到提升店铺首页效率的,现在信息时代,不少收银系统开…

spring 2.0核心技术与最佳实践 pdf_推荐 Spring Boot 实践学习案例大全 数据缓存 和中间件 安全权限...

概况spring boot 实践学习案例spring boot 初学者及核心技术巩固的最佳实践目录『 Spring Boot 2 快速教程 』Spring Boot 2:WebFlux集成 ThymeleafSpring Boot 2:WebFlux集成 MongodbSpring Boot 2:WebFluxRestfulCRUD实践Spring Boot 2&…

aws php mysql,AWS快速搭建nginx+php+mysql

yum -y install nginxyum -y install php71yum -y install php71-fpm php71-cli php71-common php71-gd php71-devel php71-pdo php71-mysql php71-mbstringyum -y install mysql-server mysql-develnginx php做服务,在高并发的时候会出现一些错误 connect() to…

centos 8 kubernetes安装详解_8方面图文详解,电气安装工程施工工艺!

八方面图文解读电气安装工艺控制标准1盘、台、开关柜安装2电缆桥架施工3电缆敷设及接线施工4架空线及设备跳线施工5电力变压器安装6电气母线安装7防火封堵施工8成品保护意识一、盘、台、开关柜安装工艺控制标准1.1按设计图纸并根据厂家资料、尺寸误差要求制作盘底座。1.2立盘的…

c++代码健壮性_复活Navex-使用图查询进行代码分析(上)

从了解到修复 Navex, 其中花了一年多, 从对自动化代码审计一无所知到学习PL/Static Analysis, 翻阅十几年前的文档, 补全Gremlin Step, 理解AST, CFG, DDG, PDG, CPG, 也感谢z3r0yu师傅和Gaba哥的的交流指导.本文重点在于静态分析 Joern-图查询部分, 后面的动态分析自动生成EXP…

公文字体字号标准2020_一文了解公文格式规范,图文并茂(建议收藏备用)

本方法根据《党政机关公文格式国家标准》(GB/T9704-2012)制定。具体内容如下:一、办公软件要求适用于微软OFFICE—WORD文字处理软件。二、页面设置1.选择“文件”——“页面设置”选择“页边距”附签,上:3.7厘米,下:3.…

360浏览器卸载_无法卸载?Win10 强推新 Edge 浏览器,来教你如何干掉它

8月17日消息,相信不少更新了 Windows 10 v2004 版本的用户都已经发现,系统默认浏览器已经自动更新为基于 Chromium 打造的全新 Edge 浏览器,虽然该浏览器已经一跃成为全球第二大桌面浏览器,但却仍然有不少用户反馈不好用。撰文 | …

磁卡门锁怎么配卡_样式多的铜工艺品怎么设计请查看_江西南昌皇巢|铜门||别墅铜门|...

江西南昌皇巢|铜门||别墅铜门|专注FNbnWz样式多的铜工艺品怎么设计请查看,咨询更多详情!KLC欧式门锁室内门锁卧室房门锁黄古铜门锁实木门锁具执手锁¥,月销笔进店相关推荐词军升欧式门锁黄古铜田园室内门锁执手机械门锁卧室锁具防盗…

php怎么分割页面,用html如何把页面分割成多个文件,由多个文件拼接而成?

用html如何把页面分割成多个文件,由多个文件拼接而成?更新时间:2014-11-10 作者:久久经验网 来源:久久经验网 所属分类:Web前端摘要:静态html分割页面,达到类似php等动态页面的in…

13寸笔记本电脑尺寸_如何判断行李箱的尺寸?标准行李箱尺寸对照表(13~32寸)

行李箱已经成为家庭必备的一件物品,很多时候都会用到行李箱,最晚就是大学时期,肯定会准备一个行李箱,有些人第一次买不知道如何判断行李箱的尺寸,今天小编就教大家怎么自己确定行李箱的尺寸。如何判断行李箱的尺寸?行…

华为手机怎么隐藏按键图标_mac桌面图标怎么快速隐藏?

我们会应为方便而在电脑桌面直接放一些文件,对于处女座而言无论是桌面还是电脑桌面都不希望非常凌乱,那么我们如何隐藏我们的mac电脑桌面图标文件呢?如何才能使电脑看起来干净整洁呢?一、如何在 Finder 中隐藏桌面图标&#xff1f…

bat脚本中如何多次键盘输入并判断_电脑上如何多开微信?PC端多开微信的方法

相信很多人都有多个微信,尤其是那些工作和生活分的比较开的人士,大家都知道一个电脑和可以登录多个QQ的,但是对于微信却不是这样。当你已经登录一个微信时,再打开微信时会自动弹出当前已经登录的微信窗口。本文将教你如何在PC电脑…

win7蓝牙怎么连接_win7添加打印机提示windows无法连接怎么办?正确解决方法分享...

如果有多台电脑,那么一般会把打印机设置成共享,然后其他电脑通过添加网络打印机的方式来使用。有win7纯净版系统用户遇到一个问题,在自己电脑上要添加另一台电脑共享的打印机时,出现“Windows无法连接到打印机。键入的打印机名不正…

一般项目中哪里体现了数据结构_优秀程序员都应该学习的数据结构与算法项目(GitHub 开源清单)...

前言算法为王。想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手;只有内功深厚者,前端之路才会走得更远。强烈推荐 GitHub 上值得前端学习的数据结构与算法项目,包含 gif 图的…

matlab 白色像素点,MATLAB 簡單的計算白色輪廓中像素點的個數

近來,有朋友問到,如何計算白色輪廓中的像素點的個數。我在這里就舉一個超級簡單的例子,就是假設一副二值圖片,其背景是黑色的,而你的邊緣是白色的,而且你的白色邊緣中不包含黑色的點,就如附件中…