Cerca


stampa pdf

Load Balancing Cisco ACE: configurazione semplice



Troverete qui la guida passo a passo per la configurazione di un Loadbalancer all'interno di una Rack Virtuale. Nei nostri esempi, vi presenteremo una soluzione basata su 2 server nella stessa Rack Virtuale.

Prerequisiti:

  • 2 server della gamma EG/MG/HG

  • entrambi i server dovranno possedere l'opzione Utilizzo Professionale (avremo bisogno di una rack virtuale per configurare la connessione tra gli host e il sistema ACE)

  • i server dovranno essere inseriti nella Rack Virtuale

  • dovrete possedere un sistema Load Balancer ACE

  • dovrete possedere un Blocco IP RIPE


Testare la Rete Privata

Configurate i due server seguendo la guida Rack Virtuale.
Configuriamo preventivamente l'IP 172.16.0.1 sulla prima macchina, quindi 172.16.0.2 sulla seconda macchine, ecc.

IMPORTANTE!!
Potete configurare il blocco 172.16.0.0/12 con l'eccezione degli IP elencati di seguito; non dovrete in NESSUN CASO aggiungere gli IP seguenti come interfacce sulla vostra macchina:
  • 172.16.0.0 => IP Network
  • 172.31.255.248 => IP riservato utilizzato nel nostro esempio
  • 172.31.255.249 => IP riservato utilizzato nel nostro esempio
  • 172.31.255.250 => IP riservato utilizzato nel nostro esempio
  • 172.31.255.251 => IP riservato utilizzato nel nostro esempio
  • 172.31.255.252 => IP riservato utilizzato internamente OVH
  • 172.31.255.253 => IP riservato utilizzato internamente OVH
  • 172.31.255.254 => IP Gateway della vostra Rack Virtuale


Verificate quindi se i vostri server siano in grado di comunicare:

serverA:~# ping -c3 172.16.0.2
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_seq=1 ttl=64 time=0.277 ms
64 bytes from 172.16.0.2: icmp_seq=2 ttl=64 time=0.261 ms
64 bytes from 172.16.0.2: icmp_seq=3 ttl=64 time=0.275 ms

serverB:~# ping -c3 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=0.277 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=0.261 ms
64 bytes from 172.16.0.1: icmp_seq=3 ttl=64 time=0.275 ms


Collegamento al Cisco ACE

Ora configureremo Load Balancer ACE.

Si noti che per motivi di sicurezza, ACE è disponibile al momento della consegna SOLTANTO dalla vostra rete privata.
Dovete dunque configurare uno dei vostri server dedicati con un IP privato. Una volta fatto è possibile connettersi dal vostro server dedicato sull'ip privato del loadbalancer al fine di configurare un ACL.

user@machine ~ ssh admin@172.31.255.249
Password:
Cisco Application Control Software (ACSW)
TAC support: http://www.cisco.com/tac
Copyright (c) 2002-2009, Cisco Systems, Inc. All rights reserved.
The copyrights to certain works contained herein are owned by
other third parties and are used and distributed under license.
Some parts of this software are covered under the GNU Public
License. A copy of the license is available at
http://www.gnu.org/licenses/gpl.html.
rbx-s1-6k/vrack1234#

Entrate nella modalità di configurazione e create un ACL per potere accedere dall'esterno al vostro ACE.
Per trovare il vlan "pubblico" del vostro ace potete fare un "sh run". L'interfaccia che contiene l'ip del vostro blocco ripe è l'interfaccia "vlan pubblico"


rbx-s1-ace/vrack2009# conf t
Enter configuration commands, one per line. End with CNTL/Z.
rbx-s1-ace/vrack2009(config)# class-map type management match-all PUBLIC_REMOTE
rbx-s1-ace/vrack2009(config-cmap-mgmt)# match protocol ssh source-address VOTRE.IP.ADSL.ICI 255.255.xxx.xxx
rbx-s1-ace/vrack2009(config-cmap-mgmt)# policy-map type management first-match REMOTE_PUBLIC_MGMT
rbx-s1-ace/vrack2009(config-pmap-mgmt)# class PUBLIC_REMOTE
rbx-s1-ace/vrack2009(config-pmap-mgmt-c)# permit
rbx-s1-ace/vrack2009(config-pmap-mgmt)# interface vlan209
rbx-s1-ace/vrack2009(config-if)# service-policy input REMOTE_PUBLIC_MGMT
rbx-s1-ace/vrack2009(config-if)# end
rbx-s1-ace/vrack2009# wr m
Generating configuration....
running config of context vrack2009 saved

