【问题背景】
1、节点池A配置2个节点,关联健康检测,配置截图如下。
1、AD的web界面一直显示对应的节点都是故障状态。
1、思路:看路由、使用Ping网络连通性、telnet查看端口、curl查看返回信息(排查网络和服务本身是否正常) 2、类比法:看有没有相同配置的健康检测,结果为正常的,可以类比排查区别差异。 3、思考是不是CONNECT(TCP)发送内容大小写,空格符号、返回结内容。
1、由于是客户内网环境,很多无法截图,我已经把网络和服务本身的问题已经排查了,都是正常的。我就直接描述抓包查看结果。(由于保护客户信息,有一些地方已经打码,但是不影响查看)
一些抓包命令和迅速查找目的地址走的哪一个网卡出去 {查看网卡【ip route get X.X.X.X】
} {抓包【tcpdump -i ens160 host 172.16.X.X and port 6188 -nnv -s0 -nvl -w /tmp/20250725】}
2、我抓取了【健康检查有故障的节点】,下面是相关的截图及描述。
框起来的是请求和应答包 通过追踪HTTP流显示的结果,可以看到请求和响应的结果都是正常的 也能在响应体的最下面看到关键字 结论:通过抓包内容可以看出,TCP交互正常,HTTP返回结果也是正常,并且返回结果包含对应关键字。这时还是无法判断出是什么原因导致AD的web界面一直显示故障状态。
我还把抓包,这两种编码都改过,然后复制到健康检查返回内容里面去,再做测试,发现还是故障。 HTTP追踪流界面下面改变编码的选项
我继续测试,把返回内容改成其它【X of Chongqing All Right Reserved】例如选取其中某一个字符,例如【Chongqing】我发现节点健康检查通过;换成其它的(Right、ALL)都不通过。然后我去抓包里面返回结果搜索【Chongqing】如下图,发现在【X of Chongqing All Right Reserved】的上面有【Chongqing】这个字符 或者说 接收内容前面字节里面有包含【Chongqing】这个字符。 排查到这里应该发现原因了或者它们的区别(就是健康检测匹配不到靠后面字节位置的内容)
3、我还抓取了【健康检查正常的节点抓包】类比法,下面是相关的截图及描述。
可以看到正常节点他们的TCP和HTTP请求和响应都是正常的 开启HTTP追踪流之后,查看内容 可以看到存在相关关键字 这个时候可以看到,健康检测可以通过的,他们的抓包没啥区别,由于上面已经有怀疑了。所以我去看接收长度
4、最后查看AD上的配置。可以看到CONNECT(TCP)是有相关的“回应内容的最大长度” 【总结】 关注AD上的配置参数,掌握其原理,多总结经验
|