HA プロキシが「ホストへのルートがありません」から回復しない

HA プロキシが「ホストへのルートがありません」から回復しない

Amazon EC2 インスタンスで HA プロキシを使用して、特定のリクエストを 2 つの異なる内部ロードバランサー (EC2 ELB (Elastic Load Balancer)) にルーティングしています。

HA プロキシ構成は次のとおりです。

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

通常、サーバーの 1 つを一時的にシャットダウンすると、HA プロキシは回復します。ただし、何らかのネットワーク/ルーティング エラーが発生しているようで、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 プロキシはサーバーのチェックを停止し、サーバーをダウンとしてマークし続けます。ただし、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

何が問題なのか、何か心当たりはありますか? 他に何を調査すべきでしょうか?

答え1

Google で調べたところ、HA プロキシは起動時にのみ DNS を解決することがわかりました。EC2 ELB は IP アドレスをランダムに変更する可能性があり、HA プロキシはヘルス チェックの前に DNS 解決を行わないため、ヘルス チェックが失敗します。

弾性ロードバランサーがIPアドレスを変更する

HAプロキシは起動時にDNS解決を実行します

HA プロキシ DNS 解決の詳細

関連情報