poniedziałek, 14 kwietnia 2014

Konfiguracja klastra Tomcat 7 na praktycznym przykładzie z wykorzystaniem VirtualBox’a

W poniższym artykule zaprezentuję jak skonfigurować klaster opary na serwerze aplikacyjnym Apache Tomcat 7. Aby nadać całości lepszego „smaku” postanowiłem oprzeć swoje rozwiązanie na VirtualBox’ie tak, aby każda maszyna wirtualna symulowała jedną, niezależną maszynę sprzętową. Poniższy schemat sieciowy przedstawia poszczególne części klastra.
Rys. 1 Schemat sieciowy klastra.

Klaster… klaster… klaster… w ogóle co to takiego? I po co to właściwie? Według Wikipedii klastrem komputerowym nazywamy grupę połączonych jednostek komputerowych, które współpracują ze sobą w celu udostępnienia zintegrowanego środowiska pracy. Bazując na definicji z Wikipedii klastrem w tym konkretnym przykładzie można nazwać wiele instancji serwera www, które tworzą jeden wspólny rozproszony serwer www. Uff… definicja już za mną, a teraz druga część pytania, po co to?! Otóż uruchamiając aplikację www na jednym serwerze musimy się liczyć z kilkoma dość poważnymi zagrożeniami. Jeden serwer www po prostu może sobie nie poradzić z odbieraniem i przetwarzaniem dość dużej ilości żądań. Kolejnym przykładem zagrożenia może być fizyczna awaria maszyny. Jeśli serwer przestanie działać, aplikacja natychmiast stanie się niedostępna. Dzięki zastosowaniu klastra wymienione problemy nie mają prawa zaistnieć. Nadesłane żądania będą rozkładana na poszczególne węzły klastra, a w przypadku awarii jednego z węzłów ruch zostanie przekierowany na inny węzeł. Dość gadania… bierzmy się do pracy!

Konfiguracja VirtualBox'a

Pierwszym krokiem jest utworzenie wirtualnej maszyny oraz zainstalowanie na niej systemu operacyjnego Ubuntu 13.10 wersji 32 bitowej. Następnie należy wykonać dwie pełne kopie utworzonej maszyny wirtualnej. Przed uruchomieniem poszczególnych maszyn wirtualnych trzeba ponadto skonfigurować sieć w VirtualBox'ie. Czynność ta dzieli się na dwie części. Pierwsza część dotyczy sprawdzenia globalnych ustawień sieciowych. Musimy się upewnić czy wirtualna sieć VirtualBox Host-Only Ethernet Adapter posiada adres IP: 192.168.56.1 oraz maskę podsieci: 255.255.255.0.
File > Preferences... > Network > Host-only Networks > Ikonka śrubokrętu 

Rys. 2 Globalne ustawienia wirtualnej sieci.

Drugą czynnością jaką należy wykonać jest włączenie dla każdej maszyny wirtualnej dodatkowej karty sieciowej w trybie Host-only Adapter.
Prawym przyciskiem myszy na wybranej maszynie wirtualnej > Settings... > Network > Adapter 2 

Rys. 3 Ustawienia sieciowe aktywnej maszyny wirtualnej.

Pamiętajmy aby Promiscuous Mode było ustawiony na Allow All.

Konfiguracja Apache HTTP Serwer

Nareszcie możemy uruchomić naszą pierwszą maszynę wirtualną i przystąpić do konfiguracji serwera www Apache. Generalnie serwer będzie spełniał dwie funkcje:
  1. Równoważenie obciążenia – przekazywanie żądań do mniej zajętych instancji serwera Tomcat.
  2. Przełączanie po awarii – wykrywanie uszkodzonego węzła i przełączenie ruchu na inną instancję serwera Tomcat.
Pierwszym krokiem jaki należy wykonać jest edycja pliku systemowego /etc/hosts. Plik ten przechowuje adresy IP powiązane z nazwami hostów.
sudo gedit /etc/hosts
Zmieniamy jego treść na:
127.0.0.1 localhost
192.168.56.2 apache
Kolejnym plikiem, który należy zedytować jest plik /etc/hostname.
sudo gedit /etc/hostname
Zmieniamy jego treść na:
apache
Następnym krokiem w konfiguracji systemu jest edycja pliku /etc/network/interfaces. Plik ten przechowuje ustawienia interfejsów sieciowych. Zmieniamy jego domyślną treść na:
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.56.2 
netmask 255.255.255.0
gateway 192.168.56.1
broadcast 192.168.56.255
Po tych czynnościach możemy zrestartować maszynę wirtualną.

Nareszcie możemy przejść do instalacji serwera www Apache. Proces ten rozpoczynamy wpisując w konsoli następującą komendę:
sudo apt-get install apache2
Postępujemy zgodnie z zaleceniami instalatora. Poprawność instalacji możemy przetestować wpisując w oknie przeglądarki internetowej adres http://localhost. Jeśli naszym oczom ukaże się poniższa treść strony to znak, że serwer www Apache został poprawnie zainstalowany.

Rys. 4 Domyślna strona html serwera Apache.

