|
Busca |
Este guia descreve uma repartição de carga simples com possibilidade de "sticky connections". Neste exemplo é usado o método HTTP-cookie. 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. 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 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: 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 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. 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 -Cisco Application Control Engine Module Load Balancing Guide |