Szukaj


drukuj pdf
Konfiguracja prostego loadbalancingu z Cisco ACE

Aby skonfigurować prosty loadbalancing dla 2 serwerów na Cisco ACE z monitoringiem opartym na tcp, postępuj zgodnie z poniższymi intrukcjami .

Wymagania wstępne
- 2 (hg/mg/eg) serwery, miedzy którymi tworzymy loadbalancing;
- Zastosowanie profesjonalne dla tych serwerów (będziemy wykorzystywać vlan pomiędzy hostami a urządzeniem ACE)
- Dostęp do Cisco ACE
- Blok IP RIPE (wykorzystamy tylko 1 IP)


Testowanie prywatnej sieci


Skonfiguruj oba serwery zgodnie z przewodnikiem http://pomoc.ovh.pl/vrack.
W pierwszej kolejności konfigurujemy ip 172.16.0.1 do 172.16.0.2 i pierszą maszynę na drugiej maszynie.

WAŻNE!!
Możesz wykorzystać IP 172.16.0.0/12 za wyjątkiem tych wymienionych poniżęj, NIE MOŻESZ konfigurować tych IP na interfejsach swoich serwerów:
  • 172.16.0.0 => IP Network
  • 172.31.255.248 => IP używane w naszym przykładzie
  • 172.31.255.249 => IP używane w naszym przykładzie
  • 172.31.255.250 => IP używane w naszym przykładzie
  • 172.31.255.251 => IP używane w naszym przykładzie
  • 172.31.255.252 => IP zarezerwowane do użytku OVH
  • 172.31.255.253 => IP zarezerwowane do użytku OVH
  • 172.31.255.254 => IP Gateway IP wirtualnej szafy


Następnie sprawdź czy serwery się komunikują :

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



Konfiguracja ACE


Przystępujemy do konfiguracji ACE Load Balancing.
Proszę mieć na uwadze, że dostęp do ACE będzie możliwy TYLKO z sieci prywatnej. Dlatego też trzeba skonfigurować jeden z serwerów na prywatny adres IP. Po tej operacji będzie możliwość połączenia z serwera dedykowanego aby skonfigurować ACLe

Połącz się z ACE z danymi jakie otrzymałeś w wiadomości email :

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-99-6k-ace-1/vrack1234#

Po zalogowaniu należy wejść do trybu konfiguracji w celu aktywacji dostępu z zewnątrz do ACE
Aby sprawdzić jaki jest adres publicznego 'vlan' dla ACE, należy użyć komendy 'sh run'.
Interfejs, który zawiera IP bloku RIPE, jest interfejsem '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 YOUR.ISP.IP.HERE 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

Dzięki tej operacji kontekst ACE stanie się dostępy z publicznego adresu IP, można to również znaleźć za pomocą 'sh run'.


Wskazówka !
Kiedy pojawi się opcja "(config)" tak jak na przykładzie, wykonaj następujące operacje: Wpisz "conf t" lub "configure" aby wejść w tryb konfiguracyjny, aby wyjść z tego trybu wciśnij CTRL + Z.



Konfiguracja sieci prywatnej


UWAGA !!
Będziemy wykorzystywać tag VLAN o numerze podobnym do twojego VLANu dla dostępu do ACE. Na przykład dla vlanu 2045, zwykle używamy tagu vlan 245. Może się jednak zdarzyć, że będzie to inny numer. Aby sprawdzić numer tagu wykonaj "show running-config". Nie usuwaj vlanu 245 z interfejsu! Jeżeli to zrobisz, stracisz możliwość zarządzania ACE a operacja przywrócenia konfiguracji domyślnej przez naszych administratorów zostanie przeprowadzona odpłatnie!


Wskazówka !
Możesz anulować błędny wpis. Na przykład, jeżeli dla przekierowania portu podana jest niewłaściwy gateway, sprawdź swoją konfigurację przy pomocy "show running interface" a następnie wykonaj:
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
Potem wprowadź poprawną regułę :
rbx-99-6k-ace-1/vrack1234# configure
rbx-99-6k-ace-1/vrack1234(config)# ip address 172.16.0.10 255.240.0.0


W pierwszej kolejności, dodaj "ANY" access-list aby umożliwić połączenia ICMP (ping) oraz TCP dla każdego:
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

Następnie zdefiniuj interfejs wirtualnej szafy do wewnętrznego użytku.
OVH zaleca użycie zakresu IP 172.0.0.0/12.

Twoje ACE domyślnie ma parametr fault tolerance ustawiony na 0. W przypadku awarii pierwszego routera, drugi router przejmie jego zadanie. Stanie się tak tylko w przypadku gdy interfejsy są skonfigurowane.

