Busca


imprimir pdf
Load Balancing Cisco ACE: configuração simples

Neste guia iremos ajudá-lo passo-a-passo na configuração de um Loadbalancer num rack virtual. Nestes exemplos iremos basear-nos em 2 servidores dentro do mesmo Vrack.

Pré-requisitos:
- 2 servidores da gama EG/MG/HG
- os servidores devem possui a opção de utilização profissional (é necessário um rack virtual para configurar a ligação entre os hosts e o equipamento ACE)
- os servidores devem encontrar-se dentro de um rack virtual
- deve possuir um Load Balancer ACE
- deve possuir um bloco de IP RIPE

Testar a rede privada


Configure os 2 servidores seguindo o guia : Rack Virtual.
Vamos configurar previamente o IP 172.16.0.1 na primeira máquina e 172.16.0.2 na segunda máquina, etc

IMPORTANTE !!
Pode usar 172.16.0.0/12 à excepção dos IPs listados a seguir. Não deverá NUNCA adicionar os IPs seguintes como interface de rede da sua máquina:
  • 172.16.0.0 => IP Network
  • 172.31.255.248 => IP reservado utilizado no nosso exemplo
  • 172.31.255.249 => IP reservado utilizado no nosso exemplo
  • 172.31.255.250 => IP reservado utilizado no nosso exemplo
  • 172.31.255.251 => IP reservado utilizado no nosso exemplo
  • 172.31.255.252 => IP reservado a utilização interna OVH
  • 172.31.255.253 => IP reservado a utilização interna OVH
  • 172.31.255.254 => IP Gateway do seu rack virtual


Verifique de seguida se os seus servidores comunicam entre eles:

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

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



Ligar-se ao Cisco ACE


Vamos agora configurar o Load Balancer ACE.

Note que por medidas de segurança, a ACE é apenas acessível UNICAMENTE a partir da sua rede privada.
Deverá então configurar um dos servidores dedicados com um IP Privado. Após isso feito deverá ligar-se a partir
do seu servidor dedicado sobre o IP privado do loadbalanacer de forma a configurar uma lista 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#

Entre no modo de configuração e crie uma ACL de form aa poder aceder do exterior à sua ACE.
Para encontrar a vlan 'pública' da sua ACE poderá fazer um 'sh run'. A interface que contém os IPs do seu bloco Ripe
é a interface 'vlan pública'


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.AQUI 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


Agora o contexto ACE está disponível por SSH num dos IPs públicos que poderá igualmente encontrar no sh run.

Truque !
Ainda mais, quando vê "(config)", como aqui, deverá fazer o seguinte: Introduza "conf t" ou "configure" para entrar no modo de configuração e depois saia com o CTRL+Z após a configuração estar terminada.



Configurar a rede privada


IMPORTANTE !!
Utilizamos uma vlan cuja tag é relacionada com a tag do seu Vrack para configurar o acesso ao ACE. Para a Vlan 2045, utilizamos normalmente a vlan 245. É possível que hajam excepções. Encontrará o número da tag fazendo um "show running-config". Não apague acima de tudo a interface vlan 245 ! Se o fizer, perderá o acesso ao Load Balancer e a intervenção dos nossos administradores para voltar a re-estabelecê-lo ser-lhe-á facturada.


Truque !
Pode anular uma linha que introduziu por engano. Por exemplo, se na port translation que tinha indicado uma gateway incorrecta, verifique a sua configuração com "show running interface" e depois faça :
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
Depois introduza a configuração correcta :
rbx-99-6k-ace-1/vrack1234# configure
rbx-99-6k-ace-1/vrack1234(config)# ip address 172.16.0.10 255.240.0.0


Vamos começar por adicionar "ANY" à acces-list para autorizar ICMP (ping) e TCP para todos :
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

Des eguida, defina a interface do Vrack para utilização interna.
A OVH aconselha a utilizar a gama de IP 172.0.0.0/12.

O seu ACE está destinado a fazer "fault tolerance 0". É importante para si saber que em caso de falha no 1º router, o 2º routeur deve poder tomar conta da carga.
Isto apenas pode ser feito se as interfaces estiverem correctamente configuradas

