windows下nginx+tomcat叢集,實現session複製共享
阿新 • • 發佈:2019-01-06
兩臺不同伺服器 ip1、ip2。ip1安裝tomcat1,埠8005,8081,8009、nginx,提供nginx外網埠80,ip2安裝tomcat2,埠8006,8082,8010。
1、安裝apach tomcat。
2、安裝ng,下載解壓安裝到ip1,根據需要修改配置檔案nginx.conf:
此時,如果tomcat1、2啟動,使用http://nginx.ip訪問,檢視ng日誌,會發現有時候請求ip1伺服器,有時候請求的是ip2。這就已經達到了ng負載的功能。#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 都一樣。即可。
(菜鳥勿噴。)