nginx实现负载平衡后,用户第一个请求的tomcat和第二个请求的tomcat几乎不同,但第一个请求中放入session的值只有一个tomcat1。 第二次请求的tomcat2中没有。 现在,用户可以继续登录了。 为了解决这个session共享问题,我们提出了以下建议。
文章目录nginx实现创建一个tomcat群集实现session的共享步骤实现web项目,大致描述session共享IP_hash(IP绑定)步骤实现的优缺点,并将tomcat复制到文件夹中, 导出war包,更改server.xml修改端口和工作路径,启动tomcat,并测试是否可以成功关闭nginx配置文件的优缺点
用nginx实现会话共享IP_hash(IP绑定)
原理:每个请求都是为访问ip的每个哈希结果分配的。 这样,每个访问者可以通过固定访问一个后端服务器来解决session问题。
直接在实现概要说明配置文件中添加ip_hash即可实现ip绑定。 ip绑定与哪个浏览器无关,而是与本机计算机的ip的关系。 在nginx配置ip绑定之后,如果a客户端请求8080服务器,则A B的两个客户端将处理回8080服务器中的所有a请求;对于ip绑定,如果是高并发,则a客户端没有任何效果
upstream backserver {ip_hash; 服务器192.168.0.14:88; server 192.168.0.15:80; (优缺点http://www.Sina.com)实现也相对简单,需要修改nginx配置文件时为http://www.Sina.com) :
很多人逐网访问时,没有负载均衡这个词。 这很多ip都一样,去访问同一个tomcat。 如果此人访问的tomcat突然锁定,则nginx故障切换机制将分发给另一台tomcat服务器,所有请求此tomcat的用户都必须重新登录。 这个人正在使用,突然使用的网络不稳定,这个人换到另一个网络,这样ip变了,这个人又重新登录。优点:这样的解决方案很容易实现,但不能满足业务需求。 tomcat集群实现session共享缺点:该方法原理比较简单,有几个tomcat可以复制几个session,如一个tomcat的session
分步实现web项目小结
% @ page language=' Java ' import=' Java.util.* ' pageencoding=' utf-8 ' % % string path=request.getcontextpath ss ) request.getservername ) ) : ) request.getserverport ) )路径%! 文档类型html公共'-//W3C//dtd html 4.01 transitional//en ' htmlheadbasehref=' %=basepath % ' title my JSP ' index.titlemetahttp-equiv=' pragma ' content=' no-cache ' r=' cache ' meter uiv=' keywords ' content=' keyword 1,keyword2, 密钥3 ' meta http-equiv=' description ' content=' this is my page '-link rel=' style sheet ' type=' text/CSS ' href
t;%=request.getServerName()%> <BR> SessionPort:<%=request.getServerPort()%> <% out.println("This is Tomcat Server 111"); %> </body> </html>记得修改一下输出语句,进行不同tomcat的区分
写入之后,在web.xml中添加一个<distributable/>节点,放在display下面
(文件夹用于储存tomcat)
两个tomcat内容都是一样的,只不过文件夹命名不一样
放到tomcat的的webapps中
导出两次,第二次的时候,把输出语句换成2222,以便于观察,把第二次导出的war包放入到tomcat2中,第一次的就是放在tomcat1中。
打开tomcat的conf文件夹,对server.xml文件修改
找到<Engine name="Catalina" defaultHost="localhost">这一条语句,在此语句后输入:
修改端口
打开tomcat的conf文件夹,对server.xml文件修改,修改成不一样的即可,我为了简便,修改为如下:
tomcat1:
tomcat2:
修改工作路径
打开tomcat的坚定的机器猫文件夹,对startup.bat文件修改
在@echo off前面加上:
记得两个tomcat都要修改
启动tomcat两个都要启动(忽略乱码问题)
修改conf路径下的nginx.conf文件
fail_timeout与max_fails可以理解为,在fail_timeout的时间内,失败max_fails次,那就把请求分配给其他服务器
测试是否成功在浏览器输入自己的url以及端口测试
测试成功:是两个不同的tomcat,但是是一样的session,session共享成功
再次进入已经显示进不去了,证明nginx关闭了
优点:实现简单,没有什么花里胡哨的操作。如果集群中的tomcat的个数不多,而且用户没有那么多的时候可以选择这种方式。
缺点:只要Session数据有变化,就需要将数据同步到所有其他机器上,机器越多,同步带来的网络带宽开销就越大;当用户很多时,每台机器用于保存Session数据的内容占用会很严重。
暂未学习,学习之后再加入。