Po wstępie wyjaśniającym czym jest mod_cluster
oraz jak skompilować odpowiednie moduły potrzebne do jego uruchomienia czas na konfigurację.
Oto wpisy poświęcone konfiguracji modułowi mod_cluster
:
- Konfiguracja klastra oparta o moduł mod_cluster — wprowadzenie
- Konfiguracja klastra oparta o moduł mod_cluster — kompilacja modułów
- Konfiguracja klastra oparta o moduł mod_cluster – konfiguracja
Pobranie modułu mod_cluster
Odpowiednie pliku do ściągnięcie można znaleźć na stronie projektu. Ja użyłem wersji stabilnej oznaczonej jako 1.0.3 GA dla platformy 64 bitowej:
- java bundles – plik zawiera aplikację instalowaną w serwerze aplikacji JBoss
- dynamic libraries linux2-i64 – plik zawiera potrzebne moduły dla serwera Apache
Instalacja modułów w serwerze Apache
Należy pamiętać, że mod_cluster
wymaga wersji Apacha przynajmniej 2.2.8. Może to być problem w przypadku RHEL 5.5, ponieważ tutaj dostępna jest wersja 2.2.3. Należy w związku z tym zainstalować nowszą wersję aplikacji.
Należy rozpakować plik z bibliotekami dynamicznymi (mod_cluster-1.0.3.GA-linux2-x64-so.tar.gz
) i skopiować zawarte w nim biblioteki do katalogu /etc/httpd/modules
):
W przypadku gdy nie znajdziemy odpowiedniej wersji modułów, należy skompilować je samodzielnie.
Konfiguracja serwera WWW Apache
Jeżeli wszystko poszło OK, to powinniśmy już dysponować zainstalowanymi modułami potrzebnymi do działania klastra. Aby je włączyć, należy kazać je serwerowi Apache załadować i odpowiednio je skonfigurować.
Należy utworzyć plik /etc/httpd/conf.d/jboss.conf
. Pliki znajdujące się w tym katalogu i z rozszerzeniem conf
zostaną automatycznie wczytane podczas startu serwera i zinterpretowane. W pliku tym załadujemy potrzebne moduły oraz zdefiniujemy serwer wirtualny, w ramach którego będzie działa balansowanie ruchem.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | LoadModule slotmem_module modules/mod_slotmem.so LoadModule manager_module modules/mod_manager.so LoadModule proxy_cluster_module modules/mod_proxy_cluster.so LoadModule advertise_module modules/mod_advertise.so <VirtualHost 192.168.3.11:80> <Directory /> Order deny,allow Allow from all </Directory> KeepAliveTimeout 60 MaxKeepAliveRequests 0 AdvertiseFrequency 5 <Location /mod_cluster-manager> SetHandler mod_cluster-manager Order deny,allow Deny from all Allow from 127.0.0.1 </Location> </VirtualHost> |
Powyższy plik jest minimalnym plikiem, który pozwala nam uruchomić klaster. Jeżeli serwer Apache uruchomił się bez problemów, można uznać do za sukces i przystąpić do dalszych kroków.
Definicja serwera wirtualnego jest standardowa, poza następującymi elementami:
AdvertiseFrequency
– czas jaki musi upłynąć pomiędzy próbą wykrycia adresów IP oraz portu, domyślna wartość to 10 sekundSetHandler
– pozwala na wyświetlanie informacji o tym, jakie węzły klastra są widoczne przez modułmod_cluster
Problemy ze startem serwera Apache
W przypadku problemów trzeba jest najpierw rozwiązać. Ja spotkałem się z nastepującymi problemami:
Cannot load /etc/httpd/modules/mod_slotmem.so into server: /etc/httpd/modules/mod_slotmem.so: cannot open shared object file: No such file or directory
– brak możliwości otworzenia podanego pliku. Może to oznaczać:- brak pliku w podanej lokalizacji, czyli błędnie skopiowany plik
- błędne uprawnienia na plik (biblioteka powinna mieć ustawiony bity do odczytu i wykonywalności)
- próba wczytania biblioteki o złej architekturze (to przytrafiło się mi 🙂 ), można to sprawdzić w prosty sposób, wynik tego polecenia powinien zwrócić takie same informacje (poniżej są inne):
file /etc/httpd/modules/mod_slotmem.so /etc/httpd/modules/mod_alias.so
/etc/httpd/modules/mod_slotmem.so: ELF 64-bit LSB shared object, IA-64, version 1 (SYSV), not stripped
/etc/httpd/modules/mod_alias.so: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), stripped
Module mod_proxy_balancer is loaded it must be removed in order for mod_proxy_cluster to function properly
– komunikat pojawi się w w plikuerror.log
. Aby rozwiązać problem, należy usunąć ładowanie modułumod_proxy_balancer
. Można to zrobić edytując plik /etc/httpd/conf/httpd.conf i zakomentować linię:189#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
Instalacja modułu w serwerze aplikacji
Pierwszym krokiem jest skopiowanie aplikacji mod_cluster.sar
do katalogu deploy
danego serwera:
Teraz należy odpowiednio skonfigurować serwer aplikacji. Konfiguracja będzie dotyczyła aplikacji jbossweb.sar
znajdującej się w katalogu deploy
danej konfiguracji serwera. W pliku tym należy dodać następujący element (pod istniejącymi elementami Listener
):
9 10 11 | <Listener className="org.jboss.web.tomcat.service.deployers.MicrocontainerIntegrationLifecycleListener" delegateBeanName="ModClusterService"/> |
Drugą modyfikacją jest dodanie zmiennej jvmRoute
do sekcji Engine
:
36 | <Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1"> |
Na podstawie tej wartości dany węzeł będzie identyfikowany przez serwer Apache, wartość ta powinna być unikalna w ramach klastra.
Kolejnym plikiem który trzeb otworzyć jest deploy/jbossweb.sar/META-INF/jboss-beans.xml
. Do pliku tego należy dodać następujący w ramach definicji ziarna WebServer
następującą zależność:
17 | <depends>ModClusterService</depends> |
I to wszystko, teraz należy wystartować serwery Apache oraz JBoss i jeżeli nie wystąpią jakieś błędy to powinniśmy mieć już skonfigurowany load balancer. Można otworzyć lokalizację mod_cluster-manager
na serwerze WWW i sprawdzić, czy mod_cluster
poprawnie wykrył klaster.
Pozostaje jeszcze skonfigurować pozostałe węzły klastra i również je uruchomić.