【问题标题】:Does it require to put load balancer before Redis cluster是否需要在 Redis 集群之前放置负载均衡器
【发布时间】:2020-06-02 03:51:08
【问题描述】:

我在 3 个 Linux 服务器 (CentOS 7) 上使用 Redis 集群。我有标准配置,即分布在这 3 个 Linux 服务器上的 6 个节点、3 个主 实例和 3 个从属 实例(一个主有一个从属) .我将此设置用于我的 Web 应用程序进行数据缓存、HTTP 响应缓存。我的目标是读取主要并写入次要,即读取操作不应失败或延迟。

现在我想问一下是否有必要在3台Linux服务器之前配置任何负载均衡器,以便我对Redis集群实例的Web应用程序请求可以在这些Redis服务器上正确分发?还是 Redis 集群本身能够处理负载分配

如果是,请提及任何参考链接以进行相同的配置。我检查了官方文档Redis Cluster,但它没有指定任何有关负载均衡器设置的内容。

【问题讨论】:

    标签: redis load-balancing redis-cluster


    【解决方案1】:

    如果您在“集群模式”下运行 Redis,则不需要负载均衡器。当你的应用程序启动时,你的 Redis 客户端(假设它是好的)应该联系 Redis 以获得哪些插槽在哪些节点上的列表。它将在本地(在您的应用程序中)散列密钥并将请求直接发送到拥有该密钥插槽的节点(这避免了对 Redis 的额外调用,从而导致 MOVED 响应)。

    您应该能够将您的客户端配置为在从属设备上进行读取并在主设备上进行写入 - 或者仅在主设备上进行读取和写入。除了配置您的客户端,如果您想读取从属设备,请查看READONLY 命令:https://redis.io/commands/readonly

    【讨论】:

    • 我在 C# 中使用 Redis 堆栈交换客户端连接到 Redis 集群。那么这是否处理上述场景,即仅连接到特定节点以读取数据?
    • 我不是 C# 开发人员,所以我不能告诉你。它应该在客户端的文档中说明它是否支持集群模式下的READONLY 从属。或者也许在 C# 标签中有关于 SO 的答案?
    • 我刚刚重读了您的评论。不考虑READONLY slaves,如果客户端说它处理 Redis 集群,那么它应该处理连接到实际拥有数据的任何节点。集群模式 Redis 不允许从不拥有该密钥的节点读取密钥(如果有东西试图访问错误节点上的密钥,它将返回 MOVED)。因此,要让客户端说它与 Redis 集群一起工作,它必须处理连接到每个键的正确节点。因此,我想你提到的客户会处理这个问题。我不知道它是否处理READONLY奴隶。
    • 这个READONLY 是否可用作配置参数?这是一次性配置吗?关了怎么办?
    • 根据文档,可以使用 READWRITE 命令将其关闭:redis.io/commands/readwrite。我也相信(但尚未测试)READONLY 是每个连接:redis.io/topics/cluster-spec#scaling-reads-using-slave-nodes。来自该文档:对于您打开到 Redis 的每个连接,如果您希望该连接能够从从属设备读取,则必须发送一个 READONLY 命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    相关资源
    最近更新 更多