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

相关文章

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

关于Maven中pom.xml文件配置详解

《关于Maven中pom.xml文件配置详解》pom.xml是Maven项目的核心配置文件,它描述了项目的结构、依赖关系、构建配置等信息,通过合理配置pom.xml,可以提高项目的可维护性和构建效率... 目录1. POM文件的基本结构1.1 项目基本信息2. 项目属性2.1 引用属性3. 项目依赖4. 构

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

gradle安装和环境配置全过程

《gradle安装和环境配置全过程》本文介绍了如何安装和配置Gradle环境,包括下载Gradle、配置环境变量、测试Gradle以及在IntelliJIDEA中配置Gradle... 目录gradle安装和环境配置1 下载GRADLE2 环境变量配置3 测试gradle4 设置gradle初始化文件5 i

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法