一、前言
tomcat主要用于web网页应用,它的静态处理能力低于nginx服务器但是可以当做容器主要用于JAVA程序编写的页面.jsp。用于测试。
可以实现负载均衡,反向代理,tomcat和其他的服务相比较,性价比高。另外tomcat是有apache基金会维护和支持
本次实验我将搭建nginx作为反向代理服务器,转发多个tomcat服务器,实现负载均衡。
二、搭建nginx反向代理实现tomcat负载均衡
实验环境
主机名 | ip | 服务 |
---|---|---|
server1 | 172.25.1.101 | lnmp+memcache+OpenResty+tomcat+jsp |
server2 | 172.25.1.102 | tomcat+jsp |
真机 | 172.25.1.250 | 客户端 |
实验
在server1上:
步骤 一:将加压配置好的tomcat和jkd文件发送到server2上
cd /usr/local
scp -r apache-tomcat-7.0.37 jdk1.7.0_79 root@server2:/usr/local/
在server2上:
步骤一:做软链接
cd /usr/local
ln -s apache-tomcat-7.0.37 tomcat
ln -s jdk1.7.0_79 java
步骤二:配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
步骤三:编辑openresty中配置文件,添加tomcat主机,并重启nginx
如果没有配置openresty,则直接修改nginx配置文件
cd /usr/local/openresty/nginx/conf/
vim nginx.conf
17 http {
18 upstream tomcat{
19 server 172.25.1.101:8080;
20 server 172.25.1.102:8080;
21 }
72 location ~ \.jsp$ {
73 proxy_pass http://tomcat;
74 }
/usr/local/openresty/nginx/sbin/nginx -t
/usr/local/openresty/nginx/sbin/nginx -s reload
步骤四:先删除原有测试页,再编辑新测试页test.jsp,并发送server2
cd /usr/local/tomcat/webapps/ROOT/
rm -fr test.jsp
vim test.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
scp test.jsp server2:/usr/local/tomcat/webapps/ROOT/
步骤五:重启tomcat,并查看端口
cd /usr/local/tomcat/bin/
./shutdown.sh
./startup.sh
netstat -antuple
在server2上:
cd /usr/local/tomcat/bin/
./startup.sh
在真机上:
打开浏览器访问测试页http://172.25.1.101/test.jsp
总结
可以看到两个服务器轮流对客户端提供服务。由此,客户端提交数据到一台主机上,轮询调度时会发生数据丢失。举个简单的例子,用户登陆淘宝页面,服务器A提供服务,用户输入登陆信息,点击登陆,刷新页面同时后端服务器调转到B上,用户输入的信息丢失,反复出现登陆界面。具体解决方法见下一篇。
补充:
在server1上:
我们还可以在配置文件添加权重weight
vim /usr/local/openresty/nginx/conf/nginx.conf
17 http {
18 upstream tomcat{
19 server 172.25.1.101:8080 weight=1;
20 server 172.25.1.102:8080 weigth=2;
21 }