您的位置:首页 > 运维架构 > Tomcat

windows下nginx+tomcat集群,实现session复制共享

2015-04-03 11:18 579 查看
两台不同服务器 ip1、ip2。ip1安装tomcat1,端口8005,8081,8009、nginx,提供nginx外网端口80,ip2安装tomcat2,端口8006,8082,8010。

1、安装apach tomcat。

2、安装ng,下载解压安装到ip1,根据需要修改配置文件nginx.conf:

[plain] view
plaincopy

#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:

[html] view
plaincopy

<%@ 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 都一样。即可。

(菜鸟勿喷。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: