Redis Sentinel 和 Cluster 的优势

标签 redis redis-cluster redis-sentinel

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

  • Redis Sentinel Master1 Slave1 Slave2 集群的优势?作为 Redis 多节点分片集群是否更可靠?
  • Redis 多节点分片集群的优势?作为 Redis Sentinel Master1 Slave1 Slave2 Cluster 是不是更可靠?

Redis Sentinel Master1 Slave1 Slave2 集群的进一步问题:

  • 当我有 1 个 Master 和 2 个 Slave,并且流量越来越高时,这个集群会变得很小,我怎样才能让集群变大?

Redis 多节点分片集群的进一步问题:

  • 为什么有这么多在单个实例上但在不同端口上运行集群的演示?这对我来说毫无意义。
  • 当我有一个包含 4 个主节点和 4 个副本的集群时,应用程序或客户端如何确保写入集群?当 Master1 和 Slave1 快要死了但我的应用程序总是写入 Master1 的 IP 时,它将不再工作。有哪些解决方案可以很好地实现分片集群,使应用程序可以通过单个 ip 和端口找到它?保活? HA代理?
  • 当我使用例如 4 主设置时Keepalived - 这不会抵消不同的主人吗?
  • 此外,我需要了解为什么多节点集群仅适用于内存可用时需要写入更多数据的解决方案。为什么?对我来说,多主机设置听起来很好,可以扩展。
  • 当集群未处于缓存模式时,分片集群设置不支持多键操作是否正确?

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

最佳答案

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

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

所以回答你的问题:

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

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

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

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

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

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

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

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

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

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

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

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

关于Redis Sentinel 和 Cluster 的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56498406/

相关文章:

C:字符串到毫秒时间戳

ruby-on-rails - redis_store session 没有过期

redis-cluster - 从永远挂起的远程机器向现有集群添加节点从属

redis - Redis Replication 和 Redis Sentinel 的区别

c# - Stackexchange Redis 哨兵客户端

rest - 为 Redis 数据库构建 API REST 服务的框架?

Node.JS Redis 连接 Microsoft Azure Web App 中的 EADDRNOTAVAIL 错误

redis - Redis 排序集插入的时间复杂度

java - Lettuce 无法使用 SSL 连接到 Redis 集群,但可以通过将其视为独立节点来使用 SSL 连接到同一 Redis 服务器

Redis primary/secondary 没有复制