Please wait ... sync to compact flash in progress.
This may take a few minutes to complete
Sync Done

Ora il contesto ACE è accessibile tramite ssh su IP pubblico che potete anche trovare nel sh run.

Trucco !
Per il futuro, quando vedete "(config)" come sopra, è necessario fare questo : Digitate "conf t" o "configure" per entrare nella modalità configurazione quindi uscire poi con CTRL+Z una volta inserita la configurazione.



Configurare la rete privata

IMPORTANTE!!
Utilizzeremo una VLan nella quale la tag sarà simile alla vostra per configurare l'accesso al sistema ACE. Per la VLan 2045, utilizzeremo generalmente la VLan 245. E' sempre possibile che siano comunque differenti. Potrete individuarla tramite il comando show running-config. Ricordate di non cancellare mai l'interfaccia vlan 245! Se eseguite questa operazione, perderete l'accesso al Load Balancer e dovrete richiedere un intervento a pagamento per ripristinarne la configurazione iniziale da parte dei nostri amministratori.


Suggerimento!
Potete annullare una intera linea per errore. Ad esempio, se per il port forwarding avete indicato un gateway sbagliato, verificate la vostra configurazione con il comando show running interface, quindi eseguite:
rbx-99-6k-ace-1/vrack1234# configure
rbx-99-6k-ace-1/vrack1234(config)# no ip address 72.16.0.10 255.255.255.255
Inserite poi la regola corretta:
rbx-99-6k-ace-1/vrack1234# configure
rbx-99-6k-ace-1/vrack1234(config)# ip address 172.16.0.10 255.240.0.0


In primo luogo, aggiugnete ANY all'access-list, per autorizzare l'ICMP (il ping) e il TCP per qualsiasi destinazione:
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

Quindi definite l'interfaccia della Rack Virtuale per l'uso interno.
OVH vi consiglia di utilizzare il range di IP 172.0.0.0/12.

Il vostro ACE è considerato avere tolleranza di guasto pari a 0. E' quindi importante per voi sapere che in caso di guasto sul primo router, il secondo deve entrare in azione.
Questo può essere fatto unicamente se le interfacce sono configurate correttamente.

La configurazione nell'esempio sarà quindi eseguita così:

  • 172.31.255.248 => IP qui deviendra le NAT POOL
  • 172.31.255.249 => IP ALIAS ( qui tombera soit sur routeur #1 ou routeur #2 )
  • 172.31.255.250 => IP du routeur #1
  • 172.31.255.251 => IP du routeur #2

INFORMAZIONE!
La scheda ACE che è in standby non è configurabile! Non potrete quindi collegarvi ad essa. La configurazione viene eseguita sulla scheda ATTIVA, che si occuperà di inviare le informazioni alla scheda in HOT standby tramite l'opzione FT (gruppo tolleranza di guasto).


Aggiungiamo quindi l'interfaccia di utilizzo della rete privata:

rbx-99-6k-ace-1/vrack1234#conf t
rbx-99-6k-ace-1/vrack1234(config)# interface vlan 1234
(sostituite 1234 con la tag della vostra rack virtuale)

Aggiungere l'indirizzo privato a questa interfaccia:
rbx-99-6k-ace-1/vrack1234(config-if)#ip address 172.31.255.250 255.240.0.0

Aggiungere ed inviare l'IP che si troverà sul secondo router:
rbx-99-6k-ace-1/vrack1234(config-if)#peer ip address 172.31.255.251 255.240.0.0

Definire l'alias per i due IP di seguito:
rbx-99-6k-ace-1/vrack1234(config-if)#alias 172.31.255.249 255.240.0.0


I 3 passaggi precedenti hanno quindi avuto lo scopo di configurare l'IP dell'interfaccia VLan Privata sul routeur1 e sul routeur2, l'IP 'flottante' ( alias ) dei due.
Non resta altro da fare che aggiugnere un nat-pool. Effettueremo un port forwarding verso i server reali in NAT:

rbx-99-6k-ace-1/vrack1234(config-if)# nat-pool 1 172.31.255.248 172.31.255.248 netmask 255.240.0.0 pat

quindi attiveremo l'interfaccia ed autorizzeremo il ping:
rbx-99-6k-ace-1/vrack1234(config-if)# access-group input ANY
rbx-99-6k-ace-1/vrack1234(config-if)# no shutdown


Verificare questa configurazione

Verificate ora se i vostri server A e B siano accessibili tramite VRack dall'ACE:
rbx-s1-ace/vrack2199# ping 172.16.0.1
Pinging 172.16.0.1 with timeout = 2, count = 5, size = 100 ....

Response from 172.16.0.1 : seq 1 time 0.295 ms
Response from 172.16.0.1 : seq 2 time 0.161 ms
Response from 172.16.0.1 : seq 3 time 0.080 ms
Response from 172.16.0.1 : seq 4 time 0.160 ms
Response from 172.16.0.1 : seq 5 time 0.176 ms
5 packet sent, 5 responses received, 0% packet loss

rbx-s1-ace/vrack2199# ping 172.16.0.2
Pinging 172.16.0.2 with timeout = 2, count = 5, size = 100 ....

Response from 172.16.0.2 : seq 1 time 0.392 ms
Response from 172.16.0.2 : seq 2 time 0.378 ms
Response from 172.16.0.2 : seq 3 time 0.338 ms
Response from 172.16.0.2 : seq 4 time 0.302 ms
Response from 172.16.0.2 : seq 5 time 0.276 ms
5 packet sent, 5 responses received, 0% packet loss


Creare un blocco di server

Per prima cosa, richiediamo all'ACE di verificare il corretto funzionamento delle vostre macchine; definiremo quindi PROBE_TCP con un intervallo di 30 secondi e di 60 secondi in caso di errore:
rbx-99-6k-ace-1/vrack1234(config)# probe tcp PROBE_TCP
interval 30
passdetect interval 60


Andranno quindi dichiarati i server dedicati. Annunceremo le macchine del loadbalancing, i loro IP ed i protocolli di connessione da utilizzare.
In questo esempio, inseriremo un limite di connessione di 50000 per prevenire sovraccarichi:
rbx-99-6k-ace-1/vrack1234(config)# rserver host SERVER1 # sostituite SERVER1 con il nome del vostro primo server
ip address 172.16.0.1
conn-limit max 50000 min 40000
inservice
rbx-99-6k-ace-1/vrack1234(config)# rserver host SERVER2 # sostituite SERVER2 con il nome del vostro secondo server
ip address 172.16.0.2
conn-limit max 50000 min 40000
inservice


Create un Blocco di Server:
In questo esempio, il blocco si chiamerà FARM_WEB e utilizzaremo il metodo predictor leastconns che crea un Load Balancer basato sul numero di connessioni. Utilizzeremo qui il PROBE_TCP configurato precedentemente:
rbx-99-6k-ace-1/vrack1234(config)# serverfarm host FARM_WEB
predictor leastconns
probe PROBE_TCP
rserver SERVER1 # sostituite SERVER1 con il nome del vostro primo server
inservice
rserver SERVER2 # sostituite SERVER2 con il nome del vostro secondo server
inservice


Configurare il Loadbalancing

Configuriamo il http-parameter-map, che incaricherà l'ACE di modificare l'intestazione HTTP in maniera tale che questa trasmetterà ogni nuova richiesta ad un server potenzialmente nuovo:
rbx-99-6k-ace-1/vrack1234(config)# parameter-map type http HTTP_PARAMETER_MAP
persistence-rebalance

Ora sarà necessario definire una class-map per selezionare una sezione del traffico in entrata.
In questo esempio, utilizziamo l'IP 178.33.8.65 (appartenente al vostro blocco IP RIPE) e la porta 80 (www):
rbx-99-6k-ace-1/vrack1234(config)# class-map match-all L4-WEB-IP
2 match virtual-address 178.33.8.65 tcp eq www

Definiamo ora la policy-map che aggiunge l'IP sorgente del cliente all'intestazione HTTP durante l'invio del traffico verso la server-farm. Chiameremo questa policy WEB_L7_POLICY:
rbx-99-6k-ace-1/vrack1234(config)# policy-map type loadbalance http first-match WEB_L7_POLICY
class class-default
serverfarm FARM_WEB
insert-http x-forward header-value "%is"

Combiniamo le class-map L4-WEB-IP e WEB_L7_POLICY, e applichiamo la HTTP_PARAMETER_MAP.
rbx-99-6k-ace-1/vrack1234(config)# policy-map multi-match WEB-to-vIPs
class L4-WEB-IP
loadbalance vip inservice
loadbalance policy WEB_L7_POLICY
loadbalance vip icmp-reply active
nat dynamic 1 vlan 1234 # sostituite 1234 con la tag della vostra rack virtuale
appl-parameter http advanced-options HTTP_PARAMETER_MAP

Applichiamo le service-policy e l'access-list all'interfaccia di ingresso della vlan:
rbx-99-6k-ace-1/vrack1234(config)# interface vlan 123 # se la tag della vostra vrack è 2045, qui dovrete utilizzare 245. E' tuttavia possibile che sia diversa. Potrete individuarla tramite il comando show running-config.
service-policy input WEB-to-vIPs
access-group input ANY


Esempio di Configurazione

La vostra interfaccia dovrebbe quindi essere simile a questa (178.33.8.77 è l'IP di amministrazione utilizzato per accedere al Load Balancer ACE):
rbx-99-6k-ace-1/vrack1234# show running-config
Generating configuration....

access-list ANY line 8 extended permit icmp any any
access-list ANY line 16 extended permit ip any any

probe tcp PROBE_TCP
interval 30
passdetect interval 60

parameter-map type http HTTP_PARAMETER_MAP
persistence-rebalance

rserver host testvrack1.ovh.net
ip address 172.16.0.1
conn-limit max 50000 min 40000
inservice
rserver host tesvrack2.ovh.net
ip address 172.16.0.2
conn-limit max 50000 min 40000
inservice

serverfarm host FARM_WEB
predictor leastconns
probe PROBE_TCP
rserver testvrack1.ovh.net
inservice

class-map match-all L4-WEB-IP
2 match virtual-address 178.33.8.65 tcp eq www
class-map type management match-all REMOTE_ACCESS
2 match protocol ssh any
class-map type management match-all TEST
2 match protocol icmp any

policy-map type management first-match REMOTE_MGMT_ALLOW_POLICY
class REMOTE_ACCESS
permit
policy-map type management first-match TEST_ALLOW
class TEST
permit

policy-map type loadbalance http first-match WEB_L7_POLICY
class class-default
serverfarm FARM_WEB
insert-http x-forward header-value "%is"

policy-map multi-match WEB-to-vIPs
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

interface vlan 123
ip address 178.33.8.77 255.255.255.240
access-group input ANY
service-policy input REMOTE_MGMT_ALLOW_POLICY
service-policy input WEB-to-vIPs
no shutdown
interface vlan 1234
ip address 172.31.255.251 255.240.0.0
access-group input ANY
nat-pool 1 172.31.255.250 172.31.255.250 netmask 255.240.0.0 pat
service-policy input TEST_ALLOW
no shutdown


Test del Load Balancer

Eseguite diversi telnet:
user@machine ~ telnet 178.33.8.65 80
Trying 178.33.8.65...
Connected to 178.33.8.65.
Escape character is '^]'.
GET /



Apache (Debian) Server at 172.16.0.1 Port 80




user@machine ~] telnet 178.33.8.65 80
Trying 178.33.8.65...
Connected to 178.33.8.65.
Escape character is '^]'.
GET /



Apache (Debian) Server at 172.16.0.2 Port 80



Come si può vedere, le origini di queste richieste sono gli IP 10.0.0.1 e 10.0.0.2. La configurazione semplice è quindi pronta.


Altre informazioni

: Guida Cisco Application Control Engine Module Load Balancing
: Guida al LoadBalancing ACE con opzione Sticky
: Guida alla lettura delle informazioni di base sullo stato del Loadbalancer Cisco ACE
: Guida di base all'uso delle statistiche di un Loadbalancer Cisco ACE via SNMP