Busca


imprimir pdf

LoadBalancing Simples para Vrack com Cisco ACE com persistência ("stickiness")


Este guia descreve uma repartição de carga simples com possibilidade de "sticky connections". Neste exemplo é usado o método HTTP-cookie.

Configuração Cisco ACE


OS pre-requisitos e a configuração inicial do servidor (A e B) são os mesmos descritos em pt_VrackLoadBalancingACESimple .
Algumas partes da configuração do ACE descritas anteriormente são aqui referidas sem detalhes.

Configuração Básica


access-lists:
rbx-99-6k-ace-1/vrack1234(config)# access-list ANY line 8 extended permit icmp any any
rbx-99-6k-ace-1/vrack1234(config)# access-list ANY line 16 extended permit ip any any


vlan interna:
rbx-99-6k-ace-1/vrack1234(config)# interface vlan 1234
ip address 192.168.1.10 255.255.255.0
access-group input ANY
nat-pool 1 192.168.1.254 192.168.1.254 netmask 255.255.255.0 pat
no shutdown


tcp probe:
rbx-99-6k-ace-1/vrack1234(config)# probe tcp PROBE_TCP
interval 30
passdetect interval 60


http-parameter map:
rbx-99-6k-ace-1/vrack1234(config)# parameter-map type http HTTP_PARAMETER_MAP
persistence-rebalance


real servers:
rbx-99-6k-ace-1/vrack1234(config)# rserver host SERVER1
ip address 192.168.1.1
conn-limit max 50000 min 40000
inservice
rbx-99-6k-ace-1/vrack1234(config)# rserver host SERVER2
ip address 192.168.1.2
conn-limit max 50000 min 40000
inservice


configuração da serverfarm:
rbx-99-6k-ace-1/vrack1234(config)# serverfarm host FARM_WEB
predictor leastconns
probe PROBE_TCP
rserver SERVER1
inservice
rserver SERVER2
inservice


Layer4 class-map:
rbx-99-6k-ace-1/vrack1234(config)# class-map match-all L4-WEB-IP
2 match virtual-address 188.123.123.123 tcp eq www


Configuração Stickiness (persistência)


Defina o nome da cookie e o parâmetro de timeout. Uma cookie com o nome "CookieACE" deverá ter sido enviada da webfarm para o cliente. Se essa cookie for encontrada, será guardada na base de dados de ligações "sticky" do ACE.
Definimos um timeout de 3600min e colocamos CookieACE no StickyGroup1? que está ligado à nossa FARM_WEB:
sticky http-cookie CookieACE StickyGroup1?
timeout 3600
serverfarm FARM_WEB


O próximo passo é a configuração "Layer7 policy-map loadbalance". Nesta parte teremos de usar o parâmetro "sticky-serverfarm" :
policy-map type loadbalance http first-match WEB_L7_POLICY
class class-default
sticky-serverfarm StickyGroup1?
insert-http x-forward header-value "%is"


Tal como no exemplo prévio, "policy-map multi-match WEB-to-vIPs" é usado para relacionar tudo:
policy-map multi-match WEB-to-vIPs
description Ties 4-WEB-IP class-map, WEB_L7_POLICY maps together and applies HTTP_PARAMETER_MAP. Uses NAT.
class L4-WEB-IP
loadbalance vip inservice
loadbalance policy WEB_L7_POLICY
loadbalance vip icmp-reply active
nat dynamic 1 vlan 1234
appl-parameter http advanced-options HTTP_PARAMETER_MAP


Defina as "service-policy" e "access-list" da interface VLAN
rbx-99-6k-ace-1/vrack1234(config)# interface vlan 123
service-policy input WEB-to-vIPs
access-group input ANY


Configuração das cookies

Num browser poderemos ver os detalhes das cookies:
Para testar a persistência vamos ter de configurar a cookie no website que precisa da "stickyness"
Vamos guardar o ficheiro cookie.php na raíz dos web-docs. Isto irá fazer com que uma cookie com nome CookieACE com um valor aleatório ou vai apresentá-la se já está definida no browser :


<html>
<head>
<?php
$n = 'CookieACE';
if( ! $_COOKIE["$n"]) {
$cookie=rand(1,10000);
echo '<meta http-equiv="Set-Cookie" content="'.$n.'='.$cookie.'; path=/" />';
}
?>
</head>
<body>
Hello from SERVER1
<?php
if($_COOKIE["$n"])
echo "Got cookie: $n = $cookie";
else
echo "New cookie set: $n = $cookie";
?>
</body>
</html>


Faça o mesmo no Server B, mas troque a mensagem por "Hello from SERVER2" para poder ver a diferença e saber imediatamente a qual dos servidores se ligou.

Teste ao LoadBalancing


Para testar a "stickiness", acedemos a http://188.123.123.123/cookie.php. Podemos ver, por exemplo:
Hello from SERVER1 set a new cookie: CookieACE = 3028


Agora se o seu browser aceita cookies, após um "refresh" o site deverá continuar a apresentar SERVER1.
Exemplo de um conjunto de respostas se tem cookies "ligadas" no seu browser:
Hello from SERVER1 Got cookie: CookieACE = 3028

Hello from SERVER1 Got cookie: CookieACE = 3028

Hello from SERVER1 Got cookie: CookieACE = 3028

Hello from SERVER1 Got cookie: CookieACE = 3028


Vamos "espreitar" a sticky database no ACE:
rbx-99-6k-ace-1/vrack1234# show sticky database
sticky group : StickyGroup1?
type : HTTP-COOKIE
timeout : 3600 timeout-activeconns : FALSE
sticky-entry rserver-instance time-to-expire flags
-----------------------------------------------------------------+-------+
12411268269029278684 SERVER1:0 215995 -


Está definida uma http-cookie do grupo StickyGroup1? . Podemos também ver lá o timeout do ACE, bem como o "cookie-type" e o nome (real server instance).

Enquanto a sessão TCP continua "alive", é possível ver a ligação estabelecida:
rbx-99-6k-ace-1/vrack1234# show conn port 80

conn-id np dir proto vlan source destination state

383186 1 in TCP 123 11.22.33.44:39277 188.123.123.123:80 ESTAB
230973 1 out TCP 1234 192.168.1.11:80 192.168.1.254:14013 ESTAB


No "lado do browser" poderá ver os detalhes da cookie:
1 cookie set:
Name CookieACE
Value 3028
Server 188.123.123.123
path /
secure No
expires End of session


Finalmente, após a remoção da cookie actual e da desactivação das cookies no seu browser, será possível verificar que pedidos diferentes são tratados por servidores diferentes da serverfarm (neste exemplo seriam apenas SERVER1 e SERVER2), MAS a sessão TCP tem que expirar - uma ligação TCP é gerida por um único servidor de cada vez.

Exemplo de repostas obtidas com as cookies desligadas:
Hello from SERVER1 set a new cookie: CookieACE = 6077

Hello from SERVER1 set a new cookie: CookieACE = 4231

Hello from SERVER2 set a new cookie: CookieACE = 4199

Hello from SERVER2 set a new cookie: CookieACE = 2803

Hello from SERVER1 set a new cookie: CookieACE = 926


Documentação adicional

-Cisco Application Control Engine Module Load Balancing Guide