2012-12-21 90 views
12

我們已經設置3個服務器:nginx的+ HAProxy的HAProxy的隨機HTTP 503錯誤

  • 服務器A來執行負載均衡
  • 後端服務器B
  • 後端服務器C

這裏是我們的/etc/haproxy/haproxy.cfg

global 
     log /dev/log local0 
     log 127.0.0.1 local1 notice 
     maxconn 40096 
     user haproxy 
     group haproxy 
     daemon 

defaults 
     log  global 
     mode http 
     option httplog 
     option dontlognull 
     retries 3 
     option redispatch 
     maxconn 2000 
     contimeout  50000 
     clitimeout  50000 
     srvtimeout  50000 
       stats enable 
       stats uri /lb?stats 
       stats realm Haproxy\ Statistics 
       stats auth admin:admin 
listen statslb :5054 # choose different names for the 2 nodes 
     mode http 
     stats enable 
     stats hide-version 
     stats realm Haproxy\ Statistics 
     stats uri/
     stats auth admin:admin 

listen Server-A 0.0.0.0:80  
     mode http 
     balance roundrobin 
     cookie JSESSIONID prefix 
     option httpchk HEAD /check.txt HTTP/1.0 
     server Server-B <server.ip>:80 cookie app1inst2 check inter 1000 rise 2 fall 2 
     server Server-C <server.ip>:80 cookie app1inst2 check inter 1000 rise 2 fall 3 

所有三臺服務器有一個良好的數額RAM和CPU內核來處理請求

隨機HTTP瀏覽時顯示503錯誤:503 Service Unavailable - No server is available to handle this request.

而且還對服務器的控制檯:

Message from [email protected] at Dec 21 18:27:20 ... 
haproxy[1650]: proxy Server-A has no server available! 

注那90%的時間沒有錯誤。這些錯誤隨機發生。

+3

你有沒有找到答案?我們有類似的東西。 – jeesty

+0

找到答案...請接受答案。 – Siten

回答

0

很難說沒有更多的細節,但它有可能超過了每個後端配置的maxconn? Stats UI在前端和個人後臺上顯示這些統計信息。

0

您的服務器可能共享一個在特定時間超時的公共資源,並且您的健康狀況檢查請求正在同時進行(並因此同時拉出後端服務器) 。

您可以嘗試使用HAProxy選項spread-checks來隨機化運行狀況檢查。

25

我有同樣的問題。經過幾天拉我的頭髮,我發現這個問題。

我有兩個HAProxy實例在運行。其中一個是殭屍,可能在更新或haproxy重新啓動期間不會被殺死。我在刷新/ haproxy統計頁面時注意到了這一點,並且PID會在兩個不同的數字之間改變。其中一個數字的頁面有荒謬的連接統計。爲了證實我確實

netstat -tulpn | grep 80 

,見有兩個HAProxy的進程偵聽端口80

要解決,我做了一個問題,「殺XXXX」,其中xxxx是與可疑的統計PID。

+0

Omg,謝謝。有超過10個進程聽80端口。Jeez。 –

+0

謝謝!你剛剛救了我的命 – hamou92

+0

肯定是把我的頭髮撕了2天。謝謝你,謝謝 –

0

我有同樣的問題,由於2 HAProxy服務運行在Linux中,但具有不同的名稱/ PID /資源。除非我停止不需要的實例,否則所需實例會隨機拋出503錯誤,比如說5次中的1次。

正在嘗試使用單個Linux機箱進行多個URL路由,但在haproxy或我已定義的haproxy的配置文件中查看了一個限制。

0

在此處爲任何遇到此問題的人添加我的答案,但以上列出的解決方案均不適用。請注意,我的回答不適用於上面列出的原始代碼。

對於任何可能有此問題的人,請檢查您的配置並查看您是否可能錯誤地在配置的多個部分放置了相同的「綁定」行。Haproxy在啓動過程中沒有檢查到這一點,我打算將這作爲推薦的驗證檢查提交給開發人員。在我的情況下,我有3個不同的配置部分,我錯誤地把相同的IP綁定在兩個不同的地方。這是關於是否使用正確的部分或使用了不正確的部分的50/50的拍攝。即使使用正確的部分,大約一半的請求仍然有503.