在一些大公司采用F5负载均衡交换机作为负载均衡服务器,然后将请求转发给tomcat,但是F5设备动辄几十万,所以一些小公司采用采用开源的apache或Nginx来实现负载均衡,本文采用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡的
Apache是apache的http服务器,用于消息转发
mod_jk也叫 JK,这是一款 Apache/IIS 用来连接后台Tomcat的连接器,支持集群和负载均衡。
本教程为了方便教学,仅在一台windows系统下安装这个集群.详情是:安装一个apache的http程序,两个tomcat程序
安装步骤
1、下载
http://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi
安装httpd-2.2.25-win32-x86-no_ssl.msi
安装完成在浏览器输入
到此httpd安装成功。
解压tomcat zip文件
下载mod_jk
mod_jk版本: jk-1.2.31
下载地址: http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/mod_jk-1.2.31-httpd-2.2.3.so
配置mod_jk和apache
将下载后的mod_jk-1.2.31-httpd-2.2.3.so放到
httpd\modules下面
然后在httpd\conf下面新建一个mod_jk.conf
内容:
#加载mod_jk Module
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
#指定workers.properties文件路径
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名
JkMount /* controller
然后在httpd\conf创建一个workers.propertise
内容:
#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
然后在httpd\conf\httpd.conf文件底部加
Include conf/mod_jk.conf
到此配置完成
2、配置tomcat
配置tomcat1:
然后在
notifyListenersOnReplication="true"/>
port="45564"
frequency="500"
dropTime="3000"/>
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
同上配置tomcat2
新建一个index.jsp页面
server info : ${pageContext.request.localAddr}:${pageContext.request.localPort}
session ID : ${pageContext.session.id}
session属性列表
key | value |
---|---|
${attr} | ${sessionScope[attr]} |
添加:
移除:
还新建一个servlet用户添加和移除session中的内容
package cn.itcast.cluster.test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = -4508299817031218675L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method");
String key = request.getParameter("key");
if(!"".equals(key)){
if("add".equals(method)){
String value = request.getParameter("value");
request.getSession().setAttribute(key, value);
} else {
request.getSession().removeAttribute(key);
}
}
response.sendRedirect(request.getContextPath());
}
}
修改web.xml
将项目打完war包后分别放入到各个tomcat的webapps但中
之后在浏览器中访问:http://localhost/test/