A configuração deste exemplo será feita assim:


  • 172.31.255.248 => IP que será a NAT POOL
  • 172.31.255.249 => IP ALIAS ( que será encaminhado ou para o routeur #1 ou para o routeur #2 )
  • 172.31.255.250 => IP do routeur #1
  • 172.31.255.251 => IP do routeur #2



INFO !
A placa ACE não é configurável se estiver em standby ! Não poderá ligar-se à mesma. A configuração faz-se na placa ACTIVE que enviará, graças ao FT ( fault tolerance group ) as informações para a placa que está em HOT standby.


Vamos adicionar a interface de rede privada :

rbx-99-6k-ace-1/vrack1234#conf t
rbx-99-6k-ace-1/vrack1234(config)# interface vlan 1234
( substitua 1234 pela tag do seu Rack Virtual)

Adicionar o endereço privado a esta interface
rbx-99-6k-ace-1/vrack1234(config-if)#ip address 172.31.255.250 255.240.0.0

Adicionar e enviar o IP que estará no segundo router:
rbx-99-6k-ace-1/vrack1234(config-if)#peer ip address 172.31.255.251 255.240.0.0

Definir o alias para os 2 IP acima referidos:
rbx-99-6k-ace-1/vrack1234(config-if)#alias 172.31.255.249 255.240.0.0


As 3 etapas acima serviram para configurar a interface Vlan privada no router1, router2 e o IP "flutuante" (alias) das duas interfaces.
Resta agora adicionar a nat-pool. Vamos fazer aqui uma port translation para os servidores reais 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


e depois activar a interface e activar o ping:
rbx-99-6k-ace-1/vrack1234(config-if)# access-group input ANY
rbx-99-6k-ace-1/vrack1234(config-if)# no shutdown



Verificação da configuração


Verifique se os seus servidores A e B estão acessíveis no rack virtual a partir do 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



Criar uma "Server farm"


Antes de mais, vamos pedir ao ACE que verifique o correcto funcionamento das suas máquinas. Definimos então PROBE_TCP com um intervalo de 30 segundos e 60 segundos em caso de erro:
rbx-99-6k-ace-1/vrack1234(config)# probe tcp PROBE_TCP
interval 30
passdetect interval 60


Declare os servidores dedicado. Anunciamos aqui as máquinas do loadbalancing, bem como os seus IPs e o protocolo de comunicação a seguir.
Neste exemplo, vamos implementar um limite de ligações de 50000 para evitar as sobre-cargas:
rbx-99-6k-ace-1/vrack1234(config)# rserver host SERVER1 # substitua SERVER1 pelo nome do seu primeiro servidor
ip address 172.16.0.1
conn-limit max 50000 min 40000
inservice
rbx-99-6k-ace-1/vrack1234(config)# rserver host SERVER2 # substitua SERVER2 pelo nome do seu segundo servidor
ip address 172.16.0.2
conn-limit max 50000 min 40000
inservice


Crie uma Server Farm
Neste exemplo a Farm terá o nome FARM_WEB, e o método "predictor leastconns" será utilizado - isto criará um Load Balancer baseado no número de ligações. Será definido mais cedo o PROBE_TCP :
rbx-99-6k-ace-1/vrack1234(config)# serverfarm host FARM_WEB
predictor leastconns
probe PROBE_TCP
rserver SERVER1 # substitua SERVER1 pelo nome do seu primeiro servidor
inservice
rserver SERVER2 # substitua SERVER2 pelo nome do seu segundo servidor
inservice



Configurar o Loadbalancing


Vamos comnfigurar http-parameter-map, isto encarregará o ACE de modificar o header HTTP de maneira a que este seja transmitido a cada novo pedido a um servidor potencialmente novo:
rbx-99-6k-ace-1/vrack1234(config)# parameter-map type http HTTP_PARAMETER_MAP
persistence-rebalance

Vamos agora definir uma class-map para selecionar uma parte do tráfego de entrada.
Neste exemplo, utilizaremos o IP 178.33.8.65 (um IP do seu bloco RIPE) e a 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

Definimos agora a policy-map que adiciona o IP de origem do cliente no cabeçalho HTTP aquando do envio de tráfego para a server-farm. Vamos chamar-lhe 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"

Vamos combinar as class-map L4-WEB-IP e WEB_L7_POLICY e aplicar 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 # troque 1234 pela tag do seu Vrack
appl-parameter http advanced-options HTTP_PARAMETER_MAP

Vamos aplicar o service-policy e a access-list na interface de entrada da vlan:
rbx-99-6k-ace-1/vrack1234(config)# interface vlan 123 # se a tag do seu vrack é 2045, utilise 245 aqui. É possível que o número sea diferente, verifique antes com "show running-config".
service-policy input WEB-to-vIPs
access-group input ANY


Exemplo de configuração


A sua interface deve assemelhar-se a isto (178.33.8.77 é o IP de administração usado para aceder ao 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



Teste do Load Balancer


Faça vários 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




Documentação adicional

- Cisco Application Control Engine Module Load Balancing Guide
- Guia de leitura das informações básicas do estado do LoadBalancer Cisco ACE
- Guia de utilização básica das estatísticas de um LoadBalancer Cisco ACE via SNMP
- Guia de LoadBalancing ACE Simple Sticky