apache http service 2.4 + mod_jk + tomcat 8 集群配置总结

一:同一机器多Tomcat  解压版安装配置

1.1下载文件要求
      由于tomcat5之后安装版的会自己主动注册名为“Tomcat X”的服务,安装多个时,会由于windows中服务名重复而失败,所以应该下载windows解压版(里面也有linux类系统的批处理程序.sh文件)或者linux版本,linux类系统版本的Tomcat中也有.bat文件(WINDOWS批处理程序)
1.2改各个tomcat的监听端口
      多个Tomcat之间监听端口需要互斥,需改动的文件所在位置: %CATALINA_HOME%\conf\server.xml (各类型端口不通,HTTP ,AJP、jvm启动默认端口等)
1.3改各个tomcat的服务名字
      在windows系统中,注册的服务名必须互斥,需改动的文件所在位置:%CATALINA_HOME%\bin\service.bat,
操作: 找到(ctrl+F)set SERVICE_NAME=...;将等号右边的改为互斥的名字,如下图
1.4为各个Tomcat配置自己CATALINA_HOME 与 CATALINA_BASE
       每个tomcat启动的时候都会去系统环境变量中寻找这两个值(CATALINA_HOME 与 CATALINA_BASE ),比较方便的做法:
法一:文件所在位置%CATALINA_HOME%\bin\startup.bat,
操作:在文件首加入两行:
set CATALINA_HOME=。。。(目录不需要加引号)
set CATALINA_BASE=。。。(目录不需要加引号)
1.5为各个Tomcat安装系统服务
       cmd进入 安装 目录的Bin文件夹,运行 service.bat install  或者 (卸载服务)service.bat uninstall
1.6同时启动多个Tomcat
       文件所在位置:%CATALINA_HOME%\bin\startup.bat  操作:双击
注:bin目录下也会有tomcat6.exe,tomcat6w.exe这两个文件,千万不要以打开它。因为tomcat6.exe,tomcat6w.exe这两个文件会自动的去打开服务姓名为:“tomcat6” 的服务(其他版本的tomcat同理)

二:配置apache http service

2.1下载(zip版)
2.2安装
     黑窗口进入.../Apache/bin目录:进行服务安装,命令:httpd -k install(同理:卸载命令:httpd -k uninstall)
     一般需要对conf/httpd.conf文件里   根目录  做对应修改,改为Apache在自己电脑中的解压路径,代码如下:
    Define SRVROOT "解压路径"
    ServerRoot "${SRVROOT}"
2.3mod_jk.so下载
    注意与httpd版本之间的对应,2.2.X与2.3、2.4各版本的差别,与正确下载(下载路径在Tomcat主页左侧找到tomcat-connectors入口),本文采取httpd2.4版本,所以下载tomcat-connectors-1.2.40-windows-x86_64-httpd-2.4.x.zip
2.4mod_jk.so放置路径
    拷贝mod_jk.so到Apache安装路径的modules文件夹下

2.5配置步骤

A) 修改Apache配置:


    1.修改Apache配置文件httpd.conf(笔者路径:D:\Apache2.2\conf\httpd.conf), 在最后一行末尾添加:
             
          include "D:\Apache2.2\conf\mod_jk.conf"

    2. 在httpd.conf 同目录下新建mod_jk.conf文件

          #加载mod_jk Module
          LoadModule jk_module modules/mod_jk.so

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

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

    3.在httpd.conf同目录下新建 workers.properties文件

          #这里可以配置任意多个Tomcat,此处配置了2个Tomat服务器.
          #host和port根据自己实际配置.实例配置的是本机两个tomcat,分别使用不同的端口.避免冲突
          #如果Tomcat不再同一机器上,没必要改端口的。

          #server 列表
          worker.list=controller,tomcat1,tomcat2  

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

          worker.tomcat1.port=9988        #ajp13 端口号,在tomcat下server.xml配置,默认8009
          worker.tomcat1.host=localhost        #tomcat的主机地址,如不为本机,请填写ip地址
          worker.tomcat1.type=ajp13
          worker.tomcat1.lbfactor=1        #server的加权比重,值越高,分得的请求越多

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

          worker.tomcat2.port=9999        #ajp13 端口号,在tomcat下server.xml配置,默认8009
          worker.tomcat2.host=localhost        #tomcat的主机地址,如不为本机,请填写ip地址
          worker.tomcat2.type=ajp13
          worker.tomcat2.lbfactor=1        #server的加权比重,值越高,分得的请求越多 

          #========controller,负载均衡控制器========
          worker.controller.type=lb

          #指定此负载平衡器负责的Tomcat应用节点。

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

          #此处指定集群是否需要会话复制,如果设为true,则表明为会话粘性,不进行会话复制,当某用户的请求第一次分发到哪台
          #Tomcat后,后继的请求会一直分发到此Tomcat服务器上处理;如果设为false,则表明需求会话复制。

          worker.controller.sticky_session=false      #设为false,则表明需求会话复制。

B) 修改Tomcat配置:

     以tomcat-node1为实例

          1.修改分发tomcat对应的service.xml文件,保证Apache对应的 workers.properties中的AJP13的connector的port.
          <!-- 定义一个AJP 1.3 连接端口为9988 ,默认值为8009,这里我们改成我们自己定义的9988端口 --><Connector port="9988" protocol="AJP/1.3" redirectPort="8443" />

          2.增加jvmRoute的值,保证同workers.properties里边配置的值一致
          <!--增加jvmRoute,值为在Apache中配置的list集群结点中的值,这里定义为tomcat1结点--><Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

          3.去掉默认注释掉的集群配置
          <!--取消集群结点相关的注释,该句默认值注释掉的,我们需要配置集群所以去掉注释,让其起作用--><Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
          如果我们的tomcat结点分布在不同的机器上,那么我们的集群至此已经配置完成.去掉多余注释,显示做了修改的部位

     修改前

          <!-- Define an AJP 1.3 Connector on port 8009 --><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

          <!-- You should set jvmRoute to support load-balancing via AJP ie :
          <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
          --><Engine name="Catalina" defaultHost="localhost">

          <!--For clustering--><!--
          <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
          -->

    后的tomcat-node1

          <!-- 定义一个AJP 1.3 连接端口为9988 ,默认值为8009,这里我们改成我们自己定义的9988端口 -->
          <Connector port="9988" protocol="AJP/1.3" redirectPort="8443" />

          <!--增加jvmRoute,值为在Apache中配置的list集群结点中的值,这里定义为tomcat1结点-->
          <Engine name="Catalina" defaultHost="localhost"  jvmRoute="tomcat1">

          <!--取消集群结点相关的注释,该句默认值注释掉的,我们需要配置集群所以去掉注释,让其起作用-->
          <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

   修改后的tomcat-node2

          <!-- Define an AJP 1.3 Connector on port 8009 --><Connector port="9999" protocol="AJP/1.3" redirectPort="8443" />

          <!-- You should set jvmRoute to support load-balancing via AJP ie :
          <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
          --><Engine name="Catalina" defaultHost="localhost"  jvmRoute="tomcat2">

          <!--For clustering--><Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

          说明:这里的protocol="AJP/1.3",连接以及jvmRoute需要保证同我们在Apache服务器中配置的works.properties一致.修改完后最好将service.xml文件的编码设置为utf-8格式.否则可能tomcat启动会出错.

C) 实例中我们的两个tomcat结点在同一台机器上,所以还需要保证protocol="HTTP/1.1"的端口不一致.不然本地的两个tomcat会起冲突

          下面为笔者实例中解决同一台机器上多个tomcat服务器之间端口冲突做的修改.

          Tomcat--node1
 
          Tomcat-node2 类似

          <Server port="9995" shutdown="SHUTDOWN">
          ……
          <Connector port="9990" protocol="HTTP/1.1"
                         connectionTimeout="20000"
                        redirectPort="8443" />
          ……

          说明:这里的protocol="HTTP/1.1"配置的相关端口之间不能冲突,而且也不能同本机其它应用程序占用的端口冲突.否则可能会报错.

D) 实例测试

    1.在项目的web.xml文件中增加

          <distributable/>

     2.编写测试jsp代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.text.SimpleDateFormat"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Tomcat集群测试</title>
  </head>
  
  <body>
        服务器信息:

    <%
      String dtm = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
      System.out.println("["+request.getLocalAddr()+":"+ request.getLocalPort()+"]" + dtm);
      out.println("<br>["+request.getLocalAddr()+":" +request.getLocalPort()+"]" + dtm+"<br>"); 
    %>
    
    session分发:
    <%
        session.setAttribute("name","dennisit");
        System.out.println("[session分发] session id:"+session.getId());
        out.println("<br>[session分发] session id: " + session.getId()+"<br>");
    %>
  </body>
</html>

   3.测试负载均衡与session分发

         将项目部署到每个集群结点中,即实例中的tomcat_node1和tomcat_node2,依次移动Apache和tomcat服务器,tomcat服务器之间的启动顺序随意. 这里Apache端口使用默认的80.
         上面是在FireFox中运行项目后刷新3次执行的效果,可以看到2个tomcat分发结点之间轮流负载.而且 两台服务器上的session值是一样的.说明session分发成功.

         两台Tomcat服务器日志打印输出结果:

转载于:https://my.oschina.net/LinJunXin/blog/546730

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值