本贴子只针对tomcat6做集群实现方法
如何实现tomcat集群呢,我们会想到几个问题?
1.我的应用程序如何实现?
2.我的应用会话怎么实现一个会话对应一台机器?
3.tomcat如何配置多台机器?以及如何容错?还有负载均衡(这个另一贴子详解:httpd和nginx)?
在挖掘tomcat的集群实现的详细信息之前,先介绍下用于描述集群的一些专业术语,具体如下:
管理器(Manager)
Web应用程序会话管理器。在分发Web应用程序的时候,会话管理器实现必须是复制的会话管理器,因此tomcat实现了两个管理器:DelatManager(增量管理器)和BackupManager(备份管理器)。
分组(Group)
Tomcat节点的逻辑分组,分组的每个成员都以特殊的方式参与集群。例如,一个分组可以是www.example.com主机的Root Web应用程序的会话复制分组,而另一个分组可以复制www.test.com主机的Root Web应用程序的会话。尽管这两个分组复制不同的内容,但相同的Tomcat节点都可以参与到这两个逻辑分组中。
成员(Member)
Tomcat集群的参与节点。任何Tomcat节点都可以是0个或多个分组的成员。
信道(Channel)
分组通信架构软件,包括实现发送与接收各种类型的分组信息,而且它散发集群成员参与或离开事件。所有集群通信都要通过这一Channel对象执行。
发送器(Sender)
这是一个Channel对象,从被修改数据的Tomcat节点上发送数据到复制该数据的节点。
接收器(Receiver)
它与发送器相对应。接收由Sender发送的所有复制数据,并把这些数据转交给适当的消费者。把Receiver当作一种附加的网络服务器软件组件,运行在Tomcat相同的JVM上,从而接收所有数据。这取决于用于Receiver(在Server.xml中可以进行配置)的实现类,Receiver可以实现线程池,以获得更好性能与灵活性。
拦截器(Interceptor)
软件组件。拦截Channel与IO层的通信消息。Interceptor可以以任何方式作用于开发者编程的数据,包括修改数据与发送通过、删除数据、发送附加数据、存储数据等。
传输(Transpot)
可插入的通信软件实现,经专用网络协议发送和接收集群消息。Tomcat6包括传输的两种实现方法:非模块化Java实现(缩写“NIO”实现,nonblocking Java)和模块化Java IO(缩写为“BIO”,blocking Java)。
心跳(Heartbeat)
如果使用默认的多播节点发现(multicast node discovery)和分组通知(group notification)实现,则每个节点都会每半分钟给所有他正在监听的节点发送“心跳”消息(跳动频率可设)。正在监听的其它节点经多播将接收heartbeat消息,而且能因这些消息发现其它节点的存在。每个节点都一直跟踪它收到消息的其它节点。如果不再接收到节点的心跳消息,则认为该节点是非工作性的,并将其从集群参与成员中删除,直到重新发现为止。心跳消息可以包含数据,并用于把小的消息携带到集群的其它节点上。