【问题标题】:Redis advantages of Sentinel and ClusterSentinel和Cluster的Redis优势
【发布时间】:2019-10-23 04:51:18
【问题描述】:

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

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

Redis Sentinel Master1 Slave1 Slave2 Cluster的其他问题:

  • 当我有 1 个 Master 和两个 Slaves 并且流量越来越高,所以这个集群会很小,我怎样才能让集群更大?

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

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

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

【问题讨论】:

    标签: redis redis-cluster redis-sentinel


    【解决方案1】:

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

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

    所以回答你的问题:

    1. Sentinel 相对于 Redis 集群的优势在于:
      • 硬件 - 您可以使用三个节点设置完全正常工作的 Sentinel 部署。 Redis 集群至少需要六个节点。
      • 简单 - 通常更易于维护和配置。
    2. Redis 集群相对于 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 集群部署仅在所有键位于同一节点时才支持多键操作。你可以使用“hash tags”来强制多个key由同一个master处理。

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

    不同 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集群可以有5个master和8个slave吗?
    • 是的,你可以。 A master can have multiple replicas
    • 嗨,1 个愚蠢的问题,我可以在 1 个 Redis 集群中拥有 4 个主服务器和 3 个从服务器吗?这样 1 主将不会有任何副本节点。有可能吗?
    • @NguyễnĐứcTâm 是的,这是可能的。并非 Redis 集群中的每个 master 都必须有一个副本,但不建议将其用于生产场景。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    相关资源
    最近更新 更多