天天看點

Haproxy 在服務可用情況下傳回503

1.異常分析:

haproxy叢集作為負載代理,底層挂着多個服務程式,20w個使用者同時并發請求,在100%請求協定為http情況下服務良好,無異常;當請求為websocket 75% http30%情況下,出現大量503服務不可以異常。 首先檢視底層伺服器,底層伺服器運作平穩,壓力未滿,對應的503請求未發送到底層伺服器,檢視haproxy日志,發現大量如下日志:   >> - 503 625990 use 0.000304s

Haproxy 在服務可用情況下傳回503

haproxy完全未将請求發送給底層伺服器,haproxy接到這個請求後立馬就傳回503。神奇的現象,首先可以判斷為haproxy問題; 到底是什麼問題導緻了haproxy在底層伺服器健康并且壓力低的情況下任性的傳回503呢,開啟糾結之旅,排查伺服器配置: [[email protected] ~]# ulimit -a

core file size          (blocks, -c) unlimited

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 515033

max locked memory       (kbytes, -l) unlimited

max memory size         (kbytes, -m) unlimited

open files                      (-n) 627680

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 10240

cpu time               (seconds, -t) unlimited

max user processes              (-u) 60240

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

Haproxy 在服務可用情況下傳回503

這配置應對如此量的請求完全無壓力況且100% http請求的情況下無問題,突然腦袋一霎被神光照亮,websocket為長連接配接,http連接配接會釋放,難道是haproxy允許最大連接配接數配置限制了?開啟驗證之旅

2.問題處理及驗證:

檢視haproxy配置:maxconn 30000       so funny 3W連接配接,雖然是haproxy叢集,但是請求分發一不均衡,單台超過3w長連接配接那不就是搞笑麼。沒話說,調整maxconn到10w,完美解決,不廢話了,直接上圖,單台haproxy在運作情況下有出現連接配接超過3w的情況:

public
Queue Sessions Bytes Denied Errors Warnings Server
Cur Max Limit Cur Max Limit Total LbTot In Out Req Resp Req Conn Resp Retr Redis Status Wght Act Bck Chk Dwn Dwntme Thrtle
Frontend 18214 18214 100000 36935 14534490 4419713 157 OPEN
ipdb local 0 redirect 0

繼續閱讀