【问题标题】:Redis cluster/ load balancingRedis集群/负载均衡
【发布时间】:2017-01-06 16:32:24
【问题描述】:

Redis 不支持主主复制。

在redis教程中我可以看到有一个配置,有6个节点,3个master,3个slave,

谁能告诉我这个配置的目的是什么(从机用于故障转移,3个主机的目的是什么?)

我的要求是减少从应用服务器到 Redis 的连接数。所以我一直在寻找一种可以指向多个 redis 节点的方法,所以如果我从 redis 节点 1 创建一个密钥,我可以从 Redis 节点 2 中删除该密钥。

有可能吗?

【问题讨论】:

    标签: redis queue cluster-computing


    【解决方案1】:

    首先,如果你做的工作很少,你可以更改默认配置

    redis-trib.rb

    在函数def check_create_parameters 中。您可以设置一个主副本和一个从副本。

    此配置的目的是为了容错。从站也可用于读取(READONLY)。在三个 master 中,hashslots 均匀分布,并且使用负载平衡算法,您可以重新分配实际密钥。在节点之间分配密钥的可能算法的步骤是(由我测试并且它按预期工作):

    1. 寻找高手群
    2. 获取他们持有的密钥总数
    3. 为每个主节点存储主机名、端口和密钥数
    4. 计算每个主机必须持有的密钥,以便 要平衡的键的分布(集群的总键/个数 大师)
    5. 查找哪些主节点必须获取或提供密钥以及总量 他们必须给予/接受的钥匙数
    6. 将主节点表征为源节点或目标节点,具体取决于是否 他们分别接收或赠送钥匙
    7. 开始从源节点迁移到目标节点,首先是 hashslots 然后是相关的键并迭代直到所有 主人拥有相同数量的钥匙

    此算法将有助于最大限度地缩短响应时间。我的意思是:

    使用三个主机可以最大限度地缩短响应时间。如果您的配置只有一个主控,并且该主控拥有例如 30000 个#key,则一次获取 1000 个密钥的响应时间是 > 从具有 2 个主控且每个拥有 15000 个主控的配置。

    如果您在 master1 中创建一个密钥,那么如果您尝试从 master2 访问(读取)该密钥,您将收到 MOVED 错误。因此,解决方案是创建一个智能客户端,将哈希槽映射到相应的节点。因此,只有在 master2 将您的请求重定向到正确的 master 的情况下,您才能从 master2 中删除密钥。

    希望对您有所帮助。

    【讨论】: