image

编辑人: 青衫烟雨

calendar2025-03-17

message5

visits650

说说Redis Cluster 集群化部署?

分析&回答

一张图看懂:
image-1691389651720

什么是 Redis 集群

  • Redis 集群是一个分布式(distributed)、容错(fault-tolerant)的 Redis 实现,集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset)。
  • Redis 集群中不存在中心(central)节点或者代理(proxy)节点,集群的其中一个主要设计目标是达到线性可扩展性(linear scalability)。
  • Redis 集群为了保证一致性(consistency)而牺牲了一部分容错性:系统会在保证对网络断线(net split)和节点失效(node failure)具有有限(limited)抵抗力的前提下,尽可能地保持数据的一致性。

Redis Cluster支持的特性

  1. 节点自动发现
  2. slave->master 选举,集群容错
  3. Hot resharding:在线分片
  4. 进群管理:cluster xxx
  5. 基于配置(nodes-port.conf)的集群管理
  6. ASK 转向/MOVED 转向机制
  7. 整个集群的部分节点失败或者不可达的情况下能够继续处理命令

集群存在的问题

  • Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.
  • Redis 并不能保证数据的强一致性. 这意味这在实际中集群在特定的条件下可能会丢失写操作.

反思&扩展

Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.

Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:

  1. 节点 A 包含 0 到 5500号哈希槽.
  2. 节点 B 包含5501 到 11000 号哈希槽.
  3. 节点 C 包含11001 到 16384号哈希槽.

喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

创作类型:
原创

本文链接:说说Redis Cluster 集群化部署?

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share