Ta konfiguracja także zostanie uwzględniona w tym przewodniku:

  • 172.31.255.248 => Ten IP stanie się NAT POOL
  • 172.31.255.249 => IP ALIAS (który trafia na router #1 lub #2)
  • 172.31.255.250 => IP of router #1
  • 172.31.255.251 => IP of router #2



INFO!
Karta w trybie standby na ACE nie jest konfigurowalna! Nie możesz się na nią zalogować. Konfiguracja jest wykonywana jedynie na karcie o statusie ACTIVE i dzięki FT (fault tolerance group) jest przesyłana do karty w trybie HOT standby.


Dodajmy pierwszy prywatny interfejs:

rbx-99-6k-ace-1/vrack1234#conf t
rbx-99-6k-ace-1/vrack1234(config)# interface vlan 1234
( zamieniając 1234 na tag wirtualnej szafy)

Dodaj prywatny adres do interfejsu:
rbx-99-6k-ace-1/vrack1234(config-if)#ip address 172.31.255.250 255.240.0.0

Dodaj i wyślij IP na drugi router:
rbx-99-6k-ace-1/vrack1234(config-if)#peer ip address 172.31.255.251 255.240.0.0

Dodaj alias do dwóch adresów IP:
rbx-99-6k-ace-1/vrack1234(config-if)#alias 172.31.255.249 255.240.0.0


Poprzednie 3 kroki spowodowały, że IP interfejsu vlanu jest przypisane do dwóch routerów jako alias.
Należy teraz dodać nat-pool. Będziemy korzystać z translacji portów na rzeczywiste serwery w 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

then activate the interface and allow the ping:
rbx-99-6k-ace-1/vrack1234(config-if)# access-group input ANY
rbx-99-6k-ace-1/vrack1234(config-if)# no shutdown

Sprawdzanie konfiguracji

Upewnij się, że serwery A i B są dostępne przez szafę wirtualną z 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



Tworzenie farmy serwerów

Po sprawdzeniu czy serwery są osiągalne z ACE, definiujemy PROBE_TCP co 30 sekund oraz 60 sekund w przypadku błędu:
rbx-99-6k-ace-1/vrack1234(config)# probe tcp PROBE_TCP
interval 30
passdetect interval 60

Dodaj serwery dedykowane. Rozgłaszamy loadbalancing dla maszyn.
W przykładzie ustawiamy limit połączeń na 50,000 aby uniknąć przeciążenia:

rbx-99-6k-ace-1/vrack1234(config)# rserver host SERVER1 # zamień SERVER1 na nazwę swojego pierwszego serwera
ip address 172.16.0.1
conn-limit max 50000 min 40000
inservice
rbx-99-6k-ace-1/vrack1234(config)# rserver host SERVER2 # zamień SERVER2 na nazwę swojego drugiego serwera
ip address 172.16.0.2
conn-limit max 50000 min 40000
inservice


Tworzymy farmę serwerów. W tym przykładzie nazwa farmy to FARM_WEB, będziemy korzystać z metody "leastconns predictor", która bazuje na liczbie połączeń do serwera. Korzystamy z PROBE_TCP skonfigurowanego wcześniej:

rbx-99-6k-ace-1/vrack1234(config)# serverfarm host FARM_WEB
predictor leastconns
probe PROBE_TCP
rserver SERVER1 # zamień SERVER1 na nazwę swojego pierwszego serwera
inservice
rserver SERVER2 # zamień SERVER2 na nazwę swojego drugiego serwera
inservice



Konfiguracja loadbalancingu


Ustaw http-parameter map. Na tej podstawie ACE modyfikuje HTTP header i przekierowuje każde nowe połączenie na nowy serwer:

rbx-99-6k-ace-1/vrack1234(config)# parameter-map type http HTTP_PARAMETER_MAP
persistence-rebalance

Następnie należy ustawić class-map dla ruchu przychodzącego. W tym celu korzystamy z IP 178.33.8.65 (jedno z bloku IP RIPE) oraz portu 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

Następnie dodajemy policy-map, które spowoduje, że IP użytkownika będzie widoczne w HTTP header podczas przekazywania ruchu do farmy serwerów. Nadajemy mu nazwę 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"

Łączymy class-map IP-WEB-L4 oraz WEB_L7_POLICY HTTP_PARAMETER_MAP i zatwierdzamy zmianę.
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 # zamień 1234 na tag wirtualnej szafy
appl-parameter http advanced-options HTTP_PARAMETER_MAP

Uruchamiany service-policy oraz access-list na interfejsie przychodzącym vlanu:
rbx-99-6k-ace-1/vrack1234(config)# interface vlan 123 # if your tag is vrack 2045, use 245 here. It is possible that it is different. You will find by doing a "show running-config".
service-policy input WEB-to-vIPs
access-group input ANY


Przykład konfiguracji

Twój interfejs powinien mieć następującą konfigurację (IP 178.33.8.77 to IP dostępu administracyjnego do 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



Testowanie LoadBalancing


Uruchom kilka sesji 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