Apache2.4 + Tomcat8.0.33 cluster configuration

Environmental information

Operating System: Windows7 Professional

Tomcat version: Tomcat 8.0.33

Apache version: httpd-2.2.25-win32-x86-openssl-0.9.8y

 

1. Install Apache

1.1 Download Apache for Windows

Apache download address:  http://httpd.apache.org/download.cgi

Select "Binaries" on the download page (whichever version of "Binaries" is available)

Then select "win32/"

Download "httpd-2.2.25-win32-x86-openssl-0.9.8y" (Apache has two versions "no_ssl" and "openssl", that is, does not support ssl and supports ssl. The "openssl" version is selected because of learning ssl later will use "openssl")

1.2 Install Apache

Double click on "httpd-2.2.25-win32-x86-openssl-0.9.8y.msi"

Fill in the server information casually

Select Custom to customize the installation path of Apache

The installation is complete

At this point, you can see the Apache icon in the lower right corner of Windows

 

Right-click this icon and select "Open Apache Monitor" to see the Apache Service Monitor interface

Enter http://localhost in the browser and see "It works", indicating that the Apache installation is successful

 

1.3 Modify the startup type of Apache

Apache is automatically started by default, you can go to "Services" to modify its startup type

Right-click Computer - Administration - Services and Applications - Services and find Apache2.2. Right-click Apache2.2, select Properties, and modify the startup type.

1.4 Uninstall Apache

打开”控制面板”,选择”卸载程序”,右键”Apache HTTP Server 2.2.25”,选择”卸载”

2. 部署 Tomcat 集群

2.1  创建 Tomcat-Cluster 目录

在 D 盘下新建 Tomcat-Cluster 文件夹,在 Tomcat-Cluster 下新建两个文件夹Tomcat1,Tomcat2

2.2  配置 Tomcat1

2.2.1 将 Tomcat ( Tomcat 8.0.3文件夹) 下的文件拷贝到 Tomcat1

2.2.2 创建测试项目 TestCluster

在 D:\ Tomcat-Cluster\Tomcat1\webapps 下,创建 TestCluster 文件夹,然后将ROOT 文件夹下的 WEB-INF 文件夹拷贝到 TestCluster 下

打开 TestCluster\WEB-INF\web.xml

在 </web-app> 上面添加 <distributable/>

(设置<distributable/>,即表明集群下某一节点生成或改变的 Session ,将广播到该集群的其它节点)

在 TestCluster 文件夹下 新建 index.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>TestCluster</title>
  </head>
  <body>
        Server Info:
    <%
      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 Info:
    <%
        session.setAttribute("name","dennisit");
        System.out.println("[Session Info] Session ID:"+session.getId());
        out.println("<br>[Session Info] Session ID:" + session.getId()+"<br>");
    %>
  </body>
</html>

2.2.3  修改 Tomcat1 的 Server.xml(Tomcat1\conf\Server.xml)

a.  将 Server 标签下的 8005 端口改为 7005 , Connector 标签下 8080,8009 端口改为 7080,7009 (为了避免端口冲突)

b .在 Engine 标签内添加 jvmRoute属性,将其设置为” Tomcat1”

c .将 Cluster标签的注释打开

修改后的server.xml ( 为了看起来简洁,删掉了 Tomcat 自带的注释 )

<?xml version='1.0' encoding='utf-8'?>

<!--将端口号由8005改为7005 -->
<Server port="7005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
    
<!--将端口号由8080改为7080 -->
<Connector port="7080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
    
<!--将端口号由8009改为7009 -->
<Connector port="7009" protocol="AJP/1.3" redirectPort="8443" />

<!--在Engine标签添加jvmRoute属性-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="Tomcat1">
      
  <!--将Cluster标签的注释去掉-->
  <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      
  <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
      </Realm>
  <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

2.3  配置 Tomcat2

将Tomcat1 下的文件拷贝到 Tomcat2

修改Tomcat2 的 Server.xml

a.将端口7005,7080,7009 改为 9005,9080,9009

b. Engine 标签内 的jvmRoute改为” Tomcat2”

2.4  启动 Tomcat 集群

( 如果之前配置过 Tomcat 的环境变量,要先将 Tomcat 的环境变量删除 )

双击Tomcat1\bin\startup.bat 、 Tomcat2\bin\startup.bat

在浏览器下输入:http://localhost:7080/TestCluster/index.jsp ,即可访问集群下Tomcat1 节点的 TestCluster

