apache+JK+tomcat集群配置

2024-01-04 16:38
文章标签 配置 集群 tomcat apache jk

本文主要是介绍apache+JK+tomcat集群配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[color=red]blog迁移至[/color]:[url=http://www.micmiu.com]http://www.micmiu.com[/url]

[size=x-large][color=blue]本文主要讲解如何在负载均衡的配置完成的基础上简单实现apache+JK+tomcat的集群配置[/size][/color]

[size=medium][color=red]有关apache+JK+tomcat负载均衡的安装及配置详见:[/color][/size]
[size=medium][url=http://sjsky.iteye.com/blog/918768]http://sjsky.iteye.com/blog/918768[/url][/size]

[size=large][color=blue]概述[/color][/size][list]
[*]集群方式和之前blog中的负载均衡基本配置相同, Tomcat 中的集群原理是通过组播的方式进行节点的查找并使用 TCP 连接进行会话的复制。
[*]集群不同于负载平衡的是,由于集群服务需要在处理请求之间不断地进行会话复制,复制后的会话将会慢慢变得庞大,因此它的资源占用率是非常高的,如果在并发量大的应用中,复制的会话会变得相当大,而使用的总内存更是会迅速升高。
[*]但集群的会话复制,增加了系统的高可用性。由于在每台服务器都保存有用户的 Session 信息,如果服务器集群中某一台宕机,应用可以自动切换到其它服务器上继续运行,而用户的信息不会丢失,这提高了应用的冗错性。
[*]具体采用负载平衡还是集群,这要取决于实际应用的具体需求了。
[/list]
下面讲述实现集群配置的修改:
tomcat官方参考文档:[url=http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html]http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html[/url]
[size=large][color=blue][一]实现集群的基本条件[/color][/size]
如果要实现session复制,需要满足以下七点:
[list]
[*]所有的session里的变量要实现序列化,继承java.io.Serializable
[*]去掉tomcat的conf/server.xml中Cluster的注释
[*]确认server.xml中定义好ReplicationValve
[*]如果tomcat实例运行同一台主机上,确保tcpListenPort的值唯一,一般情况下端口值的范围4000-4100
[*]确认web应用配置文件web.xml中有标签<distributable/>
[*]如果使用了mod_jk,那么<Engine name="Catalina" jvmRoute="node01" >中jvmRoute属性值要和worker.properties中的定义一致
[*]确保集群中的所有节点的时间同步。
[*]确保负载均衡软件设置为session sticky模式
[/list]
[size=large][color=blue][二]具体配置修改[/color][/size]
基本配置参见我的另一关于负载均衡配置的blog,里面讲得很详细
1、web.xml的根节点<webapp>下增加标签<distributable/>

2、server.xml中Cluster属性片段

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">

<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" />
<!-- 如果运行在同一台主机上port='4000'的值保证唯一,不能冲突 -->
<Receiver
className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto" port="4000" autoBind="100" selectorTimeout="5000"
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.MessageDispatch15Interceptor" />
</Channel>

<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter="" />
<Valve
className="org.apache.catalina.ha.session.JvmRouteBinderValve" />

<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.JvmRouteSessionIDBinderListener" />
<ClusterListener
className="org.apache.catalina.ha.session.ClusterSessionListener" />
</Cluster>

[size=large][color=blue][三]总结[/color][/size]
在我的配置和测试过程中得出以下几点:
1、sticky_session的值只是决定sessin是否具有粘性,并不像很多文章说的是指session复制
2、集群中tomcat的session能否复制取决于server.xml中的<Cluster>属性的定义
3、在测试中只要定义好<Cluster>属性,那么session复制就能实现了,和sticky_session的值没有关系,此时如果设置sticky_session=true,表示同时实现session粘性,即同一session会一直访问同一个tomcat,如果sticky_session=false,那么具体访问哪个tomcat是由分发控制器来决定的。


------------------------------------分------------------------------------隔------------------------------------线--------------------------------------

这篇关于apache+JK+tomcat集群配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/569940

相关文章

IDEA中配置Tomcat全过程

《IDEA中配置Tomcat全过程》文章介绍了在IDEA中配置Tomcat的六步流程,包括添加服务器、配置部署选项、设置应用服务器及启动,并提及Maven依赖可能因约定大于配置导致问题,需检查依赖版本... 目录第一步第二步第三步第四步第五步第六步总结第一步选择这个方框第二步选择+号,找到Tomca

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Debian系和Redhat系防火墙配置方式

《Debian系和Redhat系防火墙配置方式》文章对比了Debian系UFW和Redhat系Firewalld防火墙的安装、启用禁用、端口管理、规则查看及注意事项,强调SSH端口需开放、规则持久化,... 目录Debian系UFW防火墙1. 安装2. 启用与禁用3. 基本命令4. 注意事项5. 示例配置R

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