Yad*_*dar 4 networking tcp load-balancing redis google-compute-engine
我正在尝试设置谷歌TCP内部负载均衡器.此lb后面的实例组由侦听端口6379的redis-server进程组成.在这些redis实例中,只有一个是master.
问题:添加TCP运行状况检查以检测redis主服务器,并使lb仅将所有流量转移到redis主服务器.
方法:为端口6379添加了TCP运行状况检查.为了将命令发送role
到redis-server进程并解析响应,我使用运行状况检查中提供的可选参数.请点击此处查看截图.
结果:健康检查失败.如果我删除了可选的请求/响应参数,健康状况检查将开始传递给所有人.
调试:
role
,它按预期发送以*3
(对于master)和*5
(对于slave)开始的响应.nc -l -p 6379
以检查在运行状况检查中实例侧收到的确切内容.它收到了role\r\n
.MONITOR
在redis-cli中运行命令,以查看此进程接收的命令的日志.这里没有日志role
.这意味着,实例正在role\r\n
通过tcp 接收data()但是没有被进程redis-cli接收(根据MONITOR
命令)或其他正在发生的事情.请帮忙.小智 7
不幸的是,GCP的TCP健康检查在响应中可以检查的内容上非常有限.来自https://cloud.google.com/sdk/gcloud/reference/compute/health-checks/create/tcp:
--response=RESPONSE
An optional string of up to 1024 characters that the health checker expects to receive from the instance. If the response is not received exactly, the health check probe fails. If --response is configured, but not --request, the health checker will wait for a response anyway. Unless your system automatically sends out a message in response to a successful handshake, only configure --response to match an explicit --request.
Run Code Online (Sandbox Code Playgroud)
请注意帮助消息中的"确切"一词.响应必须与提供的字符串完全匹配.无法在响应中指定要搜索的部分字符串.
正如您在https://redis.io/commands/role上看到的那样,redis的ROLE命令会返回一堆文本.虽然响应中存在子字符串"master",但它还有一堆其他文本,这些文本会因设置而异(基于从设备数量,地址等).
您绝对应该使用GCP提出功能请求,以便在响应上进行正则表达式匹配.在此之前可能的解决方法是在每个主机上安装一个小型Web应用程序,在本地执行"redis-cli role | grep master"命令并返回响应.然后可以配置运行状况检查以监视此Web应用程序.