配置 LB Tomcat:
在server1上安装ngixn服务器,提供反向代理功能
配置server2和server3为tomcat主机,作为nginx的后端服务器。
server2和server3:
[root@server2 local]# mkdir -pv /data/webapps/ROOT
[root@server2 local]# mkdir /data/webapps/logs
[root@server2 local]# mkdir -pv /data/webapps/ROOT/{lib,classes,WEB-INF,META-INF}
[root@server2 local]# vim /data/webapps/ROOT/index.jsp
<%@ page language="java"%>
<%@ page import="java.util.*"%>
<html>
<head>
<title>JSP Test Page on Web1</title>
</head>
<body>
<% out.println("Hello web1"); %>
</body>
</html>
[root@server2 local]# vim /usr/local/tomcat/conf/server.xml
<Host name="web1.wtt.com" appBase="/data/webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="ROOT" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
prefix="web1_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
并且修改默认虚拟主机为web1.wtt.com
<Engine name="Catalina" defaultHost="web1.wtt.com">
对于server3来说只需把虚拟主机的name改成web2.wtt.com
,并且把index.jsp页面的title改成 <title>JSP Test Page on Web2</title>
、println的内容改成Hello web2,然后将默认主机改为web2.wtt.com<Engine name="Catalina" defaultHost="web2.wtt.com">
开启tomcat服务就可以访问到两个tomcat主机了
接下来配置nginx服务器
在http{}部分添加后端主机
upstream tcsrvs {
server web1.wtt.com:8080;
server web2.wtt.com:8080;
在server{}部分配置反向代理
location ~* (\.jsp|.do) {
proxy_pass http://tcsrvs;
}
在nginx本机做好域名解析
172.25.44.2 web1.wtt.com
172.25.44.3 web2.wtt.com
在客户端访问代理主机,会对后端主机做负载均衡
基于source_ip hash接下来我们做session sticky
只需在后端主机部分加上 ip_hash; 然后重载服务即可
upstream tcsrvs {
ip_hash;
server web1.wtt.com:8080;
server web2.wtt.com:8080;
}
#使用httpd做代理服务器
有三种解决方案:
(1)apache:
proxy_module
proxy_http_module
proxy_balancer_module
tomcat:
http connector
(2)apache:
proxy_module
proxy_ajp_module
proxy_balancer_module
tomcat:
ajp connector
(3)apache:
mod_jk
tomcat:
ajp connector
在目前的生产环境中第三种用的不是很多了,所以我们接下来配置前两种
第一种方法的实现:
我们在上篇博客配置的lamt的基础上做如下配置
server1:
停掉nginx主机。
安装httpd服务,并做如下配置
[root@server1 ~]# vim /etc/httpd/conf.d/vhosts.conf
<proxy balancer://lbcluster1>
BalancerMember http://172.25.44.2:8080 loadfactor=10 route=TomcatA
BalancerMember http://172.25.44.3:8080 loadfactor=10 route=TomcatB
</proxy>
<VirtualHost *:80>
ServerName web1.wtt.com
proxyVia On
proxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
allow from all
</Proxy>
proxyPass / balancer://lbcluster1/
ProxyPassReverse / balancer://lbcluster1/
<Location />
Order deny,allow
allow from all
</Location>
</VirtualHost>
这里我们更改一些index.jsp页面
server2:
[root@server2 ~]# vim /data/webapps/ROOT/index.jsp
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></Haed>
<body>
<h1><font color="red">TomcatA.wtt.com</font></h1>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("wtt.com","wtt.com"); %>
<td><%=session.getId()%></td>
</tr>
<tr>
<td>Created on</td>
<td><%=session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
[root@server2 ~]# vim /usr/local/tomcat/conf/server.xml
<Engine name="Catalina" defaultHost="web1.wtt.com" JvmRoute="TomcatA">
server3与server2配置类似,只不过把TomcatA改成TomcatB
开启服务后访问就可以看到负载均衡效果了
接下来实现第二种:
只需在第一种的基础上做出如下修改
<proxy balancer://lbcluster1>
BalancerMember ajp://172.25.44.2:8009 loadfactor=10 route=TomcatA
BalancerMember ajp://172.25.44.3:8009 loadfactor=10 route=TomcatB
</proxy>
重启服务后访问web服务器就可以看到负载均衡效果