tips

  • redis集群中的从节点既不支持写操作也不支持读操作,只是做个备份,当主节点挂了之后,转换成主节点顶上去,实现高可用。
  • 在redis集群中,多个节点分布在不同的机器上的,这个时候它会把不同机器上的节点分配成主从关系,例如:节点A和节点B在一台机器上,节点C和节点D在一台机器上,这个时候会把节点A和节点D分配成一对主从,节点C和节点B分配成一对主从,这样做主要是为了某一台机器挂了,整个Redis集群还能对外提供服务,实现高可用。

集群原理

关键字:槽位,槽位定位,槽位映射表,重定位

  • 集群的所有数据会分为16384个槽位(slots),每个节点负责一部分槽位;
  • 客户端会使用crc16算法进行hash运算,然后对16384取模来得到具体的槽位;
  • 客户端根据自己的槽位映射表缓存来选择对应的节点进行通信;
  • 对应的节点发现指令key所在的槽位不归自己管理时,会向客户端发送一条特殊命令,并携带正确的节点地址信息,然后客户端会将正确的节点地址信息更新到自己槽位映射表中去。

集群选举

关键字:选举周期,票数过半,ack响应,延迟ack请求
当master节点挂掉之后,由于存在多个slave节点,要从多个slave节点中确定出一个master节点,这个时候就需要进行选举了,选举的过程:

  • slave发现自己的master的状态变成了FAIL,经过一段延迟(DELAY)之后,就会广播FAILOVER_AUTH_REQUEST消息,这里的DELAY有一个计算格式:
  • DELAY=500ms + random(0~500ms) + SLAVE_RANK * 1000ms,SLAVE_RANK 表示slave复制数据总量的rank,这个值越小就说明已复制的数据越新,理论上这个slave就越有可能成为master;
  • 其他节点收到FAILOVER_AUTH_REQUEST消息之后,只有master会做出响应,master首先会检查该消息的有效性,然后做出响应FAILOVER_AUTH_ACK;
  • 如果一个slave收到了超过半数的master的FAILOVER_AUTH_ACK,它就会自动成为master,这也就是集群至少需要三个主节点的原因:如果只有两个主节点的话,其中一个主节点挂了,另外只有一个主节点完成不了选举;
  • 成为主节点的slave广播Pong消息来通知其他节点我成为了master。

集群脑裂

关键字:网络抖动,两个master,数据丢失,min-slaves-to-write 1。

  • 因为一个master的网络问题,导致slave和其他节点以为这个master挂掉了,这个时候集群会选举其中一个slave成为master,但是实际上原来的master是存活的,这个时候就会存在两个master,出现了脑裂现象,且客户端还是连着原来的master在写入数据;
  • 当网络恢复之后,集群以为原来的master复活了,会将它作为一个slave添加到集群中,成为slave的时候会复制master上的数据,这个时候就会把发生脑裂之后的数据全部覆盖掉了,造成大量的数据丢失。
  • 为了防止数据丢失,可以添加配置min-slaves-to-write 1,它的含义是当你写入数据时,不仅仅是写入到master节点,还必须至少要同步到一个slave节点才会给你返回数据写入成功的结果,当发生脑裂时,因为原来的master节点没有slave节点同步,会拒绝客户端的数据写入,新版本的这个配置改成了min-replicas-to-write 1;
  • 这个配置很显然会带来可用性的问题:当我们只有一个slave,且slave挂掉时,整个节点就不可用了。这个就涉及到著名的CAP理论了,只能选择其中的CP或者AP,当你选择了可用性(AP)时,就必须要接受数据不一致性(CP)了,这个就需要根据实际项目的需求来选择了。

笔记(十):redis集群相关推荐

  1. down redis集群_Redis总结(十)redis集群-哨兵模式

    模式二:哨兵模式 上一篇问讲述了redis集群的主从模式,这一篇我们讲述哨兵模式. Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务 ...

  2. springboot篇】二十二. springboot整合Redis集群

    springboot整合Redis集群 **中国加油,武汉加油!** 案例准备 1. 新建Springboot项目springboot-redis-sentinel 2. 编写yml 3. Test ...

  3. Redis 学习笔记八:集群模式

    Redis 学习笔记八:集群模式 作者:Grey 原文地址: 博客园:Redis 学习笔记八:集群模式 CSDN:Redis 学习笔记八:集群模式 前面提到的Redis 学习笔记七:主从复制和哨兵只能 ...

  4. redis集群搭建踩坑笔记

    推荐参考教程:https://blog.csdn.net/pucao_cug/article/details/69250101 错误: from /usr/lib/ruby/2.3.0/rubygem ...

  5. 【redis集群】学习笔记

    主从 (1)redis-6379 的配置文件,6380和6381相似 1 include /etc/redis/redis.conf2 pidfile /var/run/redis-pid/maste ...

  6. linux redis-trib.rb,linux 关于redis-trib.rb构建redis集群

    之前搭建集群漏下的坑, 今次再搭一次. 环境 ruby环境 yum install ruby rubygems -y redis的gem环境 gem install redis-3.2.2.gem 部 ...

  7. Redis进阶-Redis集群 【高可用切换】【cluster-require-full-coverage】集群是否完整才能对外提供服务

    文章目录 Pre 需求 :集群不完整仍然需要对外提供服务 验证 Redis Cluster 架构 高可用切换 Code访问测试 继续停掉8006 ,验证集群是否down掉 Pre Redis进阶-Re ...

  8. Redis 集群规范

    本文档翻译自 http://redis.io/topics/cluster-spec . 引言 这个文档是正在开发中的 Redis 集群功能的规范(specification)文档, 文档分为两个部分 ...

  9. Redis集群:sharding策略

    为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,在 ...

最新文章

  1. LeetCode简单题之判断国际象棋棋盘中一个格子的颜色
  2. Box2dの自定义多边形
  3. 《2021全球脑科学发展报告》发布
  4. 又是逆袭!大四在校生 6 个月拿下京东美团滴滴等 Offer
  5. 【多线程】ThreadPoolExecutor类源码解析----续(二进制相关运算)
  6. Git之深入解析在没有合适的网络或者可共享仓库情况下的git bundle打包操作
  7. java poi word 表格_java 使用POI 读写word 表格
  8. 漫画:什么是拜占庭将军问题
  9. 【渝粤教育】国家开放大学2019年春季 2110行政法与行政诉讼法 参考试题
  10. 淘汰率最高的腾讯产品面试题
  11. 10BASE-2 是什么意思
  12. 26、Windows API Shell编程(2)
  13. 遥感软件显示影像名称-影像挑选查看等操作
  14. 减法公式运算法则_加减法运算法则
  15. E.03.08. Scrapped Plans for London Concert Hall Sour Mood for U.K. Musicians
  16. 吃什么怎么吃关系着民族的命运
  17. 急如闪电快如风,彩虹女神跃长空,Go语言高性能Web框架Iris项目实战-初始化项目ep00
  18. 2018漫画春秋战国
  19. 超详细的ROC曲线绘制教程
  20. 星历表ASC2EPH修改且汉化

热门文章

  1. 重庆事业单位计算机知识,重庆事业单位考试全面知识点汇总
  2. SQL数据库不用SQL语句能显示全表的内容_MySQL百万级数据库优化方案
  3. 如何从零开始搭建自己的博客(通俗易懂)
  4. Kotlin 标准库随处可见的 contract 到底是什么?
  5. Kaptcha工具和手动实现验证码功能
  6. 南华大学计算机考研资料汇总
  7. esp8266学习笔记(5)——连接wifi、AP、UDP通信
  8. 导出iPhone/iPad中的Safari书签
  9. 前端--小程序的学习(一)
  10. 白羊座爱情的预测,以及主要的日食,占星术预测2011年的影响