Monday 16 January 2012

Tomcat cluster with mod_jk sticky session session replication

Przewodnik o tym jak zrobić klaster złożony z dwóch instacji tomcata połączonego load balancerem apache mod_jk i jak uruchomić replikację sesji oraz sticky-session. System operacyjny to lubuntu 11.10.

Z góry przepraszam, za dość surowe komendy. Nie jest to tutorial krok-po-korku ani książka, żeby rozlegle wszystko opisywać. Jest to tylko ściągawka na przyszłość, lub ekstrakt z tego co trzeba zrobić.

Adres IP należy zmienić z 10.0.0.90 na localhost czy gdzie tam wasz serwerek się znajduje.

1. Do zainstalowania:
apt-get install apache2 libapache2-mod-jk2-mod-jk

2. Utworzyć katalog:

/tcluster/instance1

3. Pobrać Tomcata i rozpakować zawartość do tego katalogu.

4. Konfiguracja Apache mod_jk
- utwórz plik /etc/apache2/workers.properties:

worker.list=loadbalancer,mystat

worker.worker1.type=ajp13
worker.worker1.host=10.0.0.90
worker.worker1.port=8881
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300

worker.worker2.type=ajp13
worker.worker2.host=10.0.0.90
worker.worker2.port=8882
worker.worker2.lbfactor=50
worker.worker2.cachesize=10
worker.worker2.cache_timeout=600
worker.worker2.socket_keepalive=1
worker.worker2.socket_timeout=300

worker.loadbalancer.type=lb
worker.loadbalancer.sticky_session=true
worker.loadbalancer.balance_workers=worker1,worker2

worker.mystat.type=status
Ważna jest nazwa workera ( worker1 oraz worker2 ) adres IP oraz port.

- do pliku /etc/apache2/ports.conf dodaj:
Listen 8585

- zmień zawartość pliku:
/etc/apache2/mods-enabled/jk.conf na:
JKWorkersFile /etc/apache2/workers.properties

JkLogFile /var/log/apache2/mod_jk.log

JkLogLevel debug

JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

JkRequestLogFormat "%w %V %T"


- dodaj nasłuch na porcie 8585 dla mod_jk:
/etc/apache2/sites-enabled/000-default
<VirtualHost *:8585>
        JkMount /* loadbalancer
        JkMount /jkstatus mystat
</VirtualHost>



5. Konfiguracja instancji nr 1:
- Zmień plik /tcluster/instance1/conf/server.xml tak aby przypominał:
...
<Connector port="8871" protocol="HTTP/1.1" /> 
...
<Connector port="8881" protocol="AJP/1.3" redirectPort="8443" />
.... <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1"> .... <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
Connectora się odkomentowywuje, jvmRoute trzeba dopisać, pole cluster się odkomentowywuje.

- Ściągnij z internetu http://code.google.com/p/psi-probe/ plik war i umieść go w katalogu webapps. Jest to aplikacja która może się później przydać.

-Dodaj użytkowników do tomcata:

/tcluster/instance1/conf/tomcat-users.xml
<tomcat-users>
...
  <role rolename="manager"/>
  <user username="admin" password="jakieshaslo" roles="manager"/>
</tomcat-users>



- Przejdź do katalogu: /tcluster/instance1/webapps
Zmodyfikuj examples/WEB-INF/web.xml dodając distributable:
<web-app ....>
  <distributable/>
</web-app>

6. Konfiguracja instancji nr 2:
- Skopiuj zawartość pliku /tcluster/instance1 do /tcluster/instance2
- Zmień plik /tcluster/instance2/conf/server.xml tak aby zmienić:

<Server port="8006" shutdown="SHUTDOWN">
...
<Connector port="8872" protocol="HTTP/1.1" /> 
...
<Connector port="8882" protocol="AJP/1.3" redirectPort="8443" />
....
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">

6. Testowanie
Uruchamiamy wszystko:


/etc/init.d/apache start
/tcluster/instance1/bin/startup.sh
/tcluster/instance2/bin/startup.sh


Testy przeprowadzić najlepiej za pomocą aplikacji z przykładów:
W moim przypadku jest to:

http://10.0.0.90:8871/examples/servlets/servlet/SessionExample

Mamy trzy porty HTTP:
- 8871 - instancja nr 1
- 8872 - instancja nr 2
- 8585 - load balancer

Po dodaniu jakiegoś aktrybutu sesji i zmianie portu z 8871 na 8872 powinniśmy mieć ten sam SessionID (Sticky-session) oraz te same atrybuty(Replikacja sesji).

7. Dodatkowa analiza:
- Panel z informacja o mod_jk:

http://10.0.0.90:8585/jkstatus

-Probe (narzędzie do monitorowania) dostępne na danej instancji:


http://10.0.0.90:8871/probe
http://10.0.0.90:8872/probe

8 comments:

  1. Czy to działa z aplikacjami napisanymi w GWT?

    ReplyDelete
    Replies
    1. Jak GWT jest dobrze zrobiony, to musi działać.

      Delete
    2. Co rozumiesz poprzez to, że 'jest dobrze zrobiony'?

      Delete
    3. Jeżeli działa na normalnym Tomcacie, to i tu będzie działało. Jak ma dodane distributable w web.xml to będzie działa replikacja sesji i tyle.

      Delete
  2. This comment has been removed by the author.

    ReplyDelete
  3. Wykonałem to, co mówiłeś, ale nadal nie działa. Co może być powodem?

    ReplyDelete
    Replies
    1. Aplikacja działa na jednej instancji standalone ?

      Delete
  4. I wanted to post a comment to let you know that you did an appreciable job and Good work. Lefery

    ReplyDelete