apache+tomcat 实现集群和负载均衡+org.apache.catalina.tribes.ChannelException: java.net.SocketException: error

本文详细介绍如何在Windows环境下配置Apache与Tomcat集群,包括Apache2.2.15及mod_jk模块的安装,Tomcat的解压与端口调整,以及通过mod_jk实现Apache与Tomcat的负载均衡配置。同时,深入解析Tomcat集群的设置,包括SimpleTcpCluster、GroupChannel等组件的配置,以及在web.xml中启用分布式会话。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎访问我的网站

下载apache和tomcat

Apache 2.2.15+mod_jk-1.2.30-httpd-2.2.3.so 下载地址
tomcat下载地址

安装apache和tomcat
1. 双击 httpd-2.2.15-win32-x86-no_ssl.msi文件进行安装到D:\Apache Software Foundation\就好了,后面填写自己域名可以随便填。
2. 2个tomcat也解压到同一个目录

将其中的一个占用的端口号前面全部加1,另外一个占用的端口前面全部加2

3. 配置apache
  1. 取出下载的mod_jk-1.2.30-httpd-2.2.3.so。将其放置到Apache2.2\modules目录下
  2. 打开Apache2.2\conf\ httpd.conf文件。在其末尾添加上一行:
include "D:\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"
即调用conf目录下的mod_jk.conf这个配置文件。当然,apache conf目录下原来是没有这个文件的。我们需要自己新建这个文件。
  1. 在conf目录下新建Mod_jk.conf内容如下:
#加载mod_jk Module

LoadModule jk_module modules/mod_jk-1.2.30-httpd-2.2.3.so

#指定 workers.properties文件路径

JkWorkersFile conf/workers.properties

#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器

JkMount /* controller
  1. 接着,我们在conf目录下新建workers.properties内容如下:
worker.list = controller,tomcat1,tomcat2 #server 列表

#========tomcat1========

worker.tomcat1.port=8009 #ajp13 端口号,在tomcat下server.xml配置,默认8009

worker.tomcat1.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址

worker.tomcat1.type=ajp13 #定向包协议

worker.tomcat1.lbfactor = 1  #server的加权比重,值越高,分得的请求越多

worker.tomcat1.redirect = tomcat2

#========tomcat2========

worker.tomcat2.port=18009  #ajp13 端口号,在tomcat下server.xml配置,默认8009

worker.tomcat2.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址

worker.tomcat2.type=ajp13 #定向包协议

worker.tomcat2.lbfactor = 1  #server的加权比重,值越高,分得的请求越多

worker.tomcat2.redirect = tomcat1
worker.tomcat2.activation = disabled #  这句配置的意思是,负载均衡启动的时候,其实负载都到tomcat1上面去

#========controller,负载均衡控制器========

worker.controller.type=lb

worker.controller.balanced_workers=tomcat1,tomcat2  #指定分担请求的tomcat

worker.controller.sticky_session=1
4. Tomcat集群配置
  1. 修改集群设置在,Engine标签或Host标签元素下添加以下内容均可
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">

<Channel className="org.apache.catalina.tribes.group.GroupChannel">

<Membership className="org.apache.catalina.tribes.membership.McastService"

address="224.0.0.1"

port="45564"

frequency="500"

dropTime="3000"/>

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="auto"

port="4001"

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>
  1. 修改Engine标签的属性。
    在这里插入图片描述

2个tomcat, jvmRoute分别配置成tomcat1和tomcat2,即和apache/conf里worker.properites配置文件中配置的worker名称对应。

  1. 修改本项目的web.xml,添加
<Context distributable="true" /><Context distributable="true" />

在这里插入图片描述
需要而外注意的是,2个tomcat里添加到上面这段配置,其下的Port元素必需配置成不同的。如其中一个是4001,一个是4002.(tomcat默认可以检测到4000~4100之间的端口)。

4. 启动tomcat发现运行 浏览器访问locahost 发现运行正常
5.在我其中一台机器上可以启动tomcat,但是跑到另外一台机器上配置了集群之后tomcat就无法启动报错

org.apache.catalina.tribes.ChannelException: java.net.SocketException: error setting options; No faulty members identified.
看见这个错只需要把元素下的address属性默认值为224.0.0.1 . 这个配置在我的系统上始终会出现2个tomcat无法交换数据包的问题。需改成228.0.0.4才能正常使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值