兩臺不同服務器 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;
- }
- }
- }
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 都一樣。即可。
(菜鳥勿噴。)