看上去是这个情况
1.你访问请求的是4000端口,但haproxy监听的是3390端口,所以你的访问其实没经过haproxy,而是直接打到了tidb server;
2.由于你配置了代理透传proxy-networks指定102和103是代理,当你使用102、103这两个源地址直接连接tidb server的时候,tidb server需要看到请求侧携带真实的IP,但你并非是代理访问而是直接访问,所以不会携带真实IP,这是访问不到的原因。
解决方案也比较明确:
1.改成访问3390端口;
2.加一个proxy-protocol.fallbackable: true这个参数,即如果遇到代理IP请求且没有携带真实IP,则fallback到不使用代理的方式处理这个请求;
3.还有个问题,haproxy建议bind 0.0.0.0这个地址,否则可能只会监听102和103这两个地址的3390端口,而不监听VIP 238这个地址的3390端口。
实测可以,供参考。