我有一个 Redis 集群,客户端通过 HAPRoxy 使用虚拟 IP 连接到该集群。 Redis 集群具有三个节点(每个节点与正在运行的哨兵实例共享同一服务器)。
我的问题是,当我的客户端在发送请求时从集群节点收到“MOVED”错误/消息时,它是否会在第二次连接时绕过 HAProxy,因为它已提供了 IP:端口MOVEd 消息已发出?如果不是,HAProxy如何知道第二次将其发送到正确的节点?
我只需要了解它在幕后是如何工作的。
最佳答案
如果您想在 Redis 集群节点之前使用 HAProxy,则需要:
为每个主/从对设置一个 HAProxy,并在发生故障时连接一些东西来更新 HAProxy,以及可能拦截与拓扑相关的命令以插入虚拟 IP 而不是节点本身的 IP通过拓扑命令/响应进行报告。
自定义 HAProxy 以教会它如何成为集群感知的 Redis 客户端,这样实际客户端就根本不了解集群。这意味着向其教授 Redis 协议(protocol),存储集群的拓扑信息,并根据消费者代码访问的键选择要查询的节点。
使用 Redis 集群,客户端必须能够访问集群中的每个节点。在上面的两个选项中,选项 2 是“更简单”的一个,但目前我也不推荐。
可以想象,您可以使用 VIP 作为“获取拓扑信息的第一个位置”IP,但我怀疑您会遇到严重的问题,因为原始 IP 不会是正确报告为点头处理数据的 IP 之一。为此,您可以简单地使用循环 DNS 并避免该问题,或者使用内置的“这里是集群 IP(或名称?)列表”来进行初始连接配置。
最简单且最不可能出现问题的路线是“完全原生”,只需向客户端提供对集群中每个节点的完全且直接的访问权限,而根本不使用 HAProxy。
关于通过 HAProxy 的 Redis 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31785184/