我们在Amazon EC2实例中使用HA代理将某些请求路由到两个不同的EC2 ELB(弹性负载均衡器)的内部负载均衡器。
这是HA代理configuration:
defaults mode http log global no option redispatch retries 25 timeout connect 10000 # default 10 second time out if a backend is not found timeout client 30000 timeout server 30000 maxconn 20000 stats uri /haproxy?stats option http-server-close timeout http-request 100s timeout http-keep-alive 124s backend main-service-backend option httpchk GET /ping server main-service internal-main-service:80 check inter 5s fall 10 backend micro-service-backend option httpchk GET /ping server micro-service internal-micro-service:80 check inter 5s fall 10 frontend shared-frontend *:80 acl is-micro-service-url path_reg ^/(/rest/user/.*/?) use_backend micro-service-backend if is-micro-service-url default_backend main-service-backend
通常情况下,如果我closures一台服务器一段时间,HA代理将恢复。 但是,似乎有一些networking/路由错误发生,HA代理不能恢复。
以下是HA代理日志:
Server micro-service-backend/micro-service is DOWN, reason: Layer4 connection problem, info: "No route to host", check duration: 998ms. 0 active and 0 backup servers left. 1 sessions active, 0 requeued, 0 remaining in queue. backend micro-service-backend has no server available!
HA代理停止检查服务器并将其标记为DOWN。 但是,我能够成功执行从HA代理框到内部负载平衡器的http运行状况检查:
curl -i http://internal-micro-service:80/ping HTTP/1.1 200 OK Content-Type: text/plain;charset=UTF-8 Date: Fri, 12 Jun 2015 23:08:29 GMT Server: Apache-Coyote/1.1 Content-Length: 2 Connection: keep-alive UP
任何想法可能是错的? 我还应该调查什么?
谷歌search后,我发现,HA代理只启动parsingDNS。 EC2 ELB可以随机更改IP地址,这会导致运行状况检查失败,因为HA代理在执行运行状况检查之前不会执行DNSparsing。
弹性负载平衡器更改IP地址
HA代理在启动时执行DNSparsing
有关HA代理DNSparsing的更多详细信息