HAProxy é uma ferramenta desenvolvida para melhorar o desempenho de seu cloud server, garantindo a qualidade do serviço e a alta disponibilidade das aplicações. Para isso, o HAProxy distribui as requisições dos usuários em múltiplos servidores denominados backends.
O HAProxy roda no sistema operacional Linux, mas é possível utilizá-lo para balancear aplicações web que rodam em ambiente Windows. Para isso, basta criar um novo servidor com o template HAProxy e configurar como backendsos servidores de aplicações.
A CentralServer disponibiliza um template do HAProxy no Painel do CloudFlex. Para realizar a instalação, siga os passos abaixo:
yum -y install haproxy
A configuração do servidor HAProxy é feita através do arquivo /etc/haproxy/haproxy.cfg
Este arquivo pode ser dividido nas seguintes partes:
As configurações a seguir devem ser utilizadas em todos os balanceadores. Com estas configurações será criado um balanceador otimizado para praticamente qualquer tipo de balanceamento:
global chroot /var/lib/haproxy user haproxy group haproxy daemon user haproxy group haproxy tune.bufsize 16384 tune.maxrewrite 1024 spread-checks 4 defaults log global mode http option httplog option dontlognull option forwardfor option http-server-close option redispatch timeout connect 15s timeout client 60s timeout server 80s timeout http-request 15s timeout http-keep-alive 15s
Além da configuração padrão, é possível gerar uma página com estatísticas dos serviços que estão sendo balanceados pelo HAProxy, utilizando as configurações abaixo:
listen stats :1936 mode http stats enable stats uri / stats hide-version stats auth <LOGIN>:<SENHA>
Esta página de estatísticas ficará disponível no endereço http://<IPServidor>:1936. Caso queria utilizar outra porta para acesso a página de estatísticas, basta alterar para a porta desejada no campo listen stats. Para acesso a esta página, serão necessários os dados de autenticação informados no parâmetro stats auth.
Com as configurações abaixo, serão criados os conjuntos de servidores que receberão as requisições balanceadas:
backend Site01_RealServers server ap01 XX.XX.XX.XX:80 check server ap02 XX.XX.XX.XX:80 check
NOTA: Alterando o nome do conjunto de backends, é possível criar quantos conjuntos forem necessários.
Com as configurações abaixo, será configurado o balanceamento de conexões HTTP:
frontend Site01_Entrada_http bind *:80 option httplog balance roundrobin log-format %ci:%cp\ -\ -\ [%Tl]\ <<%r>>\ %ST\ %B\ XXXX default_backend Site01_RealServers
NOTAS:
A partir das configurações abaixo, será configurado o balanceamento de conexões HTTPS.
Nesta primeira, parte serão restritos os protocolos e algoritmos de criptografia. Esta restrição é feita para evitar problemas com protocolos e formas de criptografias mais antigas e vulneráveis.
tune.ssl.default-dh-param 2048 ssl-default-bind-options no-sslv3 no-tls-tickets ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA ssl-default-server-options no-sslv3 no-tls-tickets ssl-default-server-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
frontend Site01_Entrada_https bind *:443 ssl crt /etc/pki/certificado.pem option httplog balance source hash-type map-based sdbm log-format %ci:%cp\ -\ -\ [%Tl]\ <<%r>>\ %ST\ %B\ XXXX\ %sslc\ %sslv default_backend Site01_RealServers
NOTAS:
O uso do HAProxy não exige nenhuma configuração adicional nos servidores de aplicação (backends). Entretanto, os servidores de backend não receberão as requisições a partir dos endereços dos clientes reais. Todas as requisições serão feitas a partir do IP do servidor onde roda o HAProxy. Para que a aplicação tenha a visão do IP do cliente, o desenvolvedor deverá utilizar o campo X-FORWARDED-FOR no cabeçalho da requisição.
Outro ponto importante é que em balanceamento de conexões SSL, utilizando a configuração descrita neste artigo, toda a negociação dos parâmetros da conexão SSL é feita diretamente pelo HAproxy, retirando esta carga do servidor que roda a aplicação.
Para mais informações, consulte a documentação da ferramenta: http://www.haproxy.org/#docs
systemctl enable haproxy
systemctl start haproxy
systemctl stop haproxy
systemctl reload haproxy