常见面试题-Redis 切片集群以及主节点选举机制

news2024/11/28 19:32:28

Redis 切片集群了解吗?

答:

Redis 切片集群是目前使用比较多的方案,Redis 切面集群支持多个主从集群进行横向扩容,架构如下:

在这里插入图片描述

使用切片集群有什么好处?

  • 提升 Redis 读写性能,之前的主从模式中,只有 1 个 master 可以进行写操作,在切片集群中,多个 master 承担写操作压力

  • 多个主从集群进行存储数据,比单个主从集群存储数据更多

    比如10G数据,1个主从集群的话,1个master需要存储10G,对有3个主从集群的切片集群来说,只需要master1存储3G,master2存储3G,master3存储4G即可

  • 具备主从复制、故障转移

    切片集群中的每一个主从集群中,slave 节点不支持读,只做数据备份,因为已经有其他master节点分担压力

切片集群支持水平扩容,可以无限扩容吗?

不可以,官方推荐不要超过1000个,因为各个小集群之间需要互相进行通信,如果水平节点过多,会影响通信效率。

切片集群中插入数据时,数据被放在哪个master中?

Redis 切片集群中,数据是通过 哈希槽分区 来存储的,Redis 切片集群中有 16384 个哈希槽,每一个 master 会拿到一些槽位,在向切片集群中插入数据时,会根据 key 计算对应的哈希槽,插入到对应的哈希槽中,那么计算出来的哈希槽在哪个master中,数据当然也就被存放在对应的master上。(在切片集群中,只有master节点才有插槽,slave节点没有插槽)

故障恢复(Failover):切片集群中如果一个master挂了,如何选举主节点?

当 master 挂了之后,该 master 下的所有 slave 会向所有节点广播 FAILOVER_AUTH_REQUEST 信息,其他节点收到后,只有 master 响应,master 会相应第一个收到的 FAILOVER_AUTH_REQUEST 信息,并返回一个 ack,尝试发送 failover 的 slave 会收集 master 返回的 FAILOVER_AUTH_ACK,当 slave 收到超过半数的 master 的 ack 后,就会变成新的 master。

这样会导致 slave 一直没收到超过半数的 master 的 ack,难道要一直选举吗?

其实不会导致 slave 一直选举的,因为在 slave 知道 master 挂了之后,会经过一个延时时间 delay 之后再去给所有节点发送选举消息

延迟时间计算:delay = 500ms + random(0~500ms) + slave_rank * 1000ms (版本不同可能不一样,原理大致相同)

slave_rank表示slave已经从master复制数据的总量的rank,rank越小,表示复制的数据越新,该slave节点也就越先发起选举。

因此数据量越多的 slave 就越早发送选举消息,也就越早得到 master 的 ack,成为新的 master。

集群切片中的脑裂问题了解吗?如何解决?

比如一个主从集群:master1 对应两个从节点 slave1、slave2,如果master1和两个从节点出现网络分区,两个slave会选举出来一个新的master节点,客户端是可以感知到两个master,但是两个master之间因为网络分区无法感知,客户端会向这两个master都写入数据,之后如果网络分区恢复,其中一个master变为slave,就会导致数据丢失问题。

如何解决?添加redis配置:

min-slave-to-write 1 

表示写数据时,写入master之后,不立即返回客户端写成功,而是去slave同步数据,取值为1表示最少同步1个slave之后,才算数据写成功,如果同步的slave节点数量没有达到我们配置的值,就算数据写失败,取值建议:集群总共3个节点,可以取1,这样集群中超过半数(1个master + 1个slave)都写入数据成功,才算写成功。

但是这个配置为了数据的一致性,牺牲了一定的集群可用性,如果一个master的所有slave都挂了,这个小集群就不可用了,master无法写入数据。

一般不使用,redis丢一点数据也影响不大,所以主要还是保证redis的可用性

集群是否完整才能对外提供服务?

