共计 3986 个字符,预计需要花费 10 分钟才能阅读完成。
CentOS-6.4-minimal 版中 Apache-2.2.29 与 Tomcat-6.0.41 实现负载均衡
———————————————————————————————————————-
关于负载均衡 (Load Balancer) 与集群 (Cluster) 的区别, 以及配置方式的不同, 详见 http://www.linuxidc.com/Linux/2014-09/107336.htm
———————————————————————————————————————-
配置负载均衡
本文建立在 Apache-2.2.29 与 Tomcat-6.0.41 整合的基础上, 整合过程详见 http://www.linuxidc.com/Linux/2014-09/107338.htm
1)修改端口 (由于我是在一台机器上复制多个 tomcat, 所以需要修改端口, 如果是不同的机器就可以跳过这一步)
[root@CentOS64 app]# vi tomcat/conf/server.xml (修改 8005 为 -1, 原因详见 http://www.linuxidc.com/Linux/2014-09/107339.htm)
[root@CentOS64 app]# cp -a tomcat tomcat1
[root@CentOS64 app]# cp -a tomcat tomcat2
[root@CentOS64 app]# cp -a tomcat tomcat3
[root@CentOS64 app]# vi tomcat1/conf/server.xml (修改 ssl 端口和 ajp 端口为 8543 和 8109, 即分别 +100)
[root@CentOS64 app]# vi tomcat2/conf/server.xml (修改 ssl 端口和 ajp 端口为 8643 和 8209, 即分别 +200)
[root@CentOS64 app]# vi tomcat3/conf/server.xml (修改 ssl 端口和 ajp 端口为 8743 和 8309, 即分别 +300)
2) 修改 /app/apache/conf/workers.properties, 修改后的内容如下
worker.list=status,tomcatlb
worker.status.type=status
worker.tomcat1.port=8109
worker.tomcat1.host=127.0.0.1
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
worker.tomcat2.port=8209
worker.tomcat2.host=127.0.0.1
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.tomcat3.port=8309
worker.tomcat3.host=127.0.0.1
worker.tomcat3.type=ajp13
worker.tomcat3.lbfactor=1 #负载权重, 值越高, 被分发请求的概率越大, 其默认值为 1
worker.tomcatlb.type=lb #可选值 ajp13,ajp14,jni,lb or status
worker.retries=6 #通信失败时的重试次数, 默认为 2
worker.tomcatlb.balanced_workers=tomcat1,tomcat2,tomcat3 #参与负载均衡的 Web 服务器
3) 修改 /app/apache/conf/extra/httpd-vhosts.conf
将默认的 tomcat 改为 tomcatlb, 即指定所有请求交由 tomcatlb 处理
———————————————————————————————————————-
测试负载均衡
1) 启动 apache 和三个 tomcat 后, 就可以通过 jkstatus 看到参与负载均衡的 3 个 tomcat 以及其它参数, 我们也可以通过 jkstatus 修改负载均衡参数
关于 jkstatus 的配置和使用, 详见 http://www.linuxidc.com/Linux/2014-09/107340.htm
2) 接下来测试一下负载均衡访问, 测试代码已在下方贴出
访问页面我们会发现, 每次刷新页面, 通过后台日志都可以看到请求是被随机分配给 3 个 tomcat 的, 说明是由 3 个 tomcat 平均承担的, 即负载均衡成功
并且, 由于这里并没有配置集群, 故每次刷新页面时, 页面打印的 SessionID 都是变化的
———————————————————————————————————————-
关于 workers.properties 的更多属性说明, 可参考以下两个网址
http://tomcat.apache.org/connectors-doc/reference/workers.html
http://www.linuxidc.com/Linux/2014-09/107341.htm
另外补充两个待验证的 workers 属性描述
1)worker.tomcatlb.sticky_session=true
此处指定集群是否需要会话复制, 若设为 true 则表明为会话粘性, 不进行会话复制
当某用户的请求第一次分发到哪台 Tomcat 后, 后继的请求会一直分发到此 Tomcat 服务器上处理
若设为 false 则表明需要会话复制, 该属性默认值为 true
当设置为 0(false) 时, 是基于请求的负载均衡, 为 1(true)时是基于用户的负载均衡
2)worker.tomcatlb.sticky_session_force=true
该属性默认值为 false, 若上面的 sticky_session 设为 true, 则建议此处也设为 true
此参数表明如果集群中某台 Tomcat 服务器在多次请求没有响应后, 是否将当前的请求转发到其它 Tomcat 服务器上处理
此参数在 sticky_session=true 时影响比较大, 会导致转发到其它 Tomcat 服务器上的请求找不到原来的 session
所以如果此时请求中有读取 session 中某些信息的话, 就会导致应用的 Null 异常
———————————————————————————————————————-
@create Sep 27, 2014 6:29:49 PM
@author 玄玉 <http://www.linuxidc.com>
<%@ page language=”Java” pageEncoding=”UTF-8″%>
<%
out.println(“<br>Session ID : ” + session.getId() + “<br>”);
session.setAttribute(“myname”, “session”);
String dataName = request.getParameter(“dataName”);
if(null!=dataName && dataName.length()>0){
String dataValue = request.getParameter(“dataValue”);
session.setAttribute(dataName, dataValue);
}
out.print(“<b>Session 列表 </b><br>”);
java.util.Enumeration e = session.getAttributeNames();
while(e.hasMoreElements()){
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println(name + ” = ” + value+”<br>”);
}
%>
<form action=”demo.jsp” method=”POST”>
属性名:<input type=text size=20 name=”dataName”><br>
属性值:<input type=text size=20 name=”dataValue”><br>
<input type=submit>
</form>
搭建 LVS 负载均衡测试环境 http://www.linuxidc.com/Linux/2014-09/106636.htm
Apache 负载均衡的实现 http://www.linuxidc.com/Linux/2014-09/106581.htm
更多 CentOS 相关信息见CentOS 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=14