
Estou migrando algumas infraestruturas de vários servidores que hospedam sites específicos para uma arquitetura de balanceamento de carga usandoHAProxy1.3.15.7 no OpenBSD 4.6 macppc. Naturalmente, estou começando configurando a troca de conteúdo para a configuração atual (sites específicos em servidores específicos) e meu /etc/haproxy/haproxy.cfg é o seguinte:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 1024
chroot /var/haproxy
uid 604
gid 604
daemon
#debug
#quiet
pidfile /var/run/haproxy.pid
defaults
log global
mode http
option httplog
option dontlognull
option redispatch
retries 3
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
stats enable
stats auth user:pass
frontend http_proxy *:80
# check to see which domain the reguest is for
acl host_tld.domain.sub1 hdr_end(host) sub1.domain.tld
acl host_tld.domain.sub2 hdr_end(host) sub2.domain.tld
# send to the correct server
use_backend server2 if host_tld.domain.sub1 or host_tld.domain.sub2
default_backend server1
backend server1
server httpd_server1 192.168.1.3:80
backend server2
server httpd_server2 192.168.1.4:80
O objetivo é que todos os domínios sejam atendidos, server1
exceto os domínios sub1.domain.tld
que sub2.domain.tld
deveriam ser distribuídos server2
. No entanto, quando tento iniciar o HAProxy, recebo os seguintes erros:
parsing /etc/haproxy/haproxy.cfg : backend 'server2' has no dispatch address and is not in transparent or balance mode.
parsing /etc/haproxy/haproxy.cfg : backend 'server1' has no dispatch address and is not in transparent or balance mode.
Errors found in configuration file, aborting.
Error reading configuration file : /etc/haproxy/haproxy.cfg
Eu olhei os exemplos listados ema documentação do HAProxy 1.3ehttp://upstre.am/2008/01/09/using-haproxy-with-multiple-backends-aka-content-switching/, mas não vejo onde errei. Nenhum dos exemplos parece exigir option transparent
um modo de equilíbrio. Além disso, a documentação da dispatch
opção foi curiosamente omitida da documentação 1.3, mas duvido que seja útil na minha solução de problemas de qualquer maneira.
Onde foi que eu errei?
Responder1
Você esqueceu a linha "balance roundrobin" (ou equivalente), pois precisa ter um algoritmo de balanceamento em um backend. Além disso, você está trocando de conteúdo, então adicione "opção httpclose" em seu frontend ou seção de padrões, caso contrário, as segundas solicitações de conexões keep-alive não serão correspondidas.