Recherche


imprimer pdf
Load Balancing Cisco ACE: configuration simple

Nous allons vous guider pas à pas dans la configuration d'un Loadbalancer au sein d'une baie virtuelle. Dans nos exemples, nous vous présentons une solution basée sur 2 serveurs d'une même baie virtuelle.

Prérequis:
- 2 serveurs de gamme EG/MG/HG
- les serveurs doivent posséder l'option utilisation professionnelle (nous aurons besoin d'une baie virtuelle pour configurer la connexion entre les hôtes et le boîtier ACE)
- les serveurs doivent se trouver dans une baie virtuelle
- vous devez posséder un Load Balancer ACE
- vous devez posséder un bloc d'IP RIPE

Tester le réseau privé



Configurez les deux serveurs en suivant le guide baie virtuelle.
Nous configurons au préalable l'ip 172.16.0.1 sur la première machine puis 172.16.0.2 sur la seconde machine etc.

IMPORTANT !!
Vous pouvez configurer 172.16.0.0/12 à l'exception des IP listées ci-dessous, vous ne devez en AUCUN CAS ajouter les IP suivantes comme interface sur votre machine:
  • 172.16.0.0 => IP Network
  • 172.31.255.248 => IP réservée utilisée dans notre exemple
  • 172.31.255.249 => IP réservée utilisée dans notre exemple
  • 172.31.255.250 => IP réservée utilisée dans notre exemple
  • 172.31.255.251 => IP réservée utilisée dans notre exemple
  • 172.31.255.252 => IP réservée utilisation interne OVH
  • 172.31.255.253 => IP reservée utilisation interne OVH
  • 172.31.255.254 => IP Gateway de votre baie de virtuelle


Vérifiez ensuite si vos serveurs arrivent à communiquer :

serveura:~# 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

serveurb:~# 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



Se connecter au Cisco ACE


Nous allons maintenant configurer le Load Balancer ACE.


Notez que par mesure de sécurité le ACE est lors de sa livraison accessible UNIQUEMENT depuis votre réseau privée.
Vous devez donc configuré un de vos serveurs dédié avec une IP privée. Une fois cela fait vous pouvez vous connecter depuis votre serveur dédié sur l'ip privée du loadbalancer afin de configurer une liste 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#

Entrez dans le mode de configuration et créez une ACL afin de pouvoir accéder depuis l'extérieur a votre ACE.
Pour trouver le vlan 'public' de votre ace vous pouvez faire un 'sh run'. L'interface qui contient les IP de votre bloc ripe est l'interface 'vlan public'.


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


Désormais le contexte ACE est accessible par ssh sur les IP public que vous pouvez également trouver dans le sh run.

Astuce !
Pour la suite, quand vous voyez "(config)" comme ci-dessus, vous devez faire ceci : Tapez "conf t" ou "configure" pour entrer dans le mode configuration puis quittez ensuite avec CTRL+Z une fois la configuration entrée.



Configurer le réseau privé


IMPORTANT !!
Nous utilisons un vlan dont le tag est proche du vôtre pour configurer l'accès au boitier ACE. Pour le vlan 2045, nous utilisons généralement le vlan 245. Il est cependant possible qu'il soit différent. Vous le retrouverez en faisant un "show running-config". Ne supprimez surtout pas l'interface vlan 245 ! Si vous faites cela, vous perdrez l'accès au Load Balancer et vous serez facturé pour la remise en état de la configuration par nos administrateurs.


Astuce !
Vous pouvez annuler une ligne entrée par erreur. Par exemple si pour la translation de port vous avez indiqué une mauvaise gateway, vérifiez votre configuration avec "show running interface" puis faites :
rbx-99-6k-ace-1/vrack1234# configure
rbx-99-6k-ace-1/vrack1234(config)# no ip address 172.16.0.10 255.255.255.255
Puis entrez la bonne règle :
rbx-99-6k-ace-1/vrack1234# configure
rbx-99-6k-ace-1/vrack1234(config)# ip address 172.16.0.10 255.240.0.0


D'abord, ajoutez "ANY" à l'acces-list pour autoriser l'icmp (le ping) et le tcp pour tout le monde :
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

Ensuite, définissez l'interface de la baie virtuelle pour l'utilisation interne.
OVH vous conseille d'utiliser la plage d'IP 172.0.0.0/12.

Votre ACE est destiné de faire du fault tolerance 0. Il est donc important pour vous de savoir qu'en cas de panne sur le 1er routeur le deuxième routeur doit pouvoir prendre la relève.
Ceci peut uniquement se faire si les interfaces sont bien configuré.

La configuration dans l'exemple sera fait ainsi:


  • 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



INFO !
La carte ACE qui est en standby n'est pas configurable ! Vous ne pouvez donc pas vous connecter dessus. La configuration se fait sur la carte ACTIVE qui va envoyer grace au FT ( fault tolerance group ) les informations vers la carte qui est en HOT standby.


