amazon-web-services - HAProxy 和 AWS loadBalancer - 503 错误

标签 amazon-web-services amazon-ec2 load-balancing amazon-elastic-beanstalk haproxy

我们最近将我们的主要 Web 应用程序(在具有自动缩放功能的负载均衡器后面以 https 方式在 EC2 上运行)拆分为两个单独的 Web 模块。

主要基础设施现在有一个负载均衡器和一个用于主模块的 n-server (ma​​in.elasticbeanstalk.com) 和一个带有 n-server 的负载均衡器用于辅助模块 (secondary) .elasticbeanstalk.com)

我们创建了一个由域 www.mycompany.com 解析并代理请求的 HAproxy 专用实例,如下所示:

-://www.mycompany.com/fancymodule -> secondary.elasticbeanstalk.com

-://www.mycompany.com/-> main.elasticbeanstalk.com

我们将其投入生产,并在约 12 小时后.. http://www.mycompany.com/ fancymodule 开始获取 503 服务不可用。如果我手动重启 HAproxy,一切都会开始正常工作。

我已经成功地复制了更新与 secondary.elasticbeanstalk.com 关联的 IP 地址的问题(es:从负载均衡器转换为单个实例)。

似乎 HAproxy 没有更新解析到 secondary.elasticbeanstalk.com 的 dns,因此它卡在旧 IP 上,无法正确访问 Web 服务器。

而且停机时间不短!在我重新启动服务之前它不会正确路由!

是否有可能负载均衡器在 elasticIp 中与新的 IP 地址相关联,因此不再可访问?

有人可以看看这个配置并告诉我我是否在做一些愚蠢的事情吗?

global
  log         127.0.0.1:514 local2 info
  chroot    /var/lib/haproxy
  pidfile     /var/run/haproxy.pid
  maxconn     4000
  user        haproxy
  group   haproxy
  daemon

# turn on stats unix socket
  stats socket /var/lib/haproxy/stats
  tune.ssl.default-dh-param 2048

defaults
  retries                 3
  timeout http-request    10s
  timeout queue           1m
  timeout connect         10s
  timeout client          1m
  timeout server          1m
  timeout http-keep-alive 10s
  timeout check           10s
  mode    http
  option  httplog

frontend mydomain
  log global
  bind *:80
  bind *:443 ssl crt /etc/ssl/certificate.pem
  acl isSsl ssl_fc
  redirect scheme https if !isSsl
  option dontlog-normal
  mode http

  acl secondaryDomain url_beg /fancymodule

  acl liveDomain hdr_end(Host) -i www.mycompany.com

  use_backend live_secondary if secondaryDomain liveDomain
  use_backend live_main if liveDomain

  default_backend live_main

backend live_main
  rspadd Set-Cookie:\ module=main;Path=/
  server main main.elasticbeanstalk.com:80

backend live_secondary
  rspadd Set-Cookie:\ module=secondary;Path=/
  server secondary secondary.elasticbeanstalk.com:80

listen stats :1234
  mode http
  stats enable
  stats hide-version
  stats realm Haproxy\ Statistics
  stats uri /stats
  stats auth user:pswd

最佳答案

我发现,为了提高性能,HAproxy 只是在启动时将配置的域替换为实际的 ip 地址。之后不进行 DNS 解析。

http://www.serverphorums.com/read.php?10,358605 https://serverfault.com/questions/681000/force-haproxy-to-lookup-dns-for-backend-server

因此,解决方案是使用 HAProxy 创建一个自动缩放的负载均衡器,或者在 dns ip 更改时使用外部监听器自动重新加载服务

关于amazon-web-services - HAProxy 和 AWS loadBalancer - 503 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31225456/

相关文章:

ssl - Google Cloud TCP 外部负载平衡器和 TLS 未自签名

amazon-web-services - Cloudformation - 在 map 中定义默认值

java - 本地运行应用程序时无法从资源文件夹加载文件

amazon-web-services - 将 Amazon Route 53 域名链接到 EC2 实例

amazon-web-services - 用于提供最新 amazon-ecs-optimized 图像的 ami-id 的脚本或 api

kubernetes - 如何增加 kubernetes 中服务可用的端口范围

c++ - 直接连接后端和客户端的负载平衡机制?

python - 任务猫抛出 "no suitible partition"错误

amazon-web-services - AWS CDK - 角色和策略创建

mongodb - 我应该在它自己的 EC2 实例上运行 MongoDB 吗?