Cerca


stampa pdf

Load Balancing di base su Cisco ACE con Stickiness



Questa guida descrive la configurazione di base diload balancing con la connessione sticky abilitata. In questo esempio, utilizzeremo il metodo HTTP-cookie per eseguirla.


Configurazione Cisco ACE

I requisiti richiesti e le configurazioni iniziali dei server (A e B) dovrebbero essere gli stessi riportati nella guida Configurazione di base su Cisco ACE.
Alcune parti della confgurazione ACE descritta in precedenza sarà riportata qui senza dettagli.


Configurazione di base

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


Server fisici:
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


Configurazione 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



Configurazione Stickiness

Impostazione nome cookie e parametri di timeout.

Ci aspettiamo un cookie chiamato CookieACE inviato dalla webfarm ad un client. Se viene identificato, allora sarà conservato sull'ACE in un database con connessione sticky.
Ipostiamo il timeout a 3600 minuti e inseriamo CookieACE in StickyGroup1 che sarà collegato alla nostra FARM_WEB:
sticky http-cookie CookieACE StickyGroup1
timeout 3600
serverfarm FARM_WEB


Il passo successivo consiste nella configurazione del load balancing sulla policy-map Layer7. In questa parte utilizzeremo i parametri della 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"


Come nell'esempio precedente, la policy-map multi-match WEB-to-vIPs è utilizzata per inserire tutte le configurazioni:
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


Applicazione delle service-policy e access-list all'interfaccia VLan in ingresso:
rbx-99-6k-ace-1/vrack1234(config)# interface vlan 123
service-policy input WEB-to-vIPs
access-group input ANY



Impostazione cookie del server

Per testare la configurazione stickiness, dobbiamo necessariamente impostare i cookie sul sito internet che li richiede.
Salviamo la pagina cookie.php nella cartella principale di root web-docs. Questo imposterà il nome del cookie a CookieACE con un valore casuale o semplicemente lo mostrerà quando sarà impostato sul 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>


Eseguiamo la stessa operazione sul Server B, ma inseriamo "Hello from SERVER2" per verificare la differenza tra le due macchine.


Testare il LoadBalancing

Per testare la configurazione stickiness colleghiamoci ad http://188.123.123.123/cookie.php. Ad esempio, potremo visualizzare:
Hello from SERVER1 set a new cookie: CookieACE = 3028


Ora, se il vostro browser accetta i cookies, dopo aver eseguito il refresh del sito dovreste ottenere risposta dal SERVER1.
Esempio di insieme di richieste con cookies abilitati nel 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


Controlliamo il database sticky su 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 -


Si può vedere un cookie http inviato da StickyGroup1. Potete anche verificare la presenza del timeout ACE come cookie-type, nome o identificativo del server fisico.

Quando la sessione TCP è attiva, è possibile verificare la connessione:
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


Lato browser invece, potrete vedere i dettagli del cookie:
1 cookie set:
Name CookieACE
Value 3028
Server 188.123.123.123
path /
secure No
expires End of session


Infine, dopo la rimozione di questa e disabilitando completamente i cookies nel browser, è possibile notare che le differenti richieste sono gestite da server diversi da serverfarm (ma la sessione TCP deve terminare - una sessione TCP è gestita da un rserver).

Esempio di insieme di richieste con cookies disabilitati:
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



Documentazione aggiuntiva

Guida Cisco Application Control Engine Module Load Balancing