两台不同服务器 ip1、ip2。ip1安装tomcat1,端口8005,8081,8009、nginx,提供nginx外网端口80,ip2安装tomcat2,端口8006,8082,8010。
1、安装apach tomcat。
2、安装ng,下载解压安装到ip1,根据需要修改配置文件nginx.conf:
代码语言:javascript复制#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream portal-driver{
server ip1:8081 max_fails=0;
server ip2:8082 max_fails=0;
}
server {
listen 80;
server_name localhost;
location /drive{
root html;
index index.html index.htm;
proxy_pass http://portal-driver;
proxy_redirect default;
}
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
此时,如果tomcat1、2启动,使用http://nginx.ip访问,查看ng日志,会发现有时候请求ip1服务器,有时候请求的是ip2。这就已经达到了ng负载的功能。
windows下nginx命令:
关闭:nginx.exe -s stop
开启:start nging.exe
重启 nginx.exe - s reload
注,但是此时由于tomcat1、tomcat2部署同一套工程,如果有数据直接写往session,而且不是使用的cookie存放session的key(由于访问地址使用ip,并不适用域名,所以没法使用cookie),会造成两次访问session id不一致。此时就需要做session复制或共享。需要以下操作:
3、修改tomcat下的conf,server.xml文件(两个tomcat修改一致):
将tomcat集群注释cluster打开。
修改节点<Engine name="Catalina" defaultHost="localhost" jvmRoute="driver1">。(tomcat1跟tomcat2指定jvmRoute命名要一致)
4、在工程代码中web.xml添加节点<distributable/> 即可。
测试:
index.jsp:
代码语言:javascript复制<%@ 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>"); // 如果有新的 Session 属性设置
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session 列表</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="index.jsp" method="POST">
名称:<input type=text size=20 name="dataName"> <br>
值:<input type=text size=20 name="dataValue"> <br>
<input type=submit>
</form>
</body>
</html>
多次访问,发现 Server Info的ip跟端口一直处于ip1,ip2轮询。但是下面的sessionid 都一样。即可。
(菜鸟勿喷。)