Sama instalacja serwera Apache to niestety nie wszystko. Domyślna konfiguracja nie zawiera włączonych wszystkich wymaganych modułów. Aby włączyć niezbędne modułu należy wprowadzić poniższe komendy:
sudo a2enmod proxy
sudo a2enmod proxy_ajp
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo service apache2 restart
Gdy wszystkie moduły zostały poprawnie aktywowane następnym krokiem jest edycja pliku proxy.conf w katalogu /etc/apache2/mods-enabled. Plik ten zawiera szczegółowe ustawienia modułu mod_proxy, dzięki któremu nasz serwer Apache będzie działał jako load balancer przed instancjami serwera Tomcat. Zmieniamy domyślną treść pliku na:
<IfModule mod_proxy.c>
    ProxyRequests Off
    ProxyVia Off
    ProxyPreserveHost On
    
    ProxyPass /examples balancer://cluster/examples
    
    <Proxy balancer://cluster stickysession=JSESSIONID|jsessionid nofailover=Off scolonpathdelim=On>
        BalancerMember ajp://192.168.56.3:8009 min=10 max=100 route=tc1 loadfactor=1
        BalancerMember ajp://192.168.56.4:8009 min=20 max=200 route=tc2 loadfactor=1
        Order Deny,Allow
        Allow from all
    </Proxy>

     <Location /balancer-manager>
        SetHandler balancer-manager
        Order Deny,Allow
        Allow from all
    </Location>
</IfModule>
Po tych czynnościach pozostaje nam jeszcze restart serwera Apache.
sudo service apache2 restart 
Powyższa konfiguracja będzie równoważyć ruch dla zasobu /examples. Warto tutaj wspomnieć, że obciążenie będzie rozkładane równomiernie na dwie instancje Tomcata'a do czasu gdy serwer utworzy dla klienta sesję i wyśle mu znacznik JSESSIONID. Po tym czasie moduł mod_proxy_balancer będzie kierował każde żądanie tego klienta do tej samej instancji Tomcat'a.

Konfiguracja Apache Tomcat 7

Tak jak w przypadku maszyny wirtualnej z serwerem Apache pierwszym krokiem jakim należy wykonać tuż po uruchomieniu świeżego Ubuntu jest konfiguracja nazwy hosta i interfejsów sieciowych. Konfiguracja będzie przebiegała identycznie jak w sekcji wyżej. Pierwszym krokiem jaki należy wykonać jest edycja pliku systemowego /etc/hosts dla dwóch nowych maszyn wirtualnych.
sudo gedit /etc/hosts
Zmieniamy jego treść na:
127.0.0.1 localhost
192.168.56.3 tomcat-a
Natomiast dla drugiej maszyny wirtualnej na:
127.0.0.1 localhost
192.168.56.4 tomcat-b
Kolejnym plikiem, który należy zedytować jest plik /etc/hostname.
sudo gedit /etc/hostname
Zmieniamy jego treść na:
tomcat-a
Natomiast dla drugiej maszyny wirtualnej na:
tomcat-b
Następnym krokiem w konfiguracji systemów jest edycja pliku /etc/network/interfaces. Zmieniamy jego domyślną treść na:
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.56.3
netmask 255.255.255.0
gateway 192.168.56.1
broadcast 192.168.56.255
Natomiast dla drugiej maszyny wirtualnej na:
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.56.4
netmask 255.255.255.0
gateway 192.168.56.1
broadcast 192.168.56.255
Po tych czynnościach możemy zrestartować maszyny wirtualne.

Instalacja serwera Apache Tomcat 7 polega na jego pobraniu z oficjalnej strony http://tomcat.apache.org/download-70.cgi oraz rozpakowaniu w wybranym przez nas folderze. Przed uruchomieniem serwera należy upewnić się czy nasz system operacyjny posiada poprawnie zainstalowane środowisko uruchomieniowe Javy. Jeśli pobieranie serwera dobiegło ku końcowi możemy go rozpakować wpisując następującą komendę:
sudo tar -zxvf apache-tomcat-7.0.53.tar.gz
Przed uruchomieniem serwera należy zedytować dwa wpisy w pliku server.xml, który znajdujący się w katalogu apache-tomcat-7.0.53/conf. Czynność tą należy wykonać dla dwóch maszyn wirtualnych. Dla pierwszej maszyny wirtualnej wpisy powinny wyglądać następująco:
...
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
...
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tc1">
...
Natomiast dla drugiej maszyny wirtualnej:
...
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
...
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tc2">
...
UWAGA! parametr jvmRoute musi być unikatowy dla każdego z węzłów klastra.

Po tych czynnościach nie pozostaje nam nic innego jak uruchomienie serwerów Tomcat odpalając skrypt startup.sh.
sudo ./apache-tomcat-7.0.53/bin/startup.sh
Jeśli wszystko przebiegło poprawnie wpisując w oknie przeglądarki adres http://localhost:8080 powinniśmy otrzymać domyślną stronę startową serwera Tomcat.
Rys. 5 Domyślna strona startowa serwera Apache Tomcat 7.

Load Balancer Manager & Examples

Nadszedł czas aby przetestować nasz klaster. Serwer Apache udostępnia Load Balancer Manager, dzięki któremu możemy weryfikować status poszczególnych węzłów klastra. Jeśli wszystko zadziałało poprawnie powinniśmy otrzymać następujące rezultaty wpisują adresy http://192.168.56.2/balancer-manager oraz http://192.168.56.2/examples/ w pasek przeglądarki.
Rys. 6 Balancer Manager.
Rys. 7 Zasób /examples

Brak komentarzy:

Prześlij komentarz