【Redis】- 集群篇

三种集群方式

  • 主从同步:主从复制模式中包含一个主数据库实例(master)与一个或多个从数据库实例(slave)
    • 优点:
      • master能自动将数据同步到slave,可以进行读写分离,分担master的读压力
      • master、slave之间的同步是以非阻塞的方式进行的,同步期间,客户端仍然可以提交查询或更新请求
    • 缺点:
      • 不具备自动容错与恢复功能,master或slave的宕机都可能导致客户端请求失败,需要等待机器重启或手动切换客户端IP才能恢复
      • master宕机,如果宕机前数据没有同步完,则切换IP后会存在数据不一致的问题
      • 难以支持在线扩容,Redis的容量受限于单机配置
  • 哨兵模式:哨兵模式基于主从复制模式,只是引入了哨兵来监控与自动处理故障
    • 过程:
      • 哨兵负责持续监控主从节点的健康,当主节点挂掉时,自动选择一个最优的从节点切换为主节点
      • 客户端来连接集群时,会首先连接sentinel,通过sentinel来查询主节点的地址,然后再去连接主节点进行数据交互
      • 当主节点发生故障时,客户端会重新向sentinel要地址,sentinel会将最新的主节点地址告诉客户端
      • 后续原先挂点的主节点恢复后会变成了从节点,从新的主节点那里建立复制关系
    • 优点:
      • 哨兵模式基于主从复制模式,所以主从复制模式有的优点,哨兵模式也有
      • 哨兵模式下,master挂掉可以自动进行切换,系统可用性更高,如此应用程序将无需重启即可自动完成节
        点切换。
    • 缺点:
      • 同样也继承了主从模式难以在线扩容的缺点,Redis的容量受限于单机配置
      • 需要额外的资源来启动sentinel进程,实现相对复杂一点,同时slave节点作为备份节点不提供服务
      • 采用异步复制,当主节点挂掉时,从节点可能没有收到全部的同步消息,这部分未同步的消息就丢失了,若主从延迟特别大,那么丢失的数据可能就会特别多,所以哨兵模式无法保证消息完全不丢失,但也尽可能保证消息少丢失
  • Cluster:实现了Redis的分布式存储,即每台节点存储不同的内容,来解决在线扩容的问题
    • 优点:
      • 无中心架构,数据按照slot分布在多个节点。
      • 集群中的每个节点都是平等的关系,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。
      • 可线性扩展到1000多个节点,节点可动态添加或删除
      • 能够实现自动故障转移,节点之间通过gossip协议交换状态信息,用投票机制完成slave到master的角色转换
    • 缺点:
      • 客户端实现复杂,驱动要求实现Smart Client,缓存slots mapping信息并及时更新,提高了开发难度。目前仅JedisCluster相对成熟,异常处理还不完善,比如常见的“max redirect exception”
      • 节点会因为某些原因发生阻塞(阻塞时间大于cluster-node-timeout)被判断下线,这种failover是没有必要的
      • 数据通过异步复制,不保证数据的强一致性
      • slave充当“冷备”,不能缓解读压力批量操作限制,目前只支持具有相同slot值的key执行批量操作,对mset、mget、sunion等操作支持不友好
      • key事务操作支持有线,只支持多key在同一节点的事务操作,多key分布不同节点时无法使用事务功能
      • 不支持多数据库空间,单机redis可以支持16个db,集群模式下只能使用一个,即db 0
  • 总结
    • 主从复制模式能实现读写分离,但是不能自动故障转移
    • 哨兵模式基于主从复制模式,能实现自动故障转移,达到高可用,但与主从复制模式一样,不能在线扩容,容量受限于单机的配置
    • Cluster模式通过无中心化架构,实现分布式存储,可进行线性扩展,也能高可用,但对于像批量操作、事务操作等的支持性不够好

参考:https://segmentfault.com/a/1190000022028642

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 8.2 哨兵模式 8.2.1 哨兵架构 如下图所示,哨兵模式沿用了主从复制的基础架构,但是在主从复制的基础上添加了...
    复旦猿阅读 615评论 0 4
  • redis redis是单线程的,但是一般的作为缓存使用的话,redis足够了,因为它的读写速度太快了。官方的一个...
    普度众生的面瘫青年阅读 5,349评论 0 4
  • 哨兵模式 背景 当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时...
    xbmchina阅读 624评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 8,115评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    余生动听阅读 11,073评论 0 11

友情链接更多精彩内容