集群系统具有以下优点:
高可靠性(HA):利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。
高性能计算(HP):即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析,化学分析等。
负载平衡:即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。
原理:
JK插件的负载均衡器根据在worker.properties中配置的lbfactor(负载平衡因数),负责为集群系统中的Tomcat服务器分配工作负荷,以实现负载平衡。每个Tomcat服务器间用集群管理器(SimpleTcpCluster)进行通信,以实现HTTP回话的复制,比如Session。
搭建过程:
首先修改httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
##下面这类模块,是选择负载请求分发的方式的,应该是**选且只能选一个**,按需要解开注释吧
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
Include conf/extra/httpd-vhosts.conf
#在文档的最后加上负载均衡配置
ProxyRequests Off
<proxy balancer://cluster>
BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=tomat8_1
BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=tomat8_2
</proxy>
#注意,ajp是协议,tomcat默认会有一个支持ajp协议的<connector>,IP后面的端口指的是tomcat中ajp连接器的端口
#route一会儿要和tomcat里面的配置对应
修改httpd/conf/extra/httpd-vhosts.conf
文件
//注释或删除原来的VirtualHost配置,然后作以下配置
<VirtualHost *:80>
ServerAdmin 127.0.0.1
ServerName 127.0.0.1
ServerAlias 127.0.0.1
ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://cluster/
ErrorLog "logs/lb-error.log"
CustomLog "logs/lb-access.log" common
</VirtualHost>
修改2个tomcat的server.xml
<!-- 在引擎上配置jvmRoute和httpd.conf中的route一样就行了,另一个tomcat也要记得配置 -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat8_1">
写一个测试jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster Test</title></head>
<body>
<h3>this is tomcat1!!</h3>
<%
out.println("<p> SESSION ID : " + session.getId()+"</p>");
String name = request.getParameter("name");
if (name != null && name.length() > 0) {
String value = request.getParameter("value");
session.setAttribute(name, value);
}
out.print("<table border = '1'>");
out.print("<tr><th>session key </th><th>session value </th></tr>");
Enumeration<String> names = session.getAttributeNames();
while (names.hasMoreElements()) {
String key = names.nextElement();
String value = session.getAttribute(key).toString();
System.out.print(key + " --- " + value);
out.print("<tr><td>"+key+"</td><td>"+value+"</td></tr>");
}
out.print("</table>");
%>
<br />
<form action="test.jsp" method="post">
session key :<input type=text name="name">
session value:<input type=text name="value">
<input type=submit value="添加">
</form>
</body>
</html>
测试结果
此时使用的2个tomcat的真实路径,还没有进行转发,应该将路径写成http://127.0.0.1/xsdxch/test.jsp,由于前面配置的负载因子为1,所第一次是tomcat8_1,第二次是tomcat8_2,第三次是tomcat8_1........