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:
My five servers built on a single windows 7 box as a POC, you should have no troubles with running the same example on Linux, only minor chages are needed.
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
you should seestart-tc-server.bat -f ..\config\tc-config.xml -n node1Becoming 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
you should seestart-tc-server.bat -f ..\config\tc-config.xml -n node2NodeID[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
connect to either 127.0.0.1:9520 or 127.0.0.1:9521, you should see this screendev-console.bat
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.
本文详细介绍了如何使用Terracotta实现Tomcat集群的高可用性,包括安装、配置和部署过程,以及为什么选择Terracotta而非内置集群模块。文章深入探讨了Terracotta如何解决客户端会话数据存储、复制和大型集群网络流量问题,并通过实际案例展示最终架构。
4894

被折叠的 条评论
为什么被折叠?



