Konfiguracja klastra oparta o moduł mod_cluster – konfiguracja

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:

  1. Konfiguracja klastra oparta o moduł mod_cluster — wprowadzenie
  2. Konfiguracja klastra oparta o moduł mod_cluster — kompilacja modułów
  3. 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:

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):

cp mod_advertise.so mod_manager.so mod_proxy_cluster.so mod_slotmem.so /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 sekund
  • SetHandler – 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 pliku error.log. Aby rozwiązać problem, należy usunąć ładowanie modułu mod_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:

cp -a mod_cluster.sar $JBOSS_HOME/server/node1/deploy

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

Źródła

Tags: , , , ,

Konfiguracja klastra oparta o moduł mod_cluster – kompilacja modułów

Moduł mod_cluster jest dostępny dla kliku architektur, ale na pewno nie dal wszystkich. W moim przypadku wersja pobrana ze stron JBossa nie chciała działać z serwerem Apache. Nie pozostało więc nic innego, jak skompilować odpowiednie moduły ze źródeł. Na szczęście nie jest to trudne :).

Oto wpisy poświęcone konfiguracji modułowi mod_cluster:

  1. Konfiguracja klastra oparta o moduł mod_cluster — wprowadzenie
  2. Konfiguracja klastra oparta o moduł mod_cluster — kompilacja modułów
  3. Konfiguracja klastra oparta o moduł mod_cluster – konfiguracja

Krok 1: instalacja potrzebnych pakietów

Pierwszym krokiem jest rozstrzygnięcie, czy chcemy korzystać z wersji udostępnionej na stronie w postaci źródeł czy też pobrać najnowszą wersję modułów z systemu kontroli wersji. W pierwszym przypadku trzeba udać się na stronę pozwalająca ściągnąć źródła w odpowiedniej wersji.

W przypadku drugim należy zainstalować (jeżeli nie mamy) narzędzie Subversion. W moim przypadku komenda instalująca pakiet była następująca (musiałem wybrać wersję architektury, aby zainstalowała się odpowiednia wersja pakietu, prawdopodobnie nie jest to potrzebne w większości przypadków):

yum install subversion.x86_64

Kolejnym elementem jest instalacja dwóch pakietów:

  • autoconf – narzędzia potrzebne do konfiguracji kompilacji
  • httpd-devel – narzędzia i biblioteki potrzebne do budowania modułów dla serwera Apache
yum install autoconf
yum install httpd-devel-2.2.14-1.2.6.jdk6.ep5.el5.x86_64

I tutaj również musiałem bardzo szczegółowo podać wersję pakietu httpd-devel. Być może będziesz potrzebować innych pakietów więc w razie problemów w dalszych krokach będzie trzeba te braki uzupełnić.

Krok 2: pobranie źródeł

W celu pobrania źródeł pakietu z systemu kontroli wersji należy wydać następujące poleceni:

svn co http://anonsvn.jboss.org/repos/mod_cluster/trunk/ mod_cluster

Utworzy ono katalog mod_cluster i w nim zapisze pobrane źródła.

Można także pobrać źródła modułu ze strony Downloads.

Ja pobrałem aktualne źródła z repozytorium, w wersji o numerze 271.

Krok 3: kompilacja i instalacja modułów

Odpowiednie moduły skompilują poniższy zestaw instrukcji (powinny one zostać wykonane w katalogu mod_cluster/native:

1
2
3
4
5
6
7
8
9
for DIR in advertise mod_manager mod_proxy_cluster mod_slotmem
do
    cd $DIR
    sh buildconf
    ./configure --with-apxs=/usr/sbin/apxs
    make
    cp *.so /etc/httpd/modules/
    cd ..
done

Przed uruchomieniem powyższego skryptu proszę zwrócić uwagę na ścieżki dostępu, zarówno do narzędzia apxs jak i miejscu gdzie znajdują się moduły Apacha. Powyższy także kopiuje moduły do katalogu z modułami.

Jeżeli kompilacja przebiegła bez problemów, to odpowiednie moduły powinny już znaleźć się w katalogu z modułami Apache i można je używać.

Źródła

  • Building mod_cluster from sources

Tags: , , , , ,

Współpraca pluginów WP Super Cache oraz WPtouch

Na swoim blogu od praktycznie samego początku używam pluginu WPtouch. W przypadku wejścia na stronę poprzez jakieś urządzenie mobilne (w moim przypadku telefon z systemem Android) pozwala na wyświetlenie strony zoptymalizowanej pod takie urządzenie. Przeglądanie jej jest dożo wygodniejsze niż zwykłej strony utworzonej na potrzeby komputerów desktopowych.

W chwili wolnego czasu postanowiłem się zabezpieczyć przed potencjalnym efektem slashdotu, digga czy też wykopu :). Na razie raczej mi to nie grozi, ale przezorny zabezpieczony i tak dalej.

