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