本文介绍了集群和负载均衡的基本开源实现,实现了用Apache分发请求到多个Tomcat里面对应的应用。模块介绍- Apache作为Web服务器,用于处理静态Http请求;- Tomcat作为应用服务器(Servlet容器),处理动态请求;- JK 作为Apache与Tomcat之 ...
本文介绍了集群和负载均衡的基本开源实现,实现了用Apache分发请求到多个Tomcat里面对应的应用。
模块介绍
- Apache作为Web服务器,用于处理静态Http请求;
- Tomcat作为应用服务器(Servlet容器),处理动态请求;
- JK 作为Apache与Tomcat之间的桥梁,实现了Apache与Tomcat一对多的对应,使后端Tomcat负载均衡。
开发环境
- Windows 7操作系统
- Java SE8
- Apache 2.2.14 (本地安装路径:D:\Apache2.2\)
- Tomcat 7.0.42 ( http://tomcat.apache.org/download-70.cgi ),如果在同一台机器上模拟,下载zip版本. 实例中展示了2个节点
- mod_jk: 1.2.37: ( http://tomcat.apache.org/download-connectors.cgi )
安装步骤:
1.安装jdk 2.安装Apache2.2,使用默认设置,并且安装路径中不要空格. 3.解压tomcat 4.拷贝mod_jk.so到Apache安装路径的modules文件夹下
配置步骤
修改Apache配置:
关于修改涉及到的文件httpd.conf和workers.properties文件可以下载一份mod_jk的源码包参看
1.修改Apache配置文件httpd.conf(笔者路径:D:\Apache2.2\conf\httpd.conf), 在最后一行末尾添加:
[html] view plaincopyprint?
- include "D:\Apache2.2\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
- #这里可以配置任意多个Tomcat,此处配置了2个Tomat服务器.
- #host和port根据自己实际配置.实例配置的是本机两个tomcat,分别使用不同的端口.避免冲突
- #如果Tomcat不再同一机器上,没必要改端口的。
-
-
- #server 列表
- worker.list=controller,tomcat1,tomcat2
-
-
- #========tomcat1========
-
- worker.tomcat1.port=9988 #ajp13 端口号,在tomcat下server.
- worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
- worker.tomcat1.type=ajp13
- worker.tomcat1.lbfactor=1 #server的加权比重,值越高,分得的请求越多
-
- #========tomcat2========
-
- worker.tomcat2.port=9999 #ajp13 端口号,在tomcat下server.
- 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,则表明需求会话复制。
- <!-- 定义一个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"/>
- <!-- 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"/>
- -->
- <!-- 定义一个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"/>
- <!-- 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"/>
- <Server port="9995" shutdown="SHUTDOWN">
- ……
- <Connector port="9990" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
- ……
- <distributable/>
- <%@ 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>
原标题:Apache + Tomcat + JK 实现负载均衡和集群
关键词:Apache
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。