我试图建立一个谷歌的TCP内部负载平衡器检测Redis的主人。在这个lb后面的实例组由在端口6379上侦听的redis-server进程组成。在这些redis实例中,只有其中一个是master。健康检查从谷歌TCP负载平衡器
问题:添加TCP运行状况检查以检测redis主设备,并使lb仅将所有流量转移到redis主设备。
方法: 增加了TCP健康检查端口6379. 为了发送命令role
到Redis的服务器进程和解析响应,我正在使用的健康检查提供的可选PARAMS。请检查截图here。
结果:健康检查失败的所有。如果我删除可选的请求/响应参数,健康检查开始传递所有参数。
调试:
- 连送到LB使用netcat的和发出的命令
role
,将其作为预期开始*3
(对主)和*5
(用于从站)的响应。 - 登录到实例并停止redis-server进程。使用
nc -l -p 6379
开始在端口6379上进行侦听,以检查实例端在健康检查中究竟收到了什么。它确实收到role\r\n
。 - 步骤2中,重新启动redis的服务器之后和在redis的-CLI跑
MONITOR
命令,观看由该方法接收的命令的日志。这里没有日志role
。 这意味着,例如在接收通过TCP的数据(role\r\n
),但不被处理redis的-CLI接收到的(按照MONITOR
命令)或别的东西正在发生。请帮忙。
你有没有设法弄清楚? – shaharmor
你的redis服务器在哪个IP上监听?仅限外部IP或仅限内部IP或0.0.0.0? – Dagang
作为一种变通方法,您可以尝试在实例中运行的6380代理收听并转发流量到Redis的服务器上127.0.0.1:6379? – Dagang