示例
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="6">
<Manager className="org.apache.catalina.ha.session.BackupManager"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
<!--
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
-->
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership
className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"
bind=“192.168.22.1”/>
<Receiver
className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="5000"
selectorTimeout="100"
maxThreads="6"/>
<Sender
className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport
className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor
className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor
className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
<Interceptor
className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener
className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
 
详解
Cluster
此元素可以配置在 <Engine> 或者 <Host> 中。className 是集群类,目前仅有 org.apache.catalina.ha.tcp.SimpleTcpCluster 可用。channelSendOptions 是 Tribes 通信框架消息发送选项,可以设置为0x0002 (确认发送),0x0004 (同步发送) ,0x0008 (异步发送)以及它们的逻辑或运算结果,默认是8,如果希望异步发送且确认发送结果,那么设置为2+8=10。对于 SimpleTcpCluster 类或者调用 SimpleTcpCluster.send 方法的对象,它们所发出的每一个消息上都附加着一个 channelSendOptions 标志。DeltaManager 使用 SimpleTcpCluster.send 方法发送消息,而 BackupManager 则直接通过 channel 来发送。
 
Manager
会话管理器配置,可以配置在 <Cluster> 中或者 <Context> 中,后者会覆盖前者的配置。以前每个 web.xml 中配置了 <distributable/> 的应用都必须使用同样的 manager,而如今不同了,我们可以为每个应用定义一个 manager类,从而在集群中混合多个 manager。显然,A 节点上的某个应用的manage 必须与 B 节点上的同样应用的 manager 相同。如果没有为应用指定 manager,而且该应用被标识为 <distributable/>,Tomcat 就会采取 <Cluster> 中的配置。className 是集群会话管理器类,有 BackupManager 和 DeltaManage 两种可选。expireSessionsOnShutdown 设置为 true 时,一个节点关闭,将导致集群下的所有 Session 失效。如果希望当集群中的 Tomcat 节点上复制或删除会话属性时通知会话监听器就设置 notifyListenersOnReplication 为 true。mapSendOptions 为6表示 BackupManager 同步发送消息,参考 <Cluster> 的 channelSendOptions。
 
Channel
Channel 元素是 Tribes 架构的一个重要组成部分,Tribes 是 Tomcat 内部所使用的分组通信架构。Channel 元素封装了所有通信相关事项。
 
Mermbership
每个节点都要维护一份集群节点信息列表,集群组通知的默认实现是在使用 UDP 数据包发送组播心跳到组播IP地址的基础上构建的。集群成员通过使用相同的多播地址/端口组合组合在一起,每个成员定时发送用于动态发现组成员的心跳,frequency 就是发送心跳时间间隔。如果在一个 dropTime 时间内没有收到某个心跳,那么这个心跳所属节点就会从当前节点维护的节点列表删除。frequency 和 dropTime 的单位都是毫秒。
address 属性是所用的组播地址,port 是所用的组播端口号。这两项组合起来将集群隔离开。如果你希望一个 QA 集群和一个生产集群,最简单的方法就是将 QA 集群的组播地址和端口号不同于生产集群的组播地址和端口号组合。bind参数用于多网卡的主机,组播不跨网段因此多网卡最好设置,否则容易出错,默认值是0.0.0.0,表示要用ip等于bind的值的网卡发送和接收组播数据包。如果是Linux系统,一般还需要加JVM环境变量-Djava.net.preferIPv4Stack=true,否则会出错。
 
Reciver
接收器,在 Tribes 架构中,数据的发送与接收以及被拆分为两种功能性组件了。正如其名所示,Receiver 负责接收信息。由于 Tribes 与线程无关(其他架构也开始采用这一种常见改进了),该组件内部包含一个线程池,设定有maxThreads 和 minThreads 两种参数。address 是节点地址,port 是节点端口,两者包含在心跳中被发送到其他节点,节点之间通过 TCP 协议通信。address 设置为 auto 的时候值是 java.net.InetAddress.getLocalHost().getHostAddress(),因此多网卡的节点最好直接写 IP 地址,否则会造成 TCP 通信失败。 接收器分为 BioReceiver (阻塞式)和 NioReceiver (非阻塞式),selectorTimeout 表示 NioReceiver 内轮询的超时时间,单位毫秒,默认是5000。
 
