我正在尝试设置一个 google TCP 内部负载均衡器。此负载均衡器背后的实例组由监听端口 6379 的 redis-server 进程组成。在这些 redis 实例中,只有一个是主实例。
问题:添加 TCP 健康检查来检测 redis 主服务器并让 lb 将所有流量仅转移到 redis 主服务器。
方法:为端口 6379 添加了 TCP 健康检查。为了将命令发送role
到 redis-server 进程并解析响应,我使用了健康检查中提供的可选参数。请查看屏幕截图这里。
结果:所有健康检查均失败。如果我删除可选的请求/响应参数,则所有健康检查均会通过。
调试:
- 使用 netcat 连接到 lb 并发出命令,它会按预期发送以(对于主) 和(对于从属)
role
开头的响应。*3
*5
- 登录实例并停止 redis-server 进程。开始监听端口 6379,用于
nc -l -p 6379
检查健康检查中实例端究竟收到了什么。它确实收到了role\r\n
。 - 在步骤 2 之后,重新启动 redis-server 并
MONITOR
在 redis-cli 中运行命令,以查看此进程收到的命令日志。这里没有日志role
。这意味着,实例正在通过 tcp 接收数据(role\r\n
),但进程 redis-cli 未收到数据(按照MONITOR
命令),或者发生了其他事情。请帮忙。