JSPWiki logo
Strona główna
Zbieranina
Serwisy
Porady
Projekty
Humor sektora IT
TODO
Nowości
Ostatnie zmiany
Kontakt

Find pages
Unused pages
Undefined pages
Page Index

Set your name in
UserPreferences

Edit this page


Referenced by
Porady




JSPWiki v2.2.33


Java Tomcat_cluster_howto


Apache/Tomcat - budowa klastra przy użyciu Tomcata i Apacha

Strona ta przedstawia proste przepisy jak skonfigurować klaster złożony z serwerów Tomcat.

Klastrowanie aplikacji w Tomcacie polega (w uproszczeniu) na replikacji sesji pomiędzy poszczególnymi węzłami (nodami) klastra. Replikacja sesji polega na jej serializacji na jednym węźle i deserializacji na pozostałych. Aby serializacja się powiodła, wszystkie atrybuty sesji muszą implementować interfejs java.io.Serializable. Należy więc też brać pod uwagę rozmiar obiektów umieszczanych w sesji - serializacja dużych grafów obiektów może stać się wąskim gardłem klastra. Aby dana aplikacja mogła podlegać klasteryzacji należy dodać do deskryptora web.xml element <distributable/>.

Poniższe opracowanie opiera się na integracji apacha i tomcata.

Architektura systemu

  • serwer Apache ze skonfigurowanym wirtualnym hostem tomcat.example.com
  • skompilowana webaplikacja gotowa do zdeployowania na serwerach Tomcat (z elementem <distributable/> w web.xml)
  • dwie instalacje serwera Tomcat nazywane node1 i node2

Konfiguracja Tomcatów

Każdą instancję serwera Tomcat konfigurujemy w identyczny sposób. Różnić się będą jedynie numerem portu AJP Connectora oraz identyfikatorem JVM.

Zmiany w pliku server.xml w stosunku do wersji z instalacji:

Unikalna wartość atrybutu port w elemencie Server. Wartość ta musi być unikalna w obrębie całego komputera. Jeśli więc uruchamiamy kilka instancji Tomcata na jednej maszynie, to każda z nich musi mieć tutaj inną wartość.

<Server port="8005" shutdown="SHUTDOWN">

HTTP Connector nie jest potrzebny i najlepiej zupełnie zakomentować ten element.

    <Connector port="*080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="5443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />

AJP Connector do którego będzie podłączony Apache. Wartość atrybutu port musi być unikalna w obrębie całego komputera. Jeśli więc uruchamiamy kilka instancji Tomcata na jednej maszynie, to każda z nich musi mieć tutaj inną wartość.

    <Connector port="8009"
               enableLookups="false" redirectPort="5443" protocol="AJP/1.3" />

Unikalna wartość atrybutu jvmRoute w elemencie Engine. Wartość ta musi być unikalna w obrębie całego klastra, identyfikuje ona konkretny węzeł klastra.

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">

No i na sam koniec deklaracja samego klastra. Element Cluster musi być zawarty wewnątrz elementu Host.

        <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster">
                <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener" />
                <ClusterListener className="org.apache.catalina.cluster.session.JvmRouteSessionIDBinderListener" />
                <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
                       filter=".*\.gif;.*\.js;.*\.css;.*\.png;.*\.jpeg;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"
                       primaryIndicator="true" />
                <Valve className="org.apache.catalina.cluster.session.JvmRouteBinderValve"
                       enabled="true"  />
        </Cluster>

Konfiguracja Apacza

Edytujemy konfigurację hosta wirtualnego w następujący sposób:

<VirtualHost *>
        <Location /manager>
                 SetHandler balancer-manager
        </Location>

        ServerName tomcat.example.com
        ProxyPass /app  balancer://cluster stickysession=JSESSIONID
        <Proxy balancer://cluster>
                BalancerMember ajp://localhost:8009/app route=node1
                BalancerMember ajp://localhost:9009/app route=node2
        </Proxy>
</VirtualHost>
Podana wyżej, podstawowa konfiguracja klastra działa jak następuje:
  • udostępnia pod URI /manager konsolę administracyjną apacza pozwalającą na włączenie/wyłączanie poszczególnych węzłów oraz podgląd ich stanu (dostęp do tej konsoli powinien być ograniczony, apacz posiada wiele sposobów pozwalających na to)
  • udostępnia pod URI /app klastrowany dostep do aplikacji app zdeployowanej na każdym z Tomcatów
  • parametrem stickysession określamy nazwę Cookie które przechowuje ID sesji
  • definiujemy dwa węzły klastra o podanych identyfikatorach i nasłuchujące na podanych portach




Go to top   Edit this page   More info...   Attach file...
This page last changed on 13-Sep-2006 21:51:28 GMT by mikolajr.