Conexão fixa e suporte HTTPS para HAProxy

1

Temos 2 balanceadores de carga HTTP com HAproxy e heartbeat. Existem 4 nós do apache neste cluster. Está fazendo balanceamento de carga round robin. O cluster HTTP está funcionando bem. Estamos tendo problemas com nosso portal porque ele usa o SSO. Precisamos de suporte a conexões fixas em nosso HAproxy. Também precisamos de balanceamento de carga para o tráfego HTTPS. Aqui está o nosso arquivo conf do HAproxy.

global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events.  This is done
#    by adding the '-r' option to the SYSLOGD_OPTIONS in
#    /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
#   file. A line like the following can be added to
#   /etc/sysconfig/syslog
#
#    local2.*                       /var/log/haproxy.log
#
log         127.0.0.1 local0
log         127.0.0.1 local1 notice

chroot      /var/lib/haproxy
pidfile     /var/run/haproxy.pid
maxconn     4000
user        haproxy
group       haproxy
daemon

# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:5000
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

    use_backend static          if url_static
    default_backend             app

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
listen ha-http 10.190.1.28:80
mode http
stats enable
stats auth admin:xxxxxx
balance roundrobin
cookie JSESSIONID prefix
option httpclose
option forwardfor
option httpchk HEAD /haproxy.txt HTTP/1.0
server apache1 portal-04:80 cookie A check
server apache2 im-01:80 cookie B check
server apache3 im-02:80 cookie B check
server apache4 im-03:80 cookie B check

Por favor, conselhos. Obrigado pela sua ajuda com antecedência.

    
por Saif 24.02.2011 / 08:01

2 respostas

1

Sua configuração já está configurando um cookie persistente, mas acredito que você precise definir um cookie diferente por servidor de back-end para sempre enviar um visitante para o mesmo back-end.

O seu SSO tem o seu próprio cookie? Ou você está feliz em ficar com qualquer escolha haproxy caixa para enviar o tráfego para? Se você tiver um cookie que seu aplicativo define, há uma opção de configuração para informar ao haproxy para carregar o saldo com base em cookies preexistentes, em vez de definir um deles. (Marque a opção appsession ".

Em relação ao SSL, há muita documentação por aí que descreve por que o HAProxy não suporta o próprio SSL. Em vez disso, se você quiser fazer o balanceamento de carga SSL + camada 7 (cookies, etc), terá que encerrar a conexão HTTPS no balanceador de carga (ou seja, ter o SSL residido do LB em vez do servidor de back-end). Eu fiz isso antes, rodando o nginx na mesma caixa e funcionou bem.

No entanto, se você estiver satisfeito com o balanceamento de carga da Camada 4 (sem cookies, etc.), o HAProxy pode apenas rotear o tráfego criptografado sem ter de acompanhar o conteúdo.

    
por 24.02.2011 / 09:06
0

Se você estiver usando spnego / kerberos para autenticação de usuário, precisará manter a conexão ativa entre o cliente e o back-end. Esse é um "recurso" do protocolo SPNEGO que ele quer resolver o desafio sobre a mesma conexão.

Por favor, lembre-se de que manter conexões ativas provavelmente causará problemas de persistência de conexão, já que o haproxy só verifica os cabeçalhos do primeiro verbo http.

Para ssl, eu também escolheria Nginx, outra opção é stunnel com um suporte X-FORWARDED-FOR

    
por 24.02.2011 / 13:43

Tags