当redis.conf配置 cluster-require-full-coverage no 时,表示如果一个主从集群全部挂掉之后,集群仍然可用,如果为 yes,表示不可用

比如有3个主从集群,其中一个主从集群全部瘫痪,配置为no,则整个集群仍然可以正常工作

Redis集群如何对批量操作命令的支持?

对于 mset、mget 这样的多个 key 的原生批量操作命令,redis 集群只支持所有key落在同一个slot的情况,如果多个key一定要用mset在redis集群上操作,则可以在key之前加上{XX},这样就会根据大括号中的内容计算分片hash,确保不同的key落在同一slot内,例如:

mset {user1}: name zhuge {user1}:age 18

虽然name和age计算出来的 hash slot 值不同,但是前边加上大括号{user1},redis集群就会根据 user1 计算插槽值,最后name和age可以放入同一插槽。

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

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

相关文章

构建强大的接口自动化测试框架:Pytest实践指南!

一. 背景 Pytest目前已经成为Python系自动化测试必学必备的一个框架,网上也有很多的文章讲述相关的知识。最近自己也抽时间梳理了一份pytest接口自动化测试框架,因此准备写文章记录一下,做到尽量简单通俗易懂,当然前提是基本的py…

系列二十四、Spring设计模式之策略模式

一、前言 对于我们Java开发人员来说,Spring框架的重要性不言而喻,可以说Java领域之所以发展这么壮大,生态这么丰富,功能这么强大,是离不开Spring以及由其衍生出来的各种子模块的,正是由它们共同奠定了JavaE…

波司登发布2023/24上半财年业绩:稳健高质量增长,旺季业绩可期

11月27日,羽绒服巨头波司登(03998.HK)正式发布 2023/24上半财年业绩。财报显示,公司营收和净利润连续6年创同期历史新高,经营溢利增速再次快于收入增速。 自2018 年战略转型坚持“聚焦主航道、聚焦主品牌”后&#xf…

前端---JavaScript篇

1. 介绍 JavaScript 是 前端开发人员必须学习的 3 门语言中的一门: HTML 定义了网页的内容CSS 描述了网页的布局JavaScript 控制了网页的行为 接下来开始详解JavaScript。 2.引入方法 js有两种导入方式,一种是内部脚本:直接在html页面中…

MaskDINO环境搭建与模型测试

1、环境搭建 1、构建虚拟环境安装torch conda create -n mmdetsam python3.8 -y conda activate mmdetsampip install torch1.10.0cu102 torchvision0.11.0cu102 torchaudio0.10.0 -f https://download.pytorch.org/whl/torch_stable.html -i http://mirrors.aliyun.com/pypi…

如何用眼精星票证识别系统识别名片?

近年来,随着信息化技术的不断发展,越来越多的人开始使用电子名片来进行商务交流和信息传递。然而,如何将纸质名片转化为电子名片并结构化数据,却一直是许多人的难题。本文将介绍一种使用眼精星票证识别系统的方法,将纸…

揭秘Git高手的10个秘密武器:让你的工作效率飙升!

Git和GitHub是每个软件工程师都必须了解的最基本的工具。它们是开发人员日常工作不可或缺的一部分,每天都要与之互动。 精通Git不仅能简化你的日常操作,还能显著提高生产力。在这篇文章中,我们将探讨一组能够极大提升生产力的命令。 随着对…

波兰边缘计算初创公司获得450w欧元融资

边缘计算社区获悉,近期,波兰边缘计算初创公司CTHINGS.CO 获得450w欧元A轮融资。 以下是官方声明: CTHINGS.CO 获得 2000 万兹罗提(约450 万欧元)用于国际扩张。此轮融资涉及 ORLEN VC、PKO VC、Freya Capital 和现有投…

AWS连甩3项Serverless创新,高效创建和操作缓存,用AI优化资源配置性价比

