wtorek, grudnia 02, 2008

Balancer, failover i wdrożenia zero-downtime

#################################
# INSTANCJA 443
#################################
<VirtualHost _default_:443>
ServerRoot "/etc/httpd"
ProxyPass /svc balancer://svcCluster443 stickysession=JSESSIONID

<Proxy balancer://svcCluster443>
BalancerMember http://10.70.10.2:8080/svc route=instance0 loadfactor=99
BalancerMember http://10.70.10.3:8080/svc route=instance1 loadfactor=1
BalancerMember http://localhost/maintenance route=maintenance loadfactor=1 status=+H
</Proxy>

<Location /balancer-manager>
Order Deny,Allow
Deny from all
Allow from 192.168.2.33
SetHandler balancer-manager
</Location>

</VirtualHost>


Apache 2.2.10 ma bardzo fajnego wbudowanego balancera. Załóżmy, że serwowana przez nas usługa ma być uaktualniona. Zestawiamy całe środowisko na instance1 i za pomocą balance managera zmieniamy wagi instance0 i instance1 - bieżące operacje zostaną dokończone na aktywnej instancji 0, a nowe będą wykonane przez instancję 1. Całkowicie transparentnie dla użytkownika końcowego. Żeby przełączanie działało tak jak chcemy musimy tylko wyedytować plik źródłowy httpd-2.2.10/modules/proxy/mod_proxy.c i zmienić ograniczenia na lbfactor (np. na zakres 1-1000000). Apache'a konfigurujemy następująco:

./configure --prefix=/usr/local/apache_balancer --enable-static-support --enable-mods-shared=all --enable-deflate=shared --enable-logio=shared --enable-mime-magic=shared --enable-expires=shared --enable-headers=shared --enable-usertrack=shared --enable-proxy=shared --enable-proxy-connect=shared --enable-proxy-ftp=shared --enable-proxy-http=shared --enable-proxy-balancer=shared --enable-ssl=shared --enable-http --enable-rewrite=shared

Gdyby usługa na instance0 zespuła się możemy zaserwować statyczną odpowiedź o awarii serwisu, służy do tego route=maintenance ze statusem ustawionym na +H (hot standby).
Hot standby nie działa na RedHacie 5.1/5.2 i SLES 10 SP2, które mają starszego Apache'a.

0 komentarze: