Apache2.4 + Tomcat8.0.33集群配置

环境信息

操作系统: Windows7 Professional

Tomcat 版本: Tomcat 8.0.33

Apache 版本: httpd-2.2.25-win32-x86-openssl-0.9.8y

1. 安装 Apache

1.1  下载 Windows 版 Apache

Apache 下载地址: http://httpd.apache.org/download.cgi

在下载页面选择”Binaries”( 哪个版本下的 ”Binaries”均可 )

然后选择” win32 /”

下载” httpd-2.2.25-win32-x86-openssl-0.9.8y ”( Apache 有两个版本 ” no_ssl ”和”openssl ”,即不支持 ssl 和支持 ssl 。 选择” openssl ”版是由于以后学习 ssl 会用到”openssl ”)

1.2 安装 Apache

双击” httpd-2.2.25-win32-x86-openssl-0.9.8y.msi”

Server 信息随便填

选择 Custom ,可以自定义 Apache 的安装路径

安装完成

此时,在 Windows 右下角可以看到 Apache 图标

 

右键此图标,选择 ”Open Apache Monitor”,可以看到 Apache Service Monitor 界面

在浏览器下输入 http://localhost ,看到 ”It works” ,表明 Apache 安装成功

 

1.3  修改 Apache 的启动类型

Apache 默认是自动启动的,可以到 ”服务”下修改其启动类型

右键计算机-管理-服务和应用程序-服务,找到 Apache2.2。 右键Apache2.2 ,选择属性,修改启动类型即可

1.4  卸载 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) 处理

猜你喜欢

转载自wkk52586.iteye.com/blog/2298874
今日推荐