首页 > 解决方案 > Sentinel和Cluster的Redis优势

问题描述

我打算创建一个高可用的 Redis 集群。在阅读了许多关于构建 Redis 集群的文章后,我很困惑。那么究竟是什么

对 Redis Sentinel Master1 Slave1 Slave2 Cluster 的进一步问题:

Redis 多节点分片集群的其他问题:

我不确定这两个解决方案是否是唯一的。希望你们能帮助我理解 Redis 的架构。抱歉问了这么多问题。

标签: redisredis-clusterredis-sentinel

解决方案


我将尝试回答您的一些问题,但首先让我描述一下 Redis 的不同部署选项。Redis 有三种基本部署:单节点、哨兵和集群。

  • 单节点 - 运行 Redis 的单个进程的基本解决方案。它不可扩展且不高度可用。
  • Redis Sentinel - 由多个节点组成的部署,其中一个被选为主节点,其余节点为从节点。它增加了高可用性,因为在主故障的情况下,其中一个从属将自动提升为主控。它不可扩展,因为主节点是唯一可以写入数据的节点。您可以将客户端配置为将读取请求定向到从属服务器,这将从主服务器承担一些负载。但是,在这种情况下,从属服务器可能会返回陈旧数据,因为它们异步复制主服务器。
  • Redis 集群 - 由至少 6 个节点(3 个主节点和 3 个从节点)组成的部署。数据在主节点之间分片。它是高度可用的,因为在主失败的情况下,他的一个从属将自动提升为主控。它是可扩展的,因为您可以添加更多节点并重新分片数据,以便新节点承担一些负载。

所以回答你的问题:

  1. Sentinel 相对于 Redis 集群的优势在于:
    • 硬件 - 您可以使用三个节点设置完全正常工作的 Sentinel 部署。Redis Cluster 至少需要六个节点。
    • 简单——通常更容易维护和配置。
  2. Redis Cluster 相对于 Sentinel 的优势在于它是可扩展的。

这两个部署之间的决定应基于您的预期负载。如果可以使用单个 Redis 主节点管理写入负载,则可以使用 Sentinel 部署。

如果一个节点无法处理您的预期负载,您必须使用集群部署。

  1. Redis Sentinel 部署不可扩展,因此使集群更大不会提高您的性能。唯一的例外是添加从属可以提高您的读取性能(如果您将读取请求定向到从属)。

  2. 在具有多个端口的单个节点上运行的 Redis 集群仅用于开发和演示目的。在生产中它是无用的。

  3. 在 Redis 集群部署中,客户端应该可以访问所有节点(并且只有节点 Master1)。这是因为数据在主节点之间分片。如果客户端尝试向 Master1 写入数据,但 Master2 是数据的所有者,则 Master1 将向客户端返回一条 MOVE 消息,引导其向 Master2 发送请求。您不能在所有 Redis 节点前面有一个 HAProxy。

  4. 与 5 中的答案相同,在集群部署中,客户端应该直接连接到所有主服务器和从服务器,而不是通过 LB 或 Keepalived。

  5. 不确定我是否完全理解您的问题,但 Redis Cluster 是 Redis 唯一可扩展的解决方案。

  6. Redis 集群部署仅在所有键都在同一个节点时才支持多键操作。您可以使用“哈希标签”来强制由同一个主控处理多个密钥。

一些很好的链接可以帮助您更好地理解它:

不同 Redis 部署选项的说明:https ://blog.octo.com/en/what-redis-deployment-do-you-need

Redis Cluster架构详解:https ://blog.usejournal.com/first-step-to-redis-cluster-7712e1c31847


推荐阅读