原网址:http://javadrama.blogspot.com/2012/10/terracotta-and-tomcat-clustering-page-1.html
In this tutorial we will learn a lot of stuff :)
- How to install Terracotta in an Active/Passive HA (High Availability) model.
- How to configure Tomcat 6.0 to store/retrieve sessions on Terracotta.
- How to install and configure Apache Web Server configure it to relay requests to Tomcat.
Why?
i can do session replication using Tomcat built-in clustering module, so why do i use Terracotta?
well, the Tomcat clustering works just perfect with major four?concerns:
- Clients' sessions data are part of the Tomcat JVM instance.
- There is extra work for Tomcat to make sure that the sessions and its data are replicated among the cluster
- not suitable for larger cluster because of using?multicasting, imagine the network traffic generated by eight tomcat nodes replicating their sessions.
- You can't store an object which is not serializable.
Our Final?architecture?
?
?
it is really simple:
?
- Both Tomcats store/retrieve sessions on the active Terracotta server.
- Apache web server forwards requests to both Tomcats.
- If the active Terracotta fails the passive Terracotta will be the active.
Let's Digg in
First things first! we need:
- terracotta-3.7.0-installer.jar
- apache-tomcat-6.0.35
- mod_jk.so
- httpd-2.2.22
- JDK 1.6
Install and Configure Terracotta
open a terminal and change the directory to the place where you downloaded terracotta-3.7.0-installer.jar
java -jar terracotta-3.7.0-installer.jar
now, go to ${TC_HOME} and create a new directory called 'config', this directory will contain our Terracotta configuration file that will set up the Terracotta cluster.
create a new file inside the?config?directory called?tc-config.xml?with the following content:
<tc-config xmlns="/config"> <servers secure="false" xmlns:tc="/config" xmlns:con="/config" xmlns=""> <server bind="0.0.0.0" host="127.0.0.1" name="node1"> <data>C:\terracotta\server-data</data> <logs>C:\terracotta\server-logs</logs> <statistics>C:\terracotta\server-statistics</statistics> <dso-port bind="0.0.0.0">9510</dso-port> <jmx-port bind="0.0.0.0">9520</jmx-port> <l2-group-port bind="0.0.0.0">9530</l2-group-port> <data-backup>C:\terracotta\data-backup</data-backup> <index>C:\terracotta\server-data\index</index> <dso> <client-reconnect-window>120</client-reconnect-window> <persistence> <mode>temporary-swap-only</mode> </persistence> <garbage-collection> <enabled>true</enabled> <verbose>false</verbose> <interval>3600</interval> </garbage-collection> </dso> </server> <server bind="0.0.0.0" host="127.0.0.1" name="node2"> <data>C:\terracotta\server-data2</data> <logs>C:\terracotta\server-logs2</logs> <statistics>C:\terracotta\server-statistics2</statistics> <dso-port bind="0.0.0.0">9511</dso-port> <jmx-port bind="0.0.0.0">9521</jmx-port> <l2-group-port bind="0.0.0.0">9531</l2-group-port> <data-backup>C:\terracotta\data-backup2</data-backup> <index>C:\terracotta\server-data\index2</index> <dso> <client-reconnect-window>120</client-reconnect-window> <persistence> <mode>temporary-swap-only</mode> </persistence> <garbage-collection> <enabled>true</enabled> <verbose>false</verbose> <interval>3600</interval> </garbage-collection> </dso> </server> <mirror-groups> <mirror-group> <members> <member>node1</member> <member>node2</member> </members> </mirror-group> </mirror-groups> <ha> <mode>networked-active-passive</mode> <networked-active-passive> <election-time>5</election-time> </networked-active-passive> </ha> <update-check> <enabled>true</enabled> <period-days>7</period-days> </update-check> </servers> <system xmlns:tc="/config" xmlns:con="/config" xmlns=""> <configuration-model>production</configuration-model> </system> <clients xmlns:tc="/config" xmlns:con="/config" xmlns=""> <logs>%(user.home)/terracotta/client-logs</logs> <modules> <module name="terracotta-toolkit-1.6" group-id="org.terracotta.toolkit"/> </modules> </clients> </tc-config>
the important thing to note here is the servers node
?
- for each Terracotta server that will run in the cluster you need to define a server node.
- the server tag has three attributes:
- bind: the default bind address which Terracotta listen to.
- host: the IP address that will be used to connect to the Terracotta server.
- name: the name of this node
we have now defined two servers, we need to?define how they would work.
- mirror-group: a tag to define Terracotta groups?
- members: a tag to add a server to a group using its name
- mode: networked-active-passive it means that the?communications between the servers will relay on networking.
- election-time: the Terracotta server would wait for that time to decide if it should start as an Active or passive.
?
- open three consoles and navigate to ${TC_HOME}\bin on the three of them
- Start node1
start-tc-server.bat -f ..\config\tc-config.xml -n node1
you should seeBecoming State[ ACTIVE-COORDINATOR ] Terracotta Server instance has started up as ACTIVE node on 0.0.0.0:9510 successfully, and is now ready for work.
- Start node2
start-tc-server.bat -f ..\config\tc-config.xml -n node2
you should seeNodeID[127.0.0.1:9510] joined the cluster Moved to State[ PASSIVE-UNINITIALIZED ] Moved to State[ PASSIVE-STANDBY ]
- on the third console start the Terracotta Development Console
dev-console.bat
connect to either 127.0.0.1:9520 or 127.0.0.1:9521, you should see this screen
?
as per the screen shot, node1 is active and node2 is passive, play around by taking node1 down and see if node2 becomes the active and then Vice Versa.