今天研究了一下terracotta + tomcat的集群,记录一下。
一、环境
本机,ip:192.168.2.158 win7 64位
虚拟机,ip:192.168.81.128 RedHat 64位
本机装两个tomcat 和 一个terracotta,虚拟机装一个teracotta。
虚拟机也要装jdk,因为terracotta需要jdk的支持。
terracotta安装目录,win7为G:\java_workspaces\terracotta-3.7.7 虚拟机为/usr/lws_life/terracotta-3.7.7
二、步骤
1、将terracotta安装目录下sessions文件夹里的terracotta-session-1.3.7.jar 和 common文件夹里的 terracotta-toolkit-1.6-runtime-5.7.0.jar 文件 都拷贝到 tomcat的lib中(两个tomcat都需要拷贝)。
2、在terracotta安装目录下创建tc-config.xml的配置文件,内容如下
1<?xml version="1.0" encoding="UTF-8" ?> 2<tc:tc-config xmlns:tc="http://www.terracotta.org/config" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.terracotta.org/schema/terracotta-6.xsd"> 5 6 <tc-properties> 7 <property name="l2.nha.dirtydb.autoDelete" value="true"/> 8 <property name="l1.cachemanager.enabled" value="true"/> 9 <property name="logging.maxLogFileSize" value="1024"/> 10 </tc-properties> 11 12 <system> 13 <configuration-model>development</configuration-model> 14 </system> 15 16 <servers> 17 <!-- 这里配置第一台 terracotta服务器信息 --> 18 <server host="192.168.2.158" name="MyServer1" bind="192.168.2.158"> 19 <data>G:/java_workspaces/terracotta-3.7.7/server-data</data> 20 <logs>G:/java_workspaces/terracotta-3.7.7/server-logs</logs> 21 <index>G:/java_workspaces/terracotta-3.7.7/server-index</index> 22 <statistics>G:/java_workspaces/terracotta-3.7.7/server-statistics</statistics> 23 24 <!-- 这些端口都是默认的 --> 25 <dso-port bind="192.168.2.158">9510</dso-port> 26 <jmx-port bind="192.168.2.158">9520</jmx-port> 27 <l2-group-port bind="192.168.2.158">9530</l2-group-port> 28 29 <authentication/> 30 31 <http-authentication> 32 <user-realm-file>G:/java_workspaces/terracotta-3.7.7/realm.properties</user-realm-file> 33 </http-authentication> 34 35 <dso> 36 37 <client-reconnect-window>120</client-reconnect-window> 38 39 40 <persistence> 41 42 <mode>temporary-swap-only</mode> 43 </persistence> 44 45 <garbage-collection> 46 47 <enabled>true</enabled> 48 49 <verbose>false</verbose> 50 51 <interval>3600</interval> 52 </garbage-collection> 53 54 </dso> 55 </server> 56 57 <!-- 这里配置第二台terracotta服务器信息 --> 58 <server host="192.168.81.128" name="MyServer2" bind="192.168.81.128"> 59 <data>/usr/lws_file/terracotta-3.7.7/server-data</data> 60 <logs>/usr/lws_file/terracotta-3.7.7/server-logs</logs> 61 <index>/usr/lws_file/terracotta-3.7.7/server-index</index> 62 <statistics>/usr/lws_file/terracotta-3.7.7/server-statistics</statistics> 63 64 <dso-port bind="192.168.81.128">9510</dso-port> 65 66 <jmx-port bind="192.168.81.128">9520</jmx-port> 67 68 <l2-group-port bind="192.168.81.128">9530</l2-group-port> 69 70 <authentication/> 71 72 <http-authentication> 73 <user-realm-file>/usr/lws_file/terracotta-3.7.7/realm.properties</user-realm-file> 74 </http-authentication> 75 76 <dso> 77 78 <client-reconnect-window>120</client-reconnect-window> 79 80 81 <persistence> 82 83 <mode>temporary-swap-only</mode> 84 </persistence> 85 86 <garbage-collection> 87 88 <enabled>true</enabled> 89 90 <verbose>false</verbose> 91 92 <interval>3600</interval> 93 </garbage-collection> 94 95 </dso> 96 </server> 97 98 <ha> 99 100 <mode>networked-active-passive</mode> 101 102 <networked-active-passive> 103 <election-time>5</election-time> 104 </networked-active-passive> 105 </ha> 106 107 <update-check> 108 109 <enabled>true</enabled> 110 111 <period-days>10</period-days> 112 </update-check> 113 </servers> 114 115 <clients> 116 117 <logs>logs-%i</logs> 118 </clients> 119 120</tc:tc-config>
3、修改tomcat安装目录conf文件夹中的context.xml文件,添加内容如下:
1<?xml version="1.0" encoding="UTF-8"?> 2<Context> 3 <WatchedResource>WEB-INF/web.xml</WatchedResource> 4 5 <!-- 主要添加这一段 我用的tomcat6.0, tcConfigUrl为terracotta服务器的地址,端口就是tc-config.xml文件中设置的dso端口,这里默认为9510,多个服务器信息用逗号分隔 --> 6 <Valve className="org.terracotta.session.TerracottaTomcat60xSessionValve" tcConfigUrl="192.168.2.158:9510,192.168.81.128:9510"/> 7</Context>
4、配置nginx,配置文件为nginx安装目录下conf文件夹中的nginx.conf,主要修改代码如下:
1#这里是配置nginx的负载均衡 有四种负载均衡的方式,这里采用权值的分配 2upstream mysvr { 3 #weigth参数表示权值,权值越高被分配到的几率越大 4 #本机上的Squid开启3128端口 5 #这里的ip和端口请对照tomcat做相应修改 6 server 127.0.0.1:8080 weight=1; 7 server 127.0.0.1:8081 weight=1; 8 } 9 10 server { 11 #监听80端口 12 listen 80; 13 server_name localhost; 14 location / { 15 #这里的mysvr为上方配置的 负载均衡的信息 16 proxy_pass http://mysvr; 17 proxy_redirect off; 18 proxy_set_header Host $host; 19 proxy_set_header X-Real-IP $remote_addr; 20 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 21 client_max_body_size 10m; 22 client_body_buffer_size 128k; 23 24 #该值表示一台服务器down了之后,如果分配给该服务器资源,链接超过1秒钟,就重新分配资源 25 proxy_connect_timeout 1; 26 proxy_send_timeout 90; 27 proxy_read_timeout 90; 28 proxy_buffer_size 4k; 29 proxy_buffers 4 32k; 30 proxy_busy_buffers_size 64k; 31 proxy_temp_file_write_size 64k; 32 } 33 }
5、启动terracotta服务。
win7 下进入cmd模式,进入terracotta的bin目录,执行如下命令
start-tc-server.bat -f <安装路径>/tc-config.xml
linux下,进入terracotta的bin目录,执行如下命令
start-tc-server.sh -f <安装路径>/tc-config.xml
注意:这里启动需要指定tc-config.xml文件,否则会使用默认的配置文件。
如果linux下不能执行该命令,需要赋予权限,最简单的就是 chmod 777 -R <terracotta安装路径>
如果配置无误,会看到下面的信息

6、启动tomcat服务 和 nginx服务。
访问 http://127.0.0.1(nginx 和 tomcat都是装在本机的,所以可以用127.0.0.1访问,项目部署时去掉项目名,比如http://127.0.0.1:8080/coal 访问的要改为 http://127.0.0.1:8080访问)
7、测试
查看sessionId,应该会在原有的sessionId后面加上 .X,X为数字,代表不同的服务器,如hgdjfgdhsgfjhsjhg.1或 hgdjfgdhsgfjhsjhg.2,这时关闭其中一台tomcat,项目可以正常运行,然后启动关闭的tomcat,在关闭另一台tomcat,发现session已经共享,说明集群配置成功