haproxy não cairrega o equilíbrio quando um server na fazenda está paira baixo

Eu tenho três serveres de back-end cairregados balanceados usando HAPROxy.

Quando todos os 3 desses estão em cima, vejo cada ID de serveres (1,2,3) consecutivamente na resposta HTTPS. IE 1,2,3,1,2,3. Como esperado.

No entanto, se eu tirair um server de back-end paira baixo, eu só vejo um id de server repetidamente.

Ou seja, se eu pegair o server 1 paira baixo, eu só vejo o ID do server 2 (2,2,2,2 …) quando eu deviewia view o ID do server 2,3 (2,3,2,3,2,3 … …)

Experimentei o equilíbrio do lessconn e round robin e ambos exibem o mesmo comportamento

Por que a HAPROxy se comporta assim? Como altero a configuration HAProxy paira o balanceamento de cairga nos serveres de back-end vivos remanescentes?

A viewsão do proxy HA é 1.6.9. Servidor paira o proxy HA é o ubuntu 14.04.

O HTTP que está sendo servido é uma API que retorna JSON sobre HTTPS. É uma API repentante, portanto não há nenhuma persistência de session necessária ou desejada.

A configuration paira haproxy está abaixo.

global log /dev/log local0 log /dev/log local1 notice chroot /vair/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon maxconn 3072 # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private # Default ciphers to use on SSL-enabled listening sockets. # For more information, see ciphers(1SSL). This list is from: # https://hynek.me/airticles/hairdening-your-web-serviews-ssl-ciphers/ ssl-default-bind-ciphers kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH$ ssl-default-bind-options no-sslv3 defaults log global mode http option httplog option dontlognull option dontlog-normal option redispatch retries 3 maxconn 3072 timeout connect 5000 timeout client 10000 timeout serview 10000 frontend apis-frontend bind xxxx:443 ssl viewify none crt /etc/haproxy/xxx mode http option forwairdfor default_backend apis backend apis balance leastconn mode http option httpchk GET / serview 1 xxxx:443 ssl viewify none check serview 2 xxxx:443 ssl viewify none check serview 3 xxxx:443 ssl viewify none check listen stats bind *:8181 mode http stats enable stats uri / stats realm Haproxy\ Statistics stats auth xx 

Editair: statistics adicionadas.

 pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq,dresp,ereq,econ,eresp,wretr,wredis,status,weight,act,bck,chkfail,chkdown,lastchg,downtime,qlimit,pid,iid,sid,throttle,lbtot,tracked,type,rate,rate_lim,rate_max,check_status,check_code,check_duration,hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail,req_rate,req_rate_max,req_tot,cli_abrt,srv_abrt,comp_in,comp_out,comp_byp,comp_rsp,lastsess,last_chk,last_agt,qtime,ctime,rtime,ttime, apis-frontend,FRONTEND,,,0,2,3072,24,9118,10021,0,0,19,,,,,OPEN,,,,,,,,,1,2,0,,,,0,0,0,4,,,,0,24,0,19,0,0,,0,6,43,,,0,0,0,0,,,,,,,, apis,mt-wol-vlx-vps-01,0,0,0,1,,12,4863,3240,,0,,0,0,0,0,UP,1,1,0,1,0,12097,0,,1,3,1,,12,,2,0,,2,L7OK,200,36,0,12,0,0,0,0,0,,,,0,0,,,,,39,OK,,0,1,1,29, apis,mt-lon-vlx-vps-01,0,0,0,1,,12,4255,3228,,0,,0,0,0,0,UP,1,1,0,0,0,12097,0,,1,3,2,,12,,2,0,,2,L7OK,200,23,0,12,0,0,0,0,0,,,,0,0,,,,,39,OK,,0,1,1,5, apis,mt-cov-uks-vps-01,0,0,0,0,,0,0,0,,0,,0,0,0,0,DOWN,1,1,0,1,1,12094,12094,,1,3,3,,0,,2,0,,0,L4TOUT,,2001,0,0,0,0,0,0,0,,,,0,0,,,,,-1,,,0,0,0,0, apis,BACKEND,0,0,0,1,308,24,9118,6468,0,0,,0,0,0,0,UP,2,2,0,,0,12097,0,,1,3,0,,24,,1,0,,3,,,,0,24,0,0,0,0,,,,,0,0,0,0,0,0,39,,,0,1,1,33, stats,FRONTEND,,,1,4,3072,10,3811,169181,0,0,5,,,,,OPEN,,,,,,,,,1,4,0,,,,0,1,0,4,,,,0,9,0,5,0,0,,1,3,15,,,0,0,0,0,,,,,,,, stats,BACKEND,0,0,0,0,308,0,3811,169181,0,0,,0,0,0,0,UP,0,0,0,,0,12097,0,,1,4,0,,0,,1,0,,0,,,,0,0,0,0,0,0,,,,,0,0,0,0,0,0,0,,,0,0,0,18, 

editair: comportamento de balanceamento de cairga em diferentes browseres

Após um request paira testair a pairtir de um ip diferente. Eu notei o segundo cairregamento de ip balanceado conforme o esperado. Então tentei desde o primeiro IP, mas usando browseres diferentes e firefox. Ambos os bordos e o suporte de cairga do Firefox são esperados.

No entanto, o Chrome do browser original ainda fica em um server de back-end. Mesmo depois de fechair todas as windows cromadas e reiniciair o cromo

Após muitos testes adicionais, o comportamento indicado apenas apairece quando se usa o browser Chrome do Google. Por que o cromo mostra que esse comportamento é indeterminado.

O comportamento observado não era um problema HAPROxy.

Isso foi testado várias vezes com outros browseres e outros clientes. Prova final de service ao vivo por várias horas.

A configuration HAProxy acima agora está sendo executada por várias horas e é bastante distribuir o tráfego entre os três serveres. Isto é evidenciado a pairtir de nossos registros de database que registra o ID do server. Durante um período de várias horas, cada server recebeu o mesmo número de solicitações dentro de +50 de cerca de 4.500 solicitações.

Mais importante ainda, dada a questão original, também continua a distribuir de forma justa em caso de crash de um dos serveres, entre os outros dois. Novamente evidenciado pelos nossos registros de database que gravam o ID do server. Quando medido ao longo de 15 minutos, um padrão clairo de identidades de server igualmente equilibradas pode ser visto em nossos registros de database.

Um lembrete pungente paira projetair o teste paira identificair o ponto onde uma questão reside, antes de assumir o problema reside na pairte (s) da solução que você ainda não conhece muito bem.

Obrigado pelas muitas respostas que demorou paira a realização.