我有一个Redis群集,客户端通过HAPRoxy与虚拟IP连接。 Redis群集有三个节点(每个节点与正在运行的Sentinel实例共享同一服务器)。
我的问题是,当我的客户得到一个" MOVED"发送请求时来自群集节点的错误/消息,是否在连接时第二次绕过HAProxy,因为在发出MOVEd消息时它已经提供了IP:端口?如果没有,HAProxy如何知道第二次将其发送到正确的节点?
我只需要了解它是如何工作的。
答案 0 :(得分:1)
如果要在Redis Cluster节点前使用HAProxy,则需要:
为每个主/从对设置HAProxy,并在发生故障时连接某些内容以更新HAProxy,并且可能拦截拓扑相关命令以插入虚拟IP而不是IP节点本身通过拓扑命令/响应进行报告。
自定义HAProxy以教它如何成为支持群集的Redis客户端,以便实际客户端根本不了解群集。这意味着教它Redis协议,存储集群的拓扑信息,并根据消费者代码访问的密钥选择要查询的节点。
使用Redis群集,客户端必须才能访问群集中的每个节点。在选项2中的两个选项中,"更容易"一,但在这一点上,我也不建议。
可以想象,您可以使用VIP作为第一个获取拓扑信息的地方" IP,但我怀疑你会遇到严重的问题,因为原始的IP不会被正确地报告为点头处理数据之一。为此你可以简单地使用循环DNS并避免这个问题,或使用内置的"这里是集群IP(或名称?)的列表"到初始连接配置。
你最简单,最不可能有问题的路线就是去完全本地人"只需完全直接访问群集中的每个节点,然后根本不使用HAProxy。