Sender
发送器,Sender 组件负责将消息发送给其他节点的 Reciver。Sender 含有一个 shell 组件 ReplicationTransmitter,但真正所要完成的任务则是通过子组件 Transport 来完成的。Transport 分为两种,bio.PooledMultiSender (阻塞式)和 nio.PooledParallelSender(非阻塞式) 。由于 Tribes 支持一个 Sender 池,所以消息可以使用 NIO 发送器并行的发送。
 
Interceptor
Tribes 利用了一个堆栈传送消息。每个堆栈内的元素都被称为拦截器。使用拦截器,逻辑可被分成更容易管理的代码段。
TcpFailureDetector 通过TCP验证崩溃的成员,如果组播数据包丢失,这个拦截器可以防止误报为崩溃。比如,某个节点会被标记为崩溃,尽管它还在运行,此时这个拦截器就可以发现这个节点还在运行,防止误报为崩溃节点。
MessageDispatchInterceptor 查看 Cluster 组件发送消息的方式是否设置为Channel.SEND_OPTIONS_ASYNCHRONOUS(Cluster标签下的channelSendOptions为8时)。
如果是,这个拦截器先将等待发送的消息进行排队,然后将排好队的消息转给 Sender。
ThroughputInterceptor 输出对流量的简单统计。
请注意,拦截器的顺序很重要。在 server.xml 中定义的顺序正是它们出现在 channel 堆栈中的顺序。这种机制就像是链表,最前面的是第一个拦截器,末尾的是最后一个拦截器。
 
Value
可以理解为 Tomcat 的拦截器。集群使用 valve 来跟踪针对 Web 应用的请求。<Cluster> 元素本身并不是 Tomcat 管道的一部分,集群将 valve 添加到了它的父容器上,比如说 <Cluster> 元素被配置到 <Engine> 元素中,那么 valve 就会被加到 <Engine> 元素中。
ReplicationValve 将在 HTTP 请求结束的最后通知集群,以便集群可以做出是否要复制数据的决策。filter属性意思是,对于已知的文件扩展或url,您可以使用该 Value 通知集群,会话未被修改,属性值是 java.util.regex 正则表达式。
 
Deployer
默认的 Tomcat 集群支持耕种部署(farmed deployment),比如说集群可以在其他的节点上部署和取消部署应用。该组件的状态目前还不稳定,但我们很快就会解决这个问题。所以暂时不要用。
 
ClusterListener
在使用DeltaManager时,消息将由集群对象接收,并通过该侦听器传到DeltaManager
 