Ajoutons donc tout d'abord l'interface réseau privé:

rbx-99-6k-ace-1/vrack1234#conf t
rbx-99-6k-ace-1/vrack1234(config)# interface vlan 1234
( remplacez 1234 par le tag de votre baie virtuelle )

Ajouter l'adresse privée à cette interface:
rbx-99-6k-ace-1/vrack1234(config-if)#ip address 172.31.255.250 255.240.0.0

Ajouter et envoyer l'ip qui sera sur le deuxième routeur:
rbx-99-6k-ace-1/vrack1234(config-if)#peer ip address 172.31.255.251 255.240.0.0

Définir l'alias pour les deux IP ci dessus:
rbx-99-6k-ace-1/vrack1234(config-if)#alias 172.31.255.249 255.240.0.0


Les 3 étapes au dessus ont donc configuré l'ip de l'interface vlan privée sur routeur1, routeur2, l'ip 'flottante' ( alias ) des deux.
Il nous reste l'ajout du nat-pool à faire. Nous faisons ici une translation de port vers les serveurs réels en 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

puis activer l'interface et autoriser le ping:
rbx-99-6k-ace-1/vrack1234(config-if)# access-group input ANY
rbx-99-6k-ace-1/vrack1234(config-if)# no shutdown



Vérifier cette configuration


Vérifiez si vos serveurs A et B sont accessibles via la baie virtuelle depuis l'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



Créer une ferme de serveur


Avant tout, nous demandons à l'ACE de verifier le fonctionnement de vos machines, nous définissons alors PROBE_TCP avec un intervalle de 30 secondes et 60 secondes en cas d'erreur:
rbx-99-6k-ace-1/vrack1234(config)# probe tcp PROBE_TCP
interval 30
passdetect interval 60


Déclarez les serveurs dédiés. Nous annoncons les machines du loadbalancing, ainsi que leurs ip et le protocole de connexion à suivre.
Dans cet exemple, nous mettons une limite de connexion de 50000 pour prévenir les surcharges:
rbx-99-6k-ace-1/vrack1234(config)# rserver host SERVER1 # remplacez SERVER1 par le nom de votre premier serveur
ip address 172.16.0.1
conn-limit max 50000 min 40000
inservice
rbx-99-6k-ace-1/vrack1234(config)# rserver host SERVER2 # remplacez SERVER2 par le nom de votre second serveur
ip address 172.16.0.2
conn-limit max 50000 min 40000
inservice


Créez une Ferme de serveur
Dans cet exemple, la ferme s'appelera FARM_WEB, nous utiliserons la méthode "predictor leastconns" qui crée un Load Balancer basé sur le nombre de connexion. Nous utilisons ici le PROBE_TCP configuré plus tôt:
rbx-99-6k-ace-1/vrack1234(config)# serverfarm host FARM_WEB
predictor leastconns
probe PROBE_TCP
rserver SERVER1 # remplacez SERVER1 par le nom de votre premier serveur
inservice
rserver SERVER2 # remplacez SERVER2 par le nom de votre second serveur
inservice



Configurer le Loadbalancing


Configurons le http-parameter-map, cela chargera l'ACE de modifier l'entête HTTP de telle manière à ce qu'il transmette chaque nouvelle requête à un serveur potentiellement nouveau:
rbx-99-6k-ace-1/vrack1234(config)# parameter-map type http HTTP_PARAMETER_MAP
persistence-rebalance

Nous allons maintenant définir un class-map pour sélectionner une partie du trafic entrant.
Dans cet exemple, nous utilisons l'IP 178.33.8.65 (l'une de votre bloc IP RIPE) et le port 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

Définissons maintenant le policy-map qui ajoute l'IP source du client dans dans l'entête HTTP lors de l'envoi du trafic vers le server-farm. Nous l'appelons 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"

Combinons les class-map L4-WEB-IP et WEB_L7_POLICY et appliquez 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 # remplacez 1234 parl e tag de votre baie virtuelle
appl-parameter http advanced-options HTTP_PARAMETER_MAP

Appliquons le service-policy et l'access-list à l'interface entrant du vlan:
rbx-99-6k-ace-1/vrack1234(config)# interface vlan 123 # si le tag de votre vrack est 2045, utilisez 245 ici. Il est cependant possible qu'il soit différent. Vous le retrouverez en faisant un "show running-config".
service-policy input WEB-to-vIPs
access-group input ANY


Exemple de configuration


Votre interface doit donc ressembler à ceci (178.33.8.77 est l'IP d'administration utilisée pour accéder au 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 du Load Balancer


Faites plusieurs 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




Documents additionnels

- Cisco Application Control Engine Module Load Balancing Guide
- Guide LoadBalancing ACE Simple Sticky
- Guide de lecture desinformations basiques sur l'état du Loadbalancer Cisco ACE
- Guide d'utilisation basique des statistiques d'un Loadbalancer Cisco ACE via SNMP