首页 > 解决方案 > HAProxy 未对来自 mc(MinIO 客户端)的 S3 分段上传进行负载平衡

问题描述

这就是我想要做的事情:我有一堆运行反向代理 MinIO 实例(使用 nginx)的主机,我想使用 HAProxy 负载平衡请求。我不想使用 TLS 终止,而是在目标主机处终止。

我之前使用过Sidekick,但它不支持 TLS 直通。然而,正如我所料,那里的行为是:不同的 S3 多部分请求被发送到不同的主机。

我已经设置 HAProxy 以在我的 12 台主机之间进行负载平衡,并使用 and 运行了一些测试balance roundrobinbalance leastconn但无论我做什么,我的分段上传最终都被发送到单个主机。奇怪的是,当我mc ls用来列出我的 S3 后端中的所有对象时,我可以看到请求被路由并登录到运行 haproxy 的主机上。mc cp但是,如果我使用,则不会记录任何内容——即使上传完成。在我的 MinIO 实例中激活请求跟踪显示所有块最终都被发送到同一主机。我原以为它们会分布在所有 12 台主机中。AFAIK 在 mc 中没有保持活动状态,并且每个块请求都独立于最后一个。

看起来这可能与mc我发送的命令有关,但我发现一些命令(du, rm)会在 haproxy 服务器上生成多个日志条目,表明对同一命令的不同请求被路由到不同的服务器。

我的 haproxy 是 2.0.14 版本,我正在使用以下 haproxy.cfg:

global
  log 127.0.0.1 local0 debug
  maxconn 32768
  chroot /var/lib/haproxy
  user haproxy
  group haproxy
  daemon

defaults
  log     global
  mode    tcp
  option  tcplog
  timeout connect     5s
  timeout client     50s
  timeout server    450s

frontend https
  bind :443
  default_backend bk_app

backend bk_app
  balance roundrobin
  option httpchk GET /minio/health/live
  option ssl-hello-chk
  http-check expect status 200
  server fs-testcluster-robert2-n1 10.10.11.150:443 check-ssl verify none
  server fs-testcluster-robert2-n4 10.10.11.151:443 check-ssl verify none
  server fs-testcluster-robert2-n2 10.10.11.152:443 check-ssl verify none
  server fs-testcluster-robert2-n5 10.10.11.153:443 check-ssl verify none
  server fs-testcluster-robert2-n3 10.10.11.154:443 check-ssl verify none
  server fs-testcluster-robert2-n6 10.10.11.155:443 check-ssl verify none
  server fs-testcluster-robert-n1 10.10.12.196:443 check-ssl verify none
  server fs-testcluster-robert-n2 10.10.12.198:443 check-ssl verify none
  server fs-testcluster-robert-n3 10.10.12.237:443 check-ssl verify none
  server fs-testcluster-robert-n4 10.10.11.160:443 check-ssl verify none
  server fs-testcluster-robert-n5 10.10.11.161:443 check-ssl verify none
  server fs-testcluster-robert-n6 10.10.11.162:443 check-ssl verify none

谁能解释发生了什么或我可能配置错误?

标签: amazon-s3haproxyminio

解决方案


推荐阅读