HA 代理無法從「沒有到主機的路由」恢復

HA 代理無法從「沒有到主機的路由」恢復

我們在 Amazon EC2 執行個體中使用 HA 代理程式將某些請求路由到兩個不同的內部負載平衡器,即 EC2 ELB(彈性負載平衡器)。

這是 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

通常情況下,如果我關閉其中一台伺服器一段時間,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

經過一番谷歌搜尋後,我發現 HA 代理程式僅在啟動時解析 DNS。 EC2 ELB 可以隨機變更 IP 位址,這會導致執行狀況檢查失敗,因為 HA 代理程式在執行執行狀況檢查之前不會執行 DNS 解析。

彈性負載平衡器更改 IP 位址

HA 代理程式在啟動時進行 DNS 解析

有關 HA 代理 DNS 解析的更多詳細信息

相關內容