`

apache2.2+mod_JK+Tomcat7+Terracotta3.7 集群(重要)

 
阅读更多

                                  apache2.2+mod_JK+Tomcat7+Terracotta3.7 集群

 

     最近研究了TerraCotta+ Tomcat7 的集群,效果非常不错,之前用的apache+tomcat,因没有用session来用缓存,而用tomcat自已配置的,效果不好,要么session没有,要么没有同步,最近把它的session 同步改为 Terracotta后,目前看来,还是不错的。

     从http://www.terracotta.org/downloads 下载,里面带有一些示例,现在encache也被收购旗下, 也能和terracotta进行集群后,缓存同步,里面有一些缓存同步的示例,CS BS都有,不需要改现有的代码,只需加个配置文件,它能对你的类,变量,方法,做同步,效果非常好,有个CS的示例有点例协工作的一样,如在两台电脑上开相同的两上 Client端,在一台上修改,另一台上可立即显出来修改后的效果,这个功能在协同绘图处理中很有用 。

     以前给别人做了一个程序,就是有80多个客户端上画个每个小格子,表示房间号,如果有一个客户端点击小格后,让其变为红色,那么在其它的客户端上也要立即显示出那个客户端修改后的红色区域,当时是用程序缓存,再用Socket+事件模式,把修改后的结果推给其它的客户端,要是现在,完全不用管那么多,只考虑一个客户端,再用Encache级存同步,传给另外的客户端即可。

如图:

  

在其中一个客户端下输入,另一个客户端会立即显示,放一个在另一台电脑上,连到同一个terracotta Server 上时,它也会改变, 就会产生一种协同工作的效果。

 

 用它的监控中可以看出:

 

 

 

 所有的数据都在里面,如果你把一个客户端,关了,再打开,这些数据还是会有,不用担心,当然可以设一个时限,可以这个时间,就把缓存的这些数据删除即可。

 

二:下面来看下Terracotta+Tomcat的集群:

 

 1, copy : terracotta/sessions/terracotta-session-1.3.1.jar

                  terracotta/common/terracotta-toolkit-1.6-runtime-5.2.0.jar

 到Tomcat7 / lib 中 ,

2, 如果是要本机有两个以上的TOMCAQT时, 把conf / server.xml 中相应的端口改的不相同,如

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

 <Connector port="8080" protocol="HTTP/1.1" 

  <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />      这是连Apache 所用的端口,

再把: <Engine name="Catalina" defaultHost="localhost"> 后加一句: jvmRoute="jvm1">        

 这只是一个名称标识,便于Apache 配置负载时的名称要相一样,

 

3.在Tomcat7/conf/context.xml 中加:

<Valve className="org.terracotta.session.TerracottaTomcat70xSessionValve" tcConfigUrl="127.0.0.1:9510"/>

4,一台机器上的多个TOMCAT也是一样配置,后,可以直接启动,注意观看console 中,是否连接Terracotta 成功,如果成功,则表示已配置好了,session 复制已成功,就这么简单,

5,启动多个tomcat,把附件中的testCluster.jsp 放在 webapps/examples/ 下,进行测试:

 

再点下面的tomcat_a:

 

 

可以看到,两次的 jsessionID 是一样的, 如果把 tomcat7/ conf / context.xml  中的一句先注掉后,再启动,看到的两次 jsessionID 是不一样, 之前用 tomcat 的集群方法配好后,有时两次的 JsessionID 还是不一样,不知为何。

 

6, 下一步,就是把 tomcat 和 apache2.2 集群里面,就是只有一个监听端口:

 见我的另一blog,这个集群网上也有很多了,:http://lihongchao87.iteye.com/blog/1720532 

 

http://blog.163.com/comfort_122/blog/static/48904409201131145149530/

 

7. 重点:

   下载的Terracotta 中:

   terracotta-3.7.2\sessions\config-samples 下有几个配置文件,里面有讲和各个开源服务器集群的配置,

Terracotta 也是靠  plugin 来集成的, 叫 tim.......

SVN :http://svn.terracotta.org/svn/forge/projects/

 这里面是源码下载,

在:terracotta-3.7.2\sessions \  terracotta-session-1.3.1.jar 包里面 META-INF \ terracotta \ TIMs\ 下已经给了几个 tim-tomcat-7.0-2.4.1.jar  tim-jboss-7.x-2.4.1.jar  ,,,

如果以后需要可以从上面的SVN 中下载源配,自已再打包即可。

再上传一文档。
 

 8. 下载下来后,主要先运行其中的sample 看看 。

 

 

 

 

 

  9, 最后,多个 Terracotta 也是可以集群在一起的, 如果多个客户端(Tomcat) ,连一个Terracotta,当这个服务挂了, 那缓存就没有了,这时,可以把多个terracotta集群在一起,也就是缓存,session在几个 server中同步,当一个 terracotta 挂了后,其它的服务还在时,照样可以用, 但这个集群没成功,还在研究,:

看文档上说的有两种方法,

1,: 在 tomcat / conf / context.xml 中 ,把:

<Valve className="org.terracotta.session.TerracottaTomcat70xSessionValve" tcConfigUrl="135.192.72.151:9510,135.192.72.150:9510"/> 写成这种形式,不对,只能连通第一个,

还把tim-tomcat-7.0的代码看了下,里面没写解析这个字符串的,但官方文档中有写:

是用: server.1.ip.address:port,server.2.ip.address:port , 这种方法也试了,还是不行,

这种方法是一个客户端连多个 server ,也就是把 缓存,session同步到同台server上去,如其中一台挂了,其它缓存数据还在 。

 

10 , 这种方法可以成功。

还有一种方法是,客户端只连一个server ,把所有的server 集群在一起,在terracotta7/ bin 中新一个tc-config.xml 文件:

内容为:

       如果有多个 server  则配置多个 多个 server 即可,启动时,用一个作为主 server 来启动,也可以写一个 批处理, 以下这份文件要在每台机器的 terracotta / bin / 下都要放置一份 。

      

<?xml version="1.0" encoding="UTF-8"?>
<tc:tc-config xmlns:tc="http://www.terracotta.org/config"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.terracotta.org/schema/terracotta-6.xsd">
   <tc-properties>      
    <property name="l2.l1reconnect.enabled" value="true"/>    
    <property name="l2.l1reconnect.timeout.millis" value="5000"/>  
  </tc-properties>
  <servers>
    <server host="135.192.72.150" name="Server1">
      <dso-port>9510</dso-port>
      <jmx-port>9520</jmx-port>
      <data>terracotta/demo-server/server-data</data>
      <logs>terracotta/demo-server/server-logs</logs>
      <statistics>terracotta/demo-server/server-statistics</statistics>
    </server>
	<!--
    <server host="135.192.72.151" name="Server2">
      <dso-port>9510</dso-port>
      <jmx-port>9520</jmx-port>
      <data>terracotta/demo-server/server-data</data>
      <logs>terracotta/demo-server/server-logs</logs>
      <statistics>terracotta/demo-server/server-statistics</statistics>
    </server>
	-->
  </servers>
  <clients>    
      <logs>%(user.home)/terracotta/client-logs</logs> 
  </clients>
</tc:tc-config>

  

 再 在:bin/ 用命令行:start-tc-server.bat -n Server1  , -n 表示 server 中的 name  用为本主机名启动,

如果用的 tc-config.xml 不是用这个名,或放在其它目录下,则用:

F:\opensource007\terracotta_\terracotta-3.7.2\bin>start-tc-server.bat -f ./tc-co
nfig.xml -n Server1

  

 说明: 

      1,如果在多台机器上,当第一次启动某一台机器上的一个 teracotta时,会出现一些错误,

 

F:\opensource007\terracotta_\terracotta-3.7.2\bin>start-tc-server.bat -n Server1 2012-11-16 16:08:20,796 INFO - Terracotta 3.7.2, as of 20121030-063006 (Revision unknown-21148 by cruise@su10vmo147 from 3.7.2) 2012-11-16 16:08:21,406 INFO - Successfully loaded base configuration from file at 'F:\opensource007\terracotta_\terracotta-3.7.2\bin\tc-config.xml'. 2012-11-16 16:08:21,500 INFO - Log file: 'C:\Documents and Settings\Administrato r\terracotta\server-logs\terracotta-server.log'. 2012-11-16 16:08:23,984 INFO - Available Max Runtime Memory: 490MB 2012-11-16 16:08:26,359 INFO - JMX Server started. Available at URL[service:jmx: jmxmp://0.0.0.0:9520] 2012-11-16 16:08:27,390 ERROR - com.tc.net.protocol.transport.TransportHandshake ErrorContext: com.tc.net.protocol.transport.TransportHandshakeErrorContext: "Ser ver Cannot Reconnect. ConnectionID(8.d02bd9ab3e224a9ab373380fbf03c52d.3387cca9-b eb4-4e55-b6eb-94cee3c80553-13b0842e658)[] not found. Connection attempts from th e Terracotta node at 135.192.72.150:2639 are being rejected by the Terracotta se rver array. Reconnect window is probably still open at the other end."Message Cl ass: com.tc.net.protocol.transport.TransportMessageImpl Sealed: true, Header Length: 32, Data Length: 485, Total Length: 517 Header (com.tc.net.protocol.transport.WireProtocolHeader) Version: 2, Header Length: 8, TOS: 0, TTL: 64, Protocol: TRANSPORT HANDS HAKE Total Packet Length: 517 Adler32 Checksum: 2387609630 (valid: true) Source Addresss: 135.192.72.151 Destination Addresss: 135.192.72.150 Source Port: 9530, Destination Port: 2639 Total Msg Count: 1 Header Validity: true (no message) Payload: type: SYN_ACK, connectionId: ConnectionID(8.d02bd9ab3e224a9ab373380fbf03 c52d.3387cca9-beb4-4e55-b6eb-94cee3c80553-13b0842e658)[], errorContext com.tc.ne t.protocol.transport.TransportHandshakeErrorContext: "Server Cannot Reconnect. C onnectionID(8.d02bd9ab3e224a9ab373380fbf03c52d.3387cca9-beb4-4e55-b6eb-94cee3c80 553-13b0842e658)[] not found. Connection attempts from the Terracotta node at 13 5.192.72.150:2639 are being rejected by the Terracotta server array. Reconnect w indow is probably still open at the other end." 2012-11-16 16:08:28,406 ERROR - com.tc.net.protocol.transport.TransportHandshake ErrorContext: com.tc.net.protocol.transport.TransportHandshakeErrorContext: "Ser ver Cannot Reconnect. ConnectionID(8.d02bd9ab3e224a9ab373380fbf03c52d.3387cca9-b eb4-4e55-b6eb-94cee3c80553-13b0842e658)[] not found. Connection attempts from th e Terracotta node at 135.192.72.150:2642 are being rejected by the Terracotta se rver array. Reconnect window is probably still open at the other end."Message Cl ass: com.tc.net.protocol.transport.TransportMessageImpl Sealed: true, Header Length: 32, Data Length: 485, Total Length: 517 Header   

 


 这是因为,当前它要去找别的主机,而别的主机还没启动,没关系统,再把别的主机启动后,就一切正常了,

如果中间有不正常的,把所有的关掉,重启一次,

启动后如:

    

F:\opensource007\terracotta_\terracotta-3.7.2\bin>start-tc-server.bat -f ./tc-co nfig.xml -n Server1 2012-11-16 16:13:23,750 INFO - Terracotta 3.7.2, as of 20121030-063006 (Revision unknown-21148 by cruise@su10vmo147 from 3.7.2) 2012-11-16 16:13:24,328 INFO - Successfully loaded base configuration from file at 'F:\opensource007\terracotta_\terracotta-3.7.2\bin\.\tc-config.xml'. 2012-11-16 16:13:24,406 INFO - Log file: 'C:\Documents and Settings\Administrato r\terracotta\server-logs\terracotta-server.log'. 2012-11-16 16:13:26,875 INFO - Available Max Runtime Memory: 490MB 2012-11-16 16:13:29,281 INFO - JMX Server started. Available at URL[service:jmx: jmxmp://0.0.0.0:9520] 2012-11-16 16:13:30,250 INFO - NodeID[135.192.72.151:9510] joined the cluster 2012-11-16 16:13:30,250 INFO - Moved to State[ PASSIVE-UNINITIALIZED ] 2012-11-16 16:13:30,296 INFO - Moved to State[ PASSIVE-STANDBY ]

 

 


  显示,对方的主机 135.192.72.151 这台机器加入到 cluster中,  

 而一台机器为:

   

D:\cluster\terracotta-3.7.2\bin>start-tc-server.bat -n Server1 2012-11-16 16:13:24,625 INFO - Terracotta 3.7.2, as of 20121030-063006 (Revision unknown-21148 by cruise@su10vmo147 from 3.7.2) 2012-11-16 16:13:25,046 INFO - Successfully loaded base configuration from file at 'D:\cluster\terracotta-3.7.2\bin\tc-config.xml'. 2012-11-16 16:13:25,093 INFO - Log file: 'D:\cluster\terracotta-3.7.2\bin\terracotta\demo-server\server-logs\terracotta-server.log'. 2012-11-16 16:13:27,453 INFO - Available Max Runtime Memory: 490MB 2012-11-16 16:13:27,593 ERROR - Unable to find local network interface for 135.192.72.150 D:\cluster\terracotta-3.7.2\bin>start-tc-server.bat -n Server2 2012-11-16 16:13:44,968 INFO - Terracotta 3.7.2, as of 20121030-063006 (Revision unknown-21148 by cruise@su10vmo147 from 3.7.2) 2012-11-16 16:13:45,390 INFO - Successfully loaded base configuration from file at 'D:\cluster\terracotta-3.7.2\bin\tc-config.xml'. 2012-11-16 16:13:45,453 INFO - Log file: 'D:\cluster\terracotta-3.7.2\bin\terracotta\demo-server\server-logs\terracotta-server.log'. 2012-11-16 16:13:47,828 INFO - Available Max Runtime Memory: 490MB 2012-11-16 16:13:50,109 INFO - JMX Server started. Available at URL[service:jmx:jmxmp://0.0.0.0:9520] 2012-11-16 16:13:50,875 INFO - NodeID[135.192.72.150:9510] joined the cluster 2012-11-16 16:13:50,906 INFO - Moved to State[ PASSIVE-UNINITIALIZED ] 2012-11-16 16:13:50,968 INFO - Moved to State[ PASSIVE-STANDBY ] 2012-11-16 16:16:52,453 WARN - NodeID[135.192.72.150:9510] left the cluster 2012-11-16 16:16:57,453 INFO - Becoming State[ ACTIVE-COORDINATOR ] 2012-11-16 16:16:57,453 INFO - Terracotta Server instance has started up as ACTIVE node on 0.0.0.0:9510 successfully, and is now ready for work. 2012-11-16 16:17:45,328 INFO - NodeID[135.192.72.150:9510] joined the cluster

 

 


 

 

  如果,都启动后,又随机关掉了其中一台 server ,其它的cluster中的机器就会感知到,

  NodeID[135.192.72.150:9510] left the cluster
 再启动后,会有:

      NodeID[135.192.72.150:9510] joined the cluster
说明: 

      注意观察上面的两个server 中的 information , 会看到,只有一台server中有一句:

    Terracotta Server instance has started up as ACTIVE node on 0.0.0.0:9510 successfully, and is now ready for work

   这里说明,在后面的 Tomcat 中只能去连接有这一句话的 server,这个是比较烦的,好像是第一次随意启动一个时,它上面会有这一句话,再启动其它的 terracotta时,就没有了,所有 tomcat 连接其它的server时,会报 connection refuse . 在下面的 监控中也能看到,

但都启动成功后,只有第一次启动server中有这一句话,其它的没有,

随后都启动好后,把这个主server关掉后,它又会随机选一个当作主server, 观看它的console 上就会出现:

Terracotta Server instance has started up as ACTIVE node on 0.0.0.0:9510 successfully, and is now ready for work

所以在启动 server 时,是有顺序的,这样在后面的启动tomcat时中的IP就不用去改了,否刚要改成有DSO_PORT的server 去连接,

 

OK,现在Terracotta 集群成功。

   

11, 启动后用  terracotta /bin / dev-console.bat  查看:

  

 

会有两个 server ,一切正常。

 

 

关掉其中一台后,再查看:

 

   现在可以看到,其中这台机 server 挂 了, 现在看来这个 terracotta 还是非常强大的。再启动就正常了 。

 

12.

    继续来看上面的测+Tomcat的测试,上面只是用了一台 Terracotta ,现在有两台 Terracotta , 两个Tomcat ,在每个Tomcat / conf / context.xml  中加入:

<Valve className="org.terracotta.session.TerracottaTomcat70xSessionValve" tcConfigUrl="135.192.72.151:9510"/>   这里只是连上了其中的某一台server ,两个tomcat连的都是同一台 server ,先测这个,下面再测两个 tomcat 分别连不同的 server .

   

 这个效果和上面一样,

  12.1  然后, 关掉 两个 tomcat  连接的那个 terracotta 的那个服务 server ,再observer:

  

16:50:38,031 WARN - NodeID[135.192.72.150:9510] left the cluster 16:50:43,031 INFO - Becoming State[ ACTIVE-COORDINATOR ] 16:50:43,031 INFO - Starting reconnect window: 120000 ms. Waiting for 2 clients to connect. Unconnected Clients - [ClientID[1], ClientID[2]] 16:50:43,046 INFO - Terracotta Server instance has started up as ACTIVE node on 0.0.0.0:9510 successfully, and is now ready for work.


 

 13.

说明:观察上面可以看到,上面写的有一点问题,每个DSP PORT 中都有值,只能边接 Server2 前面有一个为A的 server , 猜想这个应该是Master 主server吧,其它的是从server ,因现在只有两台机器,只测了两个 server,以后再测多个server 看看,如果连接P server时,

当主A server 死掉后,再观察 监控器,其中有一个P server 会变成主A server

tomcat 启动时报:

     2012-11-16 17:12:16,171 WARN - We couldn't load configuration data from the serv er at '135.192.72.150:9510'; retrying. (Error: Connection timed out: connect.) 2012-11-16 17:12:37,171 WARN - We couldn't load configuration data from the serv er at '135.192.72.150:9510'; retrying. (Error: Connection timed out: connect.) 2012-11-16 17:12:58,187 WARN - We couldn't load configuration data from the serv er at '135.192.72.150:9510'; retrying. (Error: Connection timed out: connect.)



 

 

  所以 Terracotta 启动时,时有顺序的,但在启动后,可以随机关掉主或从server都可以。 但再把其中一个tomcat关掉后,再启动,会有问题,就连不上去了,

信息: Deploying web application directory D:\cluster\terracotta_tomcat\apache-to mcat-7.0.32_2\webapps\docs 2012-11-16 17:16:50,015 INFO - Terracotta 3.7.2, as of 20121030-061135 (Revision unknown-21148 by cruise@su10vmo104 from 3.7.2) 2012-11-16 17:17:11,265 WARN - We couldn't load configuration data from the serv er at '135.192.72.150:9510'; retrying. (Error: Connection timed out: connect.) 2012-11-16 17:17:32,484 WARN - We couldn't load configuration data from the serv er at '135.192.72.150:9510'; retrying. (Error: Connection timed out: connect.)


 这时,虽然系统还可以正常运行, 但主 A server 被关掉后, 这个tomcat 如果要连上去就要改一下IP,连监控界面中的A server的IP ,即可连上去, 因为此时的A server 已经动态改了。

  注:经使用Tomcat7 测试发现,把主A server关掉后,其它的 server 动态变成主 A sever后,关掉其中一台tomcat,再启动,很慢

  

 

     就一直卡在这里了, 因上面terracatto 中为每个server只配了一个日志,可能会有问题,这里会卡很长一段时间又启动好了,以后再为每个server单独配一个日志看看。

 

  • 大小: 72.4 KB
  • 大小: 152.5 KB
  • 大小: 76.6 KB
  • 大小: 74.5 KB
  • 大小: 164.3 KB
  • 大小: 163.1 KB
  • 大小: 69.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics