Tomcat的集群配置(Apache + mod_jk + tomcat来实现tomcat集群的负载均衡)

8 篇文章 0 订阅

1.集群结构
这里写图片描述
2.负载均衡服务器
在一些大公司采用F5负载均衡交换机作为负载均衡服务器,然后将请求转发给tomcat,但是F5设备动辄几十万,所以一些小公司采用采用开源的apache或Nginx来实现负载均衡,本文采用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡的

3.软件
Apache是apache的http服务器,用于消息转发
mod_jk也叫 JK,这是一款 Apache/IIS 用来连接后台Tomcat的连接器,支持集群和负载均衡。
环境
本教程为了方便教学,仅在一台windows系统下安装这个集群.详情是:安装一个apache的http程序,两个tomcat程序
4.软件的配置
下载软件地址:64位的(http://download.csdn.net/download/u010244958/9736877
安装软件:apach tomcat 都在同一目录下

  • 安装Apache服务器
    版本:2.2.25
    需要注意的是:
    这里写图片描述
    当安装到出现上面的信息时,可随意添加合法的域名和邮箱地址
    之后选择安装路径,这里是安装在C:\cluster\httpd目录下
    这里写图片描述
    Apache安装完成后在浏览器中输入http://localhost/ ,如果出现下图说明安装成功

这里写图片描述

  • 安装tomcat
    版本:7.0.8
    将tomcat解压到C:\cluster\目录下,然后重命名为tomcat1,再复制粘贴一份重命名为tomcat2
    效果如下图:
    这里写图片描述

  • 下载 mod_jk
    mod_jk版本: jk-1.2.31

  • 配置mod_jk和apache
    将下载后的mod_jk-1.2.31-httpd-2.2.3.so放到C:\cluster\httpd\modules目录下
    然后在C:\cluster\httpd\conf目录下创建一个mod_jk.conf

  • 在mod_jk.conf中添加如下内容:

#加载mod_jk Module mod_jk.so 软件的名字根据实际定
LoadModule jk_module modules/mod_jk.so

#指定workers.properties文件路径 
JkWorkersFile conf/workers.properties

#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名
JkMount /* controller
  • 然后在C:\cluster\httpd\conf创建一个workers.properties的文件,添加如下内容


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

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

#协议类型
worker.tomcat1.type=ajp13

#server的加权比重,值越高,分得的请求越多。lbfactor是负载平衡因数(Load Balance Factor)
worker.tomcat1.lbfactor=1

#========tomcat2========
worker.tomcat2.port=9009
worker.tomcat2.host= localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1

#========controller,负载均衡控制器========
#负载均衡控制器类型,lbfactor是负载平衡因数(Load Balance Factor)
worker.controller.type=lb

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

#粘性session(默认是打开的) 当该属性值=true(或1)时,代表session是粘性的,即同一session在集群中的同一个节点上处理,session不跨越节点。在集群环境中,一般将该值设置为false
worker.controller.sticky_session=false

#设置用于负载均衡的server的session可否共享
worker.controller.sticky_session_force=1
  • 最后在修改C:\cluster\httpd\conf\httpd.conf,在其最后添加如下内容:
Include conf/mod_jk.conf

到此负载均衡服务器配置完成!

5.配置Tomcat
修改C:\cluster\tomcat1\conf\server.xml,在配置中添加jvmRoute及下添加如下内容

  <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
      <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"/>
            <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>    

第二个 tomcat
然后再修改第二个tomcat.
修改C:\cluster\tomcat2\conf\server.xml,在配置中添加jvmRoute=”tomcat2”,,在配置中添加jvmRoute及下添加如下内容

<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"/>
            <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>    

  • Tomcat2的端口的修改:
    注意:因为在一台机器上部署两台tomcat,所以需要修改第二个tomcat的端口,不然会产生冲突
<Server port="9005" shutdown="SHUTDOWN"> 默认为:8005

然后修改http1.1的端口,默认是8080

<Connector port="9080" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" /> 

最后修改AJP1.3端口,默认是8009

<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />

这个AJP1.3的端口必须与C:\cluster\httpd\conf\ workers.properties文件中的配置保持一下
6.测试
重启apache
启动tomcat1和tomcat2
在浏览器中访问http://localhost/会出现
这里写图片描述
完成了
7.部署项目测试
项目地址

我们发现现在的session ID 是由“sessionid” + “.” + “jvmRoute的值”组成,每次刷新sessionid不变,而jvmRoute的值发生变化,这说明session已经同步且轮询访问所有的tomcat

添加删除session刷新观察变化
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值