Jak plugin pozwalający na tworzeniu cachu stron wybrałem WP Super Cache. Konfiguracja przebiegła bez problemów, plugin zaczął działać zgodnie z oczekiwaniami, czas otarcia strony główne spadł z 3-4 sekund do jakiejś pół sekundy. I w sumie zgodnie z oczekiwaniami przestał działać plugin WPtouch, strony na telefonie wyglądały dokładnie tak samo jak na komputerze desktopowym.

Po krótkim szukaniu okazało się, że twórcy WPtouch przygotowali odpowiedni film, w którym umieszczono potrzebne instrukcje. W filmie przedstawia się jednak tylko jak skonfigurować współpracę przy włączonym trybie HALF ON Super Cache Disabled, only legacy WP-Cache caching. Instrukcja dotyczy także starszych wersji pluginów. Dla zainteresowanych link do filmu na dole strony, można go także znaleźć na stronie konfiguracyjnej WPtouch (mała uwaga, film oglądałem bez dźwięku, więc a nuż to co dalej piszę jest tam też przedstawione, w każdym razie mi nie było dane to usłyszeć).

W moim przypadku chciałem skorzystać z trybu WP Super Cache o nazwie ON WP Cache and Super Cache enabled, więc nie postało nic innego jak tylko sprawdzić co się stanie jak się będzie postępowało wg prezentowanych instrukcji.

Pierwszym krokiem jest otworzenie strony z konfigurację WP Super Cache i zaznaczenie opcji Mobile device support using WordPress Mobile Edition:

WP Super Cache - Mobile device support

WP Super Cache - Mobile device support

Pomimo, że opcja sugeruje integrację z pluginem WordPress Mobile Edition. I okazało się, że była to jedyna rzecz którą trzeba było zrobić. Wszystko zaczęło działać tak jak powinno, użytkownicy telefonów komórkowych zaczęli otrzymywać stronę sformatowanych specjalnie dla nich. Co prawda wygląda na to, że takie strony nie są przesyłane z pamięci podręcznej, tylko za każdym razem generowane, ale przynajmniej na razie nie jest to jeszcze żadnym problemem.

Źródła

Tags: , , , ,

Konfiguracja klastra oparta o moduł mod_cluster – wprowadzenie

Wpisem tym rozpoczynam serię poświęconą modułowi pozwalającemu na budowę łącza pomiędzy serwerem WWW Apache a serwerem aplikacji JBoss w wersji 5. Postaram się opisać sposób instalacji, kompilacji, konfiguracji, przygotowania do działania.

Oto wpisy poświęcone konfiguracji modułowi mod_cluster:

  1. Konfiguracja klastra oparta o moduł mod_cluster — wprowadzenie
  2. Konfiguracja klastra oparta o moduł mod_cluster — kompilacja modułów
  3. Konfiguracja klastra oparta o moduł mod_cluster – konfiguracja

Istnieją dwa główne sposoby na które można można udostępnić aplikację webową działającą na JBossie (lub też Tomcacie) w Internecie:

  • udostępnić bezpośredni dostęp do serwera aplikacji na którym jest zainstalowana aplikacja
  • wykorzystanie odpowiedniego pośrednika, który będzie pośredniczył pomiędzy wywołaniami z Internetu a serwerem aplikacji

Pierwszy sposób jest łatwy do realizacji, ale posiada kilka wad, takich jak:

  • brak wsparcia balansowania ruchem (w przypadku konfiguracji z klastrem)
  • brak optymalizacji wydajności (np. serwowanie statycznej treści z innych źródeł, bardziej wydajnych niż serwer aplikacji)
  • mniejsze bezpieczeństwo (trudniej zabezpieczyć serwer aplikacji z powodu dużej ilości działających usług)

Drugim sposobem jest udostępnienie odpowiednich usług poprzez pośrednika, który będzie przekierowywał połączenia przychodzące do aplikacji na serwerze JBoss. Rozwiązanie takie charakteryzuje się:

  • trudniejszą konfiguracją (trzeb skonfigurować zarówno pośrednika jak i serwer aplikacji)
  • wsparciem dla balansowania ruchem i failover
  • zwiększa bezpieczeństwo (udostępniamy tylko te aplikacje, na jakich nam zależy)
  • może zwiększyć wydajność rozwiązania (serwowanie statycznych fragmentów strony z innych źródeł niż serwer aplikacji)

Najczęściej używanym pośrednikiem w przypadku łączenia z JBossem lub Tomcatem jest serwer WWW Apache. W jego przypadku mamy możliwość skorzystania z trzech różnych modułów pozwalających na łączenie się z serwerem aplikacji:

  • mod_proxy – szybki i łatwy sposób konfiguracji, ale gorsze wsparcie klastrowania
  • mod_jk – zaawansowany moduł z dobrą obsługa klastrów, skomplikowany w konfiguracji
  • mod_cluster – nowo rozwijany moduł pozwalający na połączenie z serwerem aplikacji

