【问题标题】:Redis Cluster minimal configurationRedis 集群最小配置
【发布时间】:2018-08-03 14:48:33
【问题描述】:

实际上,我正在使用带有 HAProxy for Wordpress 的 Redis Master-Slaves 配置来获得高可用性。这个配置很好并且工作完美(我可以在不停机的情况下移除任何服务器进行维护)。这种配置的问题是,只有一个 Redis 服务器正在获取所有流量,而其他服务器只是在等待该服务器死机,因此在负载非常高的网页中可能会出现问题,并且添加更多服务器不是解决方案,因为总是只有一个将是主人。

考虑到这一点,我在考虑是否可以只使用 Redis 集群来允许在所有节点上进行读/写,但我不确定它是否适用于我的设置。

我的设置大多数时候限制为三个节点,并且我在某些地方读到 Redis 集群最小设置是三个节点,但建议使用六个。这是合理的,因为这种设置允许在 Master 死亡时让 Slaves 节点成为 Master,然后保留所有数据,但如果数据不关心会发生什么?我的意思是,在我的设置中,数据只是缓存的对象,所以如果不存在,只需再次创建它:

  • 数据将丢失(无关紧要),其他节点将再次从客户端获取对象,以便在以后的请求中提供这些对象(例如刷新数据时发生的情况)。
  • 节点将回答数据不存在并拒绝缓存,因为对象必须位于其他已死节点上。

有人知道吗?

谢谢!!

【问题讨论】:

    标签: redis redis-cluster


    【解决方案1】:

    当主节点死亡时,Redis 集群进入关闭状态,任何涉及故障实例提供的密钥的命令都将失败。

    这可能与其他一些分布式软件不同,因为 Redis Cluster 不是每个 master 都保存所有数据的程序。实际上,key 空间是水平分区的,每个 key 只由一个 master 服务。

    specification中提到了这个:

    密钥空间被分成 16384 个槽... 单个哈希槽将由单个节点提供服务...

    用于将键映射到哈希槽的基本算法如下:

    HASH_SLOT = CRC16(key) mod 16384

    当你建立一个集群时,你肯定会要求每个节点服务一组槽,每个槽只能由一个节点服务。如果一个节点死了,你会丢失这个节点上的槽,除非你有一个从故障转移来服务它们,所以任何涉及映射到这些槽的键的命令都会失败。

    【讨论】:

    • 您好,感谢您的回复,但我已经阅读并且知道了。这就是奴隶存在的原因。我在问是否可以在活动节点上覆盖死节点上的信息(如果不存在,则创建缓存)或命令将失败。例如:node1:A-D,node2:E-H,node3:I-L。 Node2 死亡,E 和 H 之间的数据下降(如预期的那样)。客户端尝试读取 F 并失败,然后它尝试再次创建 F。 F 将在其他活动节点上创建,否则写入命令也会失败,因为假设它将在 node2 上。无论如何,我会尝试测试它。
    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 2018-11-22
    • 1970-01-01
    相关资源
    最近更新 更多