Neste post será apresentado como utilizar o HAPROXY para ser utilizado como um proxy reverso na rede.
Em nosso exemplo será criado um contexto para uma aplicação no Jboss , para que a gente possa ver a requisição batendo na porta 80 e chegando em seguida na porta 8080 e 8081.
Lembrando que em um ambiente de proxy reverso estamos configurando por uma questão de segurança, apenas servidores em uma rede DMZ que tem regra de firewall e permissão conseguem encaminhar a requisição para um servidor de aplicação, não se trata de uma configuração somente para deixar a url amigável.
1) Ambiente :
10.0.0.38 – HAPROXY
10.0.0.51 – Jboss-01
10.0.0.52 – Jboss-02
2) Configurando o Jboss :
Configuração do Jboss / Wildfly :
http://fajlinux.com.br/appserver/wildfly-standalone/
Aplicação deployada nos servidores de aplicação :
https://github.com/fabioabreureis/Pacotes/blob/master/HelloWorld.war
3) Configuração do HAPROXY :
Em nosso exemplo iremos configurar via YUM
yum install haproxy -y
Confirme a versão com o comando haproxy -v
Arquivo de configuração inicial :
# Global settings global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 15000 user haproxy group haproxy daemon # Default config 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 # Dashboard listen stats :4997 mode http stats enable stats hide-version stats refresh 30s stats show-node stats realm Haproxy\ Statistics stats auth admin:haproxy stats uri /haproxy # Frontends settings frontend http-in bind *:80 # ACLs default_backend bk_fajlinux # Backend settings backend bk_fajlinux mode http server localhost 127.0.0.1:80
4) Configurando Proxy Reverso :
Segue abaixo a descrição das configurações utilizadas nos backends :
- option httplog – habilita log http
- option dontlognull – não loga conexões de checagem, evita log poluído
- option redispatch – limpa o cookie caso o backend caia
- option forwardfor – para empurrar o ip do cliente para o backend
- option httpclose – encerra conexões que já deveriam ter sido encerradas
- option forceclose – encerra conexões que já deveriam ter sido encerradas
- option persist – habilitando persistentica
- cookie SERVERID insert indirect nocache – injeta cookie na conexao
- balance roundrobin – tipo de balanceamento
- check – verifica se a porta está aberta no servidor do pool
- cookie – nome do cookie que será injetado no lado do cliente
- backup – A maquina só vai entrar se uma instância do pool estiver fora
- inter – checagens no backend a cada 2 segundos
- rise – A maquina só volta para o pool se tiver 2 checagens positivas
- fall – A maquina só sairá do pool se tiver pelo menos 3 checagens negativas
- maxconn – número máximo de conexões que a instância deve receber
- weight – quanto maior o valor mais conexões vão para ele
4.1) Proxy Reverso Simples :
Neste exemplo utilizaremos duas configurações onde uma será usada a url e outra um subdiretório.
Edite a configuração inicial utilizando o bloco da configuração abaixo :
# ACL for URL acl host_app1 hdr(host) -i app01.example.com # ACL for Subdirectories acl host_app2 path_beg -i /HelloWorld use_backend app1 if host_app1 use_backend app2 if host_app2 default_backend bk_fajlinux # Backend settings backend bk_fajlinux mode http server localhost 127.0.0.1:80 backend app1 mode http cookie SERVERID insert indirect nocache option httplog option dontlognull option forwardfor server app01 10.0.0.51:8080 backend app2 mode http cookie SERVERID insert indirect nocache option httplog option dontlognull option forwardfor server app02 10.0.0.52:8081
Chamando a url http://app01.example.com/HelloWorld/index.jsp
Chamando a url http://app02.example.com/HelloWorld
4.2) Proxy Balanceado :
No exemplo abaixo o backend está balanceando as requisições entre as aplicações
# ACL for URL acl host_applb hdr(host) -i applb.example.com use_backend applb if host_applb default_backend bk_fajlinux # Backend settings backend bk_fajlinux mode http server localhost 127.0.0.1:80 backend applb mode http cookie SERVERID insert indirect nocache option httplog option dontlognull option redispatch option forwardfor option httpclose option forceclose option persist server app01 10.0.0.51:8080 cookie A weight 1 maxconn 5000 inter 2s rise 2 fall 3 check server app02 10.0.0.52:8081 cookie B weight 1 maxconn 5000 inter 2s rise 2 fall 3 check
Chamando a url http://applb.example.com/HelloWorld
Estatísticas via console :
Referências :
http://blog.haproxy.com/2012/03/29/load-balancing-affinity-persistence-sticky-sessions-what-you-need-to-know/
http://gutocarvalho.net/octopress/2013/03/15/haproxy-balanceando-jboss/