Każdy z tych modułów konfiguruje się inaczej, mają także inne właściwości. Poniżej postaram się przedstawić sposób konfiguracji połączenie pomiędzy serwera Apacha z modułem mod_cluster a serwerem aplikacji JBoss.

Wymagania minimalne

Moduł mod_cluster posiada określone wymagania zarówno odnośnie serwera Apache jak JBoss:

  • serwer WWW Apache w wersji co najmniej 2.2.8
  • serwer JBoss w wersji co najmniej 5.0

Konfiguracja z której ja będę korzystał jest następująca:

  • system operacyjny: Red Hat Enterprise Linux 5.5 64bit
  • serwer WWW: Apache w wersji 2.2.14 – standardowe jest dostępna wersja 2.2.3, nowszą wersję serwera można pobrać z kanału JBoss EWS for 5Server x86_64
  • Java: wersja 1.6.20
  • serwer aplikacji JBoss EAP 5 – aby przetestować działanie klastra zostanie utworzony klaster składający się z trzech węzłów
  • moduł mod_cluster, wersja 1.1.0.CR2

Czym jest moduł mod_cluster

Moduł mod_cluster odpowiada za przeprowadzenia balansowanie ruchem bazującym o protokół HTTP. Pozwala on na przekierowanie żądań przychodzących do serwera WWW do jednego z węzłów klastra.

W przeciwieństwie do dwóch pozostałych modułów (mod_jk oraz mod_proxy) tworzy on dodatkowe połączenie pomiędzy poszczególnymi węzłami klastra a serwerem WWW. Poprzez do połączenie odpowiednia aplikacja po stronie serwera aplikacji informuje moduł mod_cluster o swojej sytuacji. Wykorzystuje w tym celu zestaw metod, zwanych Mod-Cluster Management Protocol (MCMP). Te dodatkowe informacje pozwalają na duże lepszą integrację serwera WWW z klastrem oraz lepsze zarządzanie przekazywanymi połączeniami.

Zalety mod_cluster

Najważniejsze zalety w stosunku do innych aplikacji odpowiedzialnych za balansowanie ruchem HTTP:

  • dynamiczna konfiguracja połączeń z węzłami klastra
  • obliczanie współczynników balansowania ruchem po stronie serwera
  • kontrola na cyklem życia aplikacji zainstalowanej na klastrze
  • opcjonalne użycie protokołu AJP

W następnych częściach przedstawię, w jaki sposób skonfigurować moduł mod_cluster do pracy z klastrem serwerów JBoss.

Źródła

Tags: , , , ,

Konwersja strony HTML do pliku PDF przy użyciu aplikacji wkhtmltopdf

Potrzebowałem aplikacji, która pozwoli mi na konwersję strony HTML na plik w formacie PDF. Wymagania były następujące:

  • prosta obsługa, najlepiej powinna ograniczyć się do podania źródła strony i nazwy pliku do zapisania
  • aplikacja powinna samodzielnie pobrać stronę (czyli odpada konieczność wcześniejszego jej ściągania na dysk)
  • w dokumencie powinny znaleźć się powiązanie grafiki
  • konieczność obsługi UTF-8 (polskie znaczki)
  • możliwość wywołania aplikacji przy użyciu linii poleceń

Aplikacją, która spełniła praktycznie wszystkie te wymagania jest wkhtmltopdf. Pozwala ona na konwersję strony HTML do pliku PDF. Wykorzystuje do tego silnik WebKit dostarczany z QT 4.4. Czyli nie dość że robi co do niej należy, to jeszcze korzysta z silnika wykorzystywanego przez przeglądarki internetowe (np. Safari., Chrome czy też Konqueror).

W środowisku Ubuntu instalacja aplikacji sprowadza się do wydania polecenia:

sudo aptitude install wkhtmltopdf

Użycie aplikacji jest też bardzo proste:

wkhtmltopdf http://blog.stelmisoft.pl/2010/konwersja-strony-html-do-pliku-pdf-przy-uzyciu-aplikacji-wkhtmltopdf strona.pdf

Powyższe polecenie zapisze stronę (tę którą właśnie czytasz) do pliku PDF.

Wersja aplikacji która przychodzi z Ubunut wymaga uruchomienia w środowisku X11. Aby pozbyć się tej zależności, należy poprać wersję statycznie skompilowaną ze strony projektu. Udostępnia ona także kilka innych możliwości, których nie znajdziemy w wersji dostarczanej w dystrybucji. Jednak nawet to wystarcza do zapisania strony w formacie PDF.

Źródła

Tags: , , , ,