云创科技11月28日拉斯维加斯报道,在一年一度的AWS re:Invent首日,AWS实用计算高级副总裁Peter DeSantis延续Monday Night Live的传统,发表主题演讲并分享了AWS数据库和分析产品组合中的3项Serverless创新,以帮助客户在任何规模下分…

【项目实战】SpringBoot连接openGauss

一:Docker安装openGauss 1.下载openGauss 安装好Docker好以后,执行如下命令下载openGauss3.0镜像。docker pull enmotech/opengauss:3.0.0 2.运行openGauss 执行如下命令docker run -itd --name opengauss \ --restartalways \ --privilegedtrue \ …

TLS、对称/非对称加密、CA认证

1. SSL与TLS SSL/TLS是一种密码通信框架,他是世界上使用最广泛的密码通信方法。SSL/TLS综合运用了密码学中的对称密码,消息认证码,公钥密码,数字签名,伪随机数生成器等,可以说是密码学中的集大成者。 TLS…

uniapp设置手机通知权限以及uniapp-push2.0推送

unipush2.0代码 export default function () {// 调用获取用户通知权限setPermissions()// 获取客户端唯一的推送标识,可用于测试uni.getPushClientId({success: (res) > {console.log(res.cid)},fail(err) {console.log(err)}})// 监听推送uni.onPushMessage(r…

苹果手机如何格式化?五个步骤快速掌握!

如果手机出现异常情况,例如运行缓慢、频繁崩溃,又或者想将手机出售、转让给他人,那么将手机格式化可以有助于解决问题。苹果手机如何格式化?本文将为您介绍解决方法,只需要五个步骤就能搞定,帮助您快速掌握…

MES系统数字化看板:生产过程透明化与优化

在当今的制造业中,实现生产过程的透明化和优化已成为企业持续发展的关键。MES系统(制造执行系统)作为实现这一目标的重要工具,其数字化看板功能在生产现场管理中发挥着越来越重要的作用。 一、MES系统的基本概念与功能 MES系统是…

【算法刷题】Day7

文章目录 283. 移动零1089. 复写零 283. 移动零 原题链接 看到题目,首先看一下题干的要求,是在原数组内进行操作,平切保持非零元素的相对顺序 这个时候我们看到了示例一: [ 0, 1, 0, 3,12 ] 这个时候输出成为了 [ 1, 3, 12, 0, …

Langchain-Chatchat学习

参考:Langchain-Chatchat 阿里通义千问Qwen 保姆级教程 | 次世代知识管理解决方案 - 知乎 (zhihu.com) 中文LLM生态观察 模型 就开源的部分而言,从一开始的MOSS[1] ChatGLM[2] ChatGLM2 [3] 到后来的 baichan [4] 基于LLama2 微调的 中文LLama2 [5] …

ubuntu改window任务栏

经常在ubuntu和win之间切换,任务栏的布局不统一会让人很别扭,个人很喜欢win任务栏的不折叠图标功能,而ubuntu没有,又很喜欢的ubuntu的多工作空间,效率比副屏还高,还可以自定义切换工作空间的快捷键。鱼和熊…

(附源码)基于NET学生信息管理系统-计算机毕设 24077

基于NET学生信息管理系统 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用C#技术建…

第二证券:燃料电池产业进入发展快车道 多家公司披露布局进展

据悉,日前太原钢铁(集团)有限公司初次开发出超级超纯铁素体TFC22-X连接体材料并结束了批量供货,填补了国内空白。 燃料电池电堆连接体材料是行业中最为要害的战略材料。研发团队打破了特别元素含量精确操控的要害技术瓶颈&#x…

与中通支付对接

最近项目接入商户,商户需要同步给中通支付,报错两个异常已解决。 一、json报错 未接入中通SKD之前,不会报错,接入后,json转换异常。 排查后发现,中通的jar包里JSON版本太低,与自身项目的版本冲…