Tomcat 8.5集群配置的更多相关文章

  1. 1.Apache+Tomcat负载均衡+集群配置

    1.本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是 ...

  2. Java应用服务器之tomcat会话复制集群配置

    会话是识别用户,跟踪用户访问行为的一个手段,通过cookie(存在客户端)或session(存在服务端)来判断本次请求是那个客户端发送过来:常用的会话保持有绑定会话,就是前边我们聊的在代理上通过算法或 ...

  3. tomcat+apache的集群配置

    背景:项目比较大,用户较多,同一时间,用户在线人数较多,为此,整体架构是lvs(2台)+keepalived(2台)+apache(N台)+tomcat(N台) lvs负责分发请求,所有的web请求经 ...

  4. solrCloud+tomcat+zookeeper集群配置

    solrcolud安装solrCloud+tomcat+zookeeper部署  转载请出自出处:http://eksliang.iteye.com/blog/2107002 http://eksli ...

  5. nginx+tomcat集群配置(4)--rewrite规则和多应用根目录设定思路

    前言: nginx中有一块很重要的概念, 就是rewrite规则. 它会对URL进行修改, 然后进行内部的重定向. rewrite授予了nginx更多的自由, 使得后级服务的接入更加地方便. 本文将简 ...

  6. Apache+tomcat+mod_jk+centos6.2负载均衡集群配置--转载

    转载地址:http://blog.163.com/chenhui_java/blog/static/17267249420128101191860/ 注: 由于长期受转载毒害,所以本人日志均是原创:其 ...

  7. window xp Apache与Tomcat集群配置--转载

    转载地址:http://www.cnblogs.com/obullxl/archive/2011/06/09/apache-tomcat-cluster-config.html 一. 环境说明 Win ...

  8. nginx+tomcat集群配置(1)---根目录设定和多后端分发配置

    前言: 对于javaer而言, nginx+tomcat集群配置, 已然成了web应用部署的主流. 大公司如此, 小公司亦然. 对于个人开发者而言, 资源有限, 往往多个web应用混部于一台服务器(云 ...

  9. Apache+tomcat集群配置

    一.软件准备 Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 Tomcat 6.0 : http://to ...

随机推荐

  1. C语言基础练习——打印乘法口诀表

    C语言基础练习--打印乘法口诀表 JERRY_Z. ~ 2020 / 8 / 26 转载请注明出处! 代码: /* * @Author: JERRY_Z. * @Date: 2020-08-26 16 ...

  2. Linux下非root用户运行Tomcat

    PS:Linux下使用非root用户运行tomcat的原因 由于项目需求,也由于root用户启动tomcat有一个严重的问题,那就是tomcat具有root权限. 这意味着你的任何一个页面脚本(htm ...

  3. jQuery源码分析系列(一)初识jQuery

    一个工厂 (function(global, factory){ "use strict" // operation_1 })(typedef window !== "u ...

  4. 面试:为了进阿里,死磕了ThreadLocal内存泄露原因

    前言 在分析ThreadLocal导致的内存泄露前,需要普及了解一下内存泄露.强引用与弱引用以及GC回收机制,这样才能更好的分析为什么ThreadLocal会导致内存泄露呢?更重要的是知道该如何避免这 ...

  5. 题解 洛谷P3799 【妖梦拼木棒】

    一道水题 (还是做了一个小时,我太菜了 基本思路: 题里面说,4根棍子拼成一个正三角形(等边三角形) 若设这四根棍子长度为\(a,b,c,d\)且\(a≥b>c≥d\) 那很容易得到 (真的很容 ...

  6. SSM整合+WebUpload使用(spring+springmvc+mybatis+maven)

      SSM框架整合以及webupload的集成与使用 在项目中最近用到了webupload.js,也方方面面遇到了不少问题,比如上传文件前对表单参数校验,当校验失败不予提交,及在文件上传成功后,选择同 ...

  7. vue引入 lodash

    vue main.js引入 // main.js 全局引入lodash import _ from 'lodash' Vue.prototype._ = _ // 使用 this._.debounce ...

  8. 8成以上的java线程状态图都画错了,看看这个-图解java并发第二篇

    本文作为图解java并发编程的第二篇,前一篇访问地址如下所示: 图解进程线程.互斥锁与信号量-看完还不懂你来打我 图形说明 在开始想写这篇文章之前,我去网上搜索了很多关于线程状态转换的图,我惊讶的发现 ...

  9. Nice to meet you

    Who am i 详情可以参见我的这一篇博文 Why and how 其实之前就想在博客园开创自己的博客了,但是自己之前已经利用自己的GitHub搭建了一个 博客,然后的话自己写的文章即水又不多,说到 ...

  10. odoo10中的邮件提醒

    odoo10中邮件提醒配置如下: 1.配置出向邮件服务器 打开开发者模式,设置-->技术-->email-->出向邮件服务器 设置如下: 如果配置成功,点击’测试连接‘,会出现如下弹 ...