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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Android_Mrchen/article/details/83342587

欢迎访问我的网站

下载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才能正常使用。

猜你喜欢

转载自blog.csdn.net/Android_Mrchen/article/details/83342587
今日推荐