O pai ta on!!
Dando continuidade à série de artigos sobre balanceadores, onde ja vimos como instalar um balanceador, como criar os nodes e monitors, e como vincular ambos em um pool, onde temos a junção de um node com uma porta de serviço (conhecido como pool-member).
Hoje daremos mais um passo e falaremos sobre profiles (que é onde conseguimos mexer em alguns parâmetros de TCP/HTTP e etc.) e persistências (que é como o bigIP vai garantir que sua conexão cai no mesmo servidor).
Profiles
Dentro do ‘Local Traffic’, clique em ‘Profiles’:
Existem vários tipos de profiles, desde HTTP, passando por web acceleration, indo até a TCP e SSL. Por conta do bigIP ser um full proxy ele é capaz de alterar os parâmetros dos protocolos que passam por ele, para assim otimizar a conexão. Os profiles são um método de estes alterar parâmetros.
Podemos então por exemplo, alterar o timeout de uma sessão HTTP, alterar o janelamento do TCP, e inserir informações no header.
Neste exemplo criaremos um profile HTTP, pois utilizaremos persistência no modo de coockie, e ter um profile HTTP é mandatório para isso.
Dentro de profiles, vá em “services”, e depois clique em HTTP:
Detalhamento do profile HTTP
De um nome para o profile (inicie com prof_http_(serviço)):
X-forwarded-for
O XFF é um recurso do HTTP, onde mantemos o IP de origem no header do HTTP. Esta opção é extremamente último quando a aplicação precisa ter rastreabilidade da conexão (aplicações de banco por exemplo). Como isso não influencia em nada no balanceador, recomendo deixá-la habilitada.
Profile Persistência
A persistência de sessão é uma característica do bigIP que garante que com base em alguns parâmetros a conexão sempre caia no mesmo servidor. Este tipo de característica é importante para casos que a aplicação trata algumas informações localmente (um carrinho de compras por exemplo).
Sem ela, se o cliente abrir uma conexão, cairia no server01, colocar 3 itens no carrinho de compras, e atualizar a página por exemplo, cairia em outro servidor e o carrinho de compras estaria vazio.
Existem vários tipos de persistência, sendo as mais usadas o cookie, que a persistência baseada em uma informação de cookie que o bigIP insere no navegador. E a source_addr, que é a persistência baseada no IP de origem da conexão.
Aqui se formos fazer o paralelo com a AWS, o mais próximo que o ELB pode fazer é o Stickiness, que é basicamente uma implementação da persistência por coockie, contudo não vejo isso como uma limitação. Em uma aplicação descentralizada, podemos ter o gerenciador de sessões em um dynamoDB, ou em um Redis. Utilizar persistências na prática (sob meu ponto de vista) acaba sendo um limitador de escalabilidade, uma vez que uma vez persistido a conexão, deleta-la significa necessariamente finalizar a sessão do usuário.
Cada uma tem sua particularidade, mas como regra geral se a aplicação for HTTP use coockie se for outra, ou use o sourceIP ou nenhuma persistência.
Persistência por cookie
Dê um nome para a persistência, iniciando com: pers_(tipo-da-persistência)_(serviço).Exemplo: pers_ck_sagara
Cookie Name
Esta opção é onde colocamos o nome do cookie que iremos inserir no browser. Esta informação é pode ser visualizada inclusive no browser pelo aplicativo: BIGIP Cookie Decoder, disponível na loja de aplicativos do chrome.
Expiration
Este é o tempo que o bigIP espera para ‘matar’ a sessão ativa (desde que ela não tenha tráfego). Por padrão o bigIP respeita as sessões da aplicação, contudo é possível alterar estes dados (vide exemplo abaixo):
Tempos de sessão default
Por padrão o apache possui um timeout de 300 segundos (5min), e o IIS possui um timeout de 20min.
É importante saber os temos default de cada servidor, pois caso você não altere o expiration no balanceador ele vai assumir
este tempo de persistência, e isso é MUITO importante.
Já tive um problema em que o usuário solicitava um relatório que era gerado em um banco de dados, contudo este relatório demorava uns 40min para ser gerado. Assim quando o usuário pedia o relatório, dava 5min a página era ‘atualizada’.
Isso acontecia justamente porque o tempo de timeout do apache tinha chegado ao limite. Resolvi o problema aumentando o tempo de timeout no bigIP.
Espero que tenham gostado!! No próximo artigo criaremos o virtual-server, e falaremos um pouco sobre estatísticas e tshoot.
That’s all folks! Be Happy!!!
thiago.marques@darede.com.br
Technical Account Manager da Darede, formato em Rede de Computadores, e pós graduado em Segurança da Informação. Possui ampla experiência em Datacenters e Service Providers, além de ser um entusiasta em DevOps e mercado financeiro.