两台不同服务器 ip1、ip2。ip1安装tomcat1,端口8005,8081,8009、nginx,提供nginx外网端口80,ip2安装tomcat2,端口8006,8082,8010。
1、安装apach tomcat。
2、安装ng,下载解压安装到ip1,根据需要修改配置文件nginx.conf:
#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:
<%@ 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 都一样。即可。
(菜鸟勿喷。)