在浏览器下输入: http://localhost:9080/TestCluster/index.jsp ,即可访问集群下Tomcat2 节点 的 TestCluster

可以看到 Tomcat1、Tomcat2 两个节点的 Session 一样

3.  整合 Apache 与 Tomcat 集群

整合 Apache 与 Tomcat 集群 可以使用 mod_proxy_balancer也可以使用mod_jk

3.1  使用 mod_proxy_balancer

a.  在 D:\Program Files\Apache 2.2\conf 下新建 mod_proxy_balancer.conf

LoadModule proxy_module modules/mod_proxy.so  
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so  
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so  
LoadModule proxy_connect_module modules/mod_proxy_connect.so    
LoadModule proxy_http_module modules/mod_proxy_http.so
<Proxy balancer://TestCluster>
BalancerMember ajp://127.0.0.1:7009 loadfactor=1
BalancerMember ajp://127.0.0.1:9009 loadfactor=1
#BalancerMember http://127.0.0.1:7080 loadfactor=1
#BalancerMember http://127.0.0.1:9080 loadfactor=1
</Proxy>
ProxyPass / balancer://TestCluster/

LoadModule-加载模块

Proxy-负责定义代理,该代理下可以包含多个处理请求的节点

BalancerMember-处理请求的节点 ( 设置 ajp、http 均可 )

loadfactor-权重。某一节点的权重越大,分配到该节点的请求越多

ProxyPass -Apache 向 Proxy 转发请求的条件(ProxyPass /*.jsp balancer://TestCluster/ ,表明 Apache 将 http://localhost/ 下的所有jsp 请求转发给 balancer://TestCluster/ 处理 )

b. 修改httpd.conf

打开httpd.conf(Apache 2.2\conf\httpd.conf),在 尾部添加一行代码 

include conf/mod_proxy_balancer.conf

同时把下面代码前面注释去掉:

LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so

d.  测试

重启 Apache ,然后在浏览器下输入 http://localhost/TestCluster/index.jsp ,可看到如下页面

刷新之后,看到如下页面


两次请求,分别转发到了Tomcat1节点、Tomcat2节点,并且两个节点的Session一样

3.2 使用mod_jk

a. 下载 Windows 版 mod_jk.so

Windows 版 mod_jk.so 下载地址: http://tomcat.apache.org/download-connectors.cgi

点击页面的”  Binary Releases ”,然后点击” windows /”

下载 ” tomcat-connectors-1.2.39-windows-i386-httpd-2.2.x.zip ”

解压该文件,可得到” mod_jk.so ”。将” mod_jk.so ”拷到 Apache 2.2\modules 目录下

b.   在 Apache 2.2\conf 下新建 workers.properties

worker.list=controller,Tomcat1,Tomcat2
#========Tomcat1========
worker.Tomcat1.port=7009
worker.Tomcat1.host=localhost
worker.Tomcat1.type=ajp13
worker.Tomcat1.lbfactor=1
#========Tomcat2========
worker.Tomcat2.port=9009
worker.Tomcat2.host=localhost
worker.Tomcat2.type=ajp13
worker.Tomcat2.lbfactor=1
#========controller========
worker.controller.type=lb
worker.controller.balanced_workers=Tomcat1,Tomcat2
worker.controller.sticky_session=false

( 如果 worker.controller.sticky_session 设为 true ,则同一用户的同一 session 始终和一个 Tomcat 节点交互 )

c.  在 Apache 2.2\conf 下新建 mod_jk.conf

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkMount /* controller

JkWorkersFile-workers.properties 的位置

JkMount-Apache将 http://localhost/ 下的所有请求转发给 controller 处理

d.  修改 httpd.conf

打开 httpd.conf(Apache 2.2\conf\httpd.conf), 将尾部的include conf/mod_proxy_balancer.conf 注释掉,并添加一行代码

include conf/mod_jk.conf

e.  测试

重启 Apache ,然后在浏览器下输入 http://localhost/TestCluster/index.jsp ,可看到如下页面

刷新之后,看到如下页面 

两次请求,分别转发到了Tomcat1节点、Tomcat2节点,并且两个节点的Session一样

Apache 和 Tomcat 集群 整合后, Apache 是接收请求的入口,它根据设置的转发请求条件,决定将哪些请求转发个 Tomcat 处理

通常的应用场景为: Apache 作为 Web Server ,它只负责处理静态页面,而动态页面会交给 Tomcat(App Server) 处理

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326904022&siteId=291194637