专栏首页工具使用为什么redis推荐奇数个节点
原创

为什么redis推荐奇数个节点

缘起

被很多资料误导了,说什么redis只能是奇数个节点。其实这是一种错误的说法,Redis只不过是推荐奇数个节点,从来没有过必须是奇数节点的说法,那么这是为什么呢?

为什么redis推荐奇数个节点

其主要原因还是从成本上考虑的,因为奇数个节点和偶数个节点允许宕机的节点数是一样的,比如3个节点和4个节点都只允许宕机一台,那么为什么要搞4个节点去浪费服务资源呢?

那么话又说回来了,为什么三个节点和四个节点都只允许宕机一个节点呢?这是因为redis规定

集群中,半数以上节点认为主节点故障了,才会选举新的节点。

三个节点的情况

我们假设存在这样一个Redis集群(A、B、C三个节点)A节点是主节点

image.png

情况一:坏了一个节点

如果是A节点坏了,就需要从B和C里面选举一个节点出来作为主节点,而因为B和C占比在集群中个占33.333%。那么投票会有以下四种情况和对应结果

  • B和C都投给自己,各占比33.33%,不满足超过半数的约定,重新选举
  • B和C都投给对方,各占比33.33%,不满足超过半数的约定,重新选举
  • B投给自己,C投给了B,B被选举为主节点,系统恢复运行
  • C投给自己,B投给了C,C被选举为主节点,系统恢复运行

可以看到,只要投票次数足够多,总能从B或者C中选举出来一个主节点,系统总是能够自动恢复的。

情况二:坏了两个节点

假设A和B或者A和C都坏了,剩下的一个节点占比只有33.333%。那么他是没法选举自己为主节点的,整个系统也是没法恢复正常的。

四个节点的情况

image.png

情况一:坏了一个节点

如果是A节点坏了,就需要从B和C和D里面选举一个节点出来作为主节点,而因为B和C和D占比在集群中个占25%%。那么投票会有以下几种情况和对应结果

  • B和C和D都投给自己,各占比25%,不满足超过半数的约定,重新选举
  • B和C和D都投给对方,各占比25%%,不满足超过半数的约定,重新选举
  • C和D投给了B,B投给了C。B占比50%,C占比25%。还是没有节点满足超过半数的约定,重新选举
  • C和D投给了B,B投给了自己,B占比75%。B被选举为主节点,整个系统恢复正常
  • 其他情况自行脑补

情况二:坏了两个节点

如果是A和B坏了,剩下的C和D投票最多只能投到50%。不满足超过半数的约定,系统无法恢复正常。

总结

通过上面的分析,想必可以清楚,不管是3个节点还是4个节点,都只能允许一个节点宕机。所以在实际使用过程中出于成本的考虑,一般会建议奇数个节点。

但是:4个节点的性能和容量是比3个节点高的,如果对性能方面有要求的,也可以偶数个节点,Redis是完全支持的

关于zookeeper为什么推荐奇数个节点还有一个原因是因为脑裂的问题

https://blog.csdn.net/adorechen/article/details/82791280

参考:https://blog.csdn.net/weixin_33860553/article/details/91682263

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java遍历Map对象的四种方式

    如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。该方法比entrySet遍历在性能上稍好(快了10%),...

    诺浅
  • 【Tomcat源码解析】第一章:如何搭建源码阅读环境

    在解压的目录下新建一个home目录,并将conf、webapps目录移入home 目录中.

    诺浅
  • Spring中的FactoryBean和BeanFactory

    在spring的常见面试题中,经常会被问及FactoryBean和BeanFactory的区别与联系。这两个类虽然长得很像,但是他们的作用确实完全不像。其实这二...

    诺浅
  • Linux之HA高可用集群的基础概念总结

    HA(High Availability)高可用集群,其特点为根据实际需求为前端Diretor,后端RS-server,数据库服务器,共享存储等集群节点做一个...

    小小科
  • Zookeeper系列(5) —— Zookeeper 常用的客户端操作命令

    创建节点的命令格式 create [-s] [-e] /path data acl

    求和小熊猫
  • 第15期:索引设计(索引组织方式 B+ 树)

    谈到索引,大家并不陌生。索引本身是一种数据结构,存在的目的主要是为了缩短数据检索的时间,最大程度减少磁盘 IO。

    爱可生开源社区
  • 动图展示,让你彻底理解红黑树!

    简单地理解,二叉树(Binary tree)是每个节点最多只有两个分支(即不存在分支度大于 2 的节点)的树结构。通常分支被称作“左子树”或“右子树”。

    业余草
  • 数据结构:堆(Heap)

    堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。

    sunsky
  • 动图演示:如何彻底理解红黑树?

    简单地理解,二叉树(Binary tree)是每个节点最多只有两个分支(即不存在分支度大于 2 的节点)的树结构。通常分支被称作“左子树”或“右子树”。

    架构师修炼
  • 使用图进行特征提取:最有用的图特征机器学习模型介绍

    从图中提取特征与从正常数据中提取特征完全不同。图中的每个节点都是相互连接的,这是我们不能忽视的重要信息。幸运的是,许多适合于图的特征提取方法已经创建,这些技术...

    deephub

扫码关注云+社区

领取腾讯云代金券