HAProxy 和 Golang Fiber 实例的健康检查失败和 502 错误

HAProxy 和 Golang Fiber 实例的健康检查失败和 502 错误

我有一个设置,其中服务器 A 充当客户端,通过 HAProxy 与服务器 B 通信。服务器 B 运行四个类似的 Golang Fiber 实例,每个实例都在 EC2 t3xlarge 实例上启用了 Prefork。服务器 B 每秒处理数千个请求。但是,我注意到健康检查存在问题,HAProxy 返回了 502 错误,这可能表示健康检查失败。

前端配置:

frontend apifront
    bind *:9898
    maxconn 50000
    mode http
    log global
    default_backend apiserver

后端配置:

backend apiserver
    mode http
    option http-keep-alive
    timeout connect 5s
    timeout server 30s
    timeout queue 60s
    timeout check 5s
    timeout http-request 10s
    timeout http-keep-alive 10s
    http-reuse safe
    log global
    option httpchk GET /health
    balance roundrobin
    server apiserver1 localhost:9881 check
    server apiserver2 localhost:9882 check
    server apiserver3 localhost:9883 check
    server apiserver4 localhost:9884 check

观察结果:

  1. 所有服务器的健康检查失败次数均超出预期。
  2. 从服务器 A 的日志中可以看到,HAProxy 经常返回 502 错误

问题:

  1. 在此设置中是否会出现频繁的健康检查失败和 502 错误的行为?
  2. 有没有办法排除故障并找出健康检查失败的根本原因?
  3. 可以进行哪些调整或微调以提高健康检查的可靠性并减少 502 错误?
  4. 作为服务器设置配置的新手,我应该考虑最佳实践或额外检查吗?

任何关于解决此问题的见解或指导都将不胜感激。我还准备提供有关我的设置的更多详细信息,以提供帮助。谢谢!

相关内容