为了缓解因为Web服务器的session所占据的内存空间,减轻过多并发用户所占用的系统资源,使用nginx的超高并发性,再结合内存数据库缓存机制,进一步减轻服务器压力,提升系统稳定性、可扩展性。
(一般情况下:每个session占据大概0.5M的空间,如果是超过上万的在线用户,消耗web服务器的内存资源是很大的),利用nginx的超高并发性,10000个在线用户(inactive)情况下,占用的内存2.5M左右,节省了大量的系统资源。
分布式共享方式也有不少方式,对于简单的session方式,直接使用ip_hash方式,每次用户请求的都是同一台服务器,避免session请求到其他web 服务器上面;
基于NFS共享文件系统,图片、文档的共享;
类似本文的memcached 的session内存数据库缓存方式;
基于tomcat分布式web.xml 的<distributable/> 共享session设置方式;
基于cookie 进行session共享(安全问题,小心被劫持DNS);
基于TT/Redis 或 jbosscache 进行 session 共享;
基于Rdbms数据库的Session共享;
其他方式apache或者第三方等等。
本文使用高性能内存缓存数据库redis,性能优异,方便简单,有主从备份机制。
基本配置环境:
jdk 64bit
linux centos6 64bbit
apache-tomcat-7.0.42
redis2.6(linux ubuntu)
Nginx1.8.0
这里认为所有环境已经安装配置好,这里仅仅是记录一些参数配置信息。
Tomcat A :(192.168.1.101)
server.xml
1、<Server port="8005" shutdown="SHUTDOWN">
2、 <Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
3、<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
context.xml
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="192.168.1.100"
port="6380"
password="pass"
database="1"
maxInactiveInterval="3600"/>
TomcatB(192.168.1.102)在同一台机器上面需要修改tomcat参数,不同机器,就不用修改。
server.xml
1、<Server port="8006" shutdown="SHUTDOWN">
2、 <Connector port="8082" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444" />
3、<Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />
context.xml
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="192.168.1.100"
port="6380"
password="pass"
database="1"
maxInactiveInterval="3600"/>
nginx配置参数:
upstream nginx {
server 192.168.1.101:8081;
server 192.168.1.102:8082;
}
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /nginx {
proxy_pass http://nginx;
#root html;
#index index.html index.htm;
}
redis配置参数:
基本是默认配置,
如需要主从备份机制,在从机上面请开放:slaveof <masterip> <masterport>
设置账户访问密码,请开放:requirepass pass
调整默认访问端口,请设置:port 6380
指定允许访问IP地址,请设置:bind 192.168.1.100 192.168.1.101 192.168.1.102
需要提供的jar包,由于在使用过程中有依赖性关系,这里使用pom.xml来配置,
获取到4个jar包,拷贝到tomcat_home下面lib目录下面:
commons-pool-1.6.jar
commons-pool2-2.2.jar
jedis-2.2.1.jar
tomcat-redis-session-manager-1.2-tomcat-7.jar (tomcat6请换成对应的jar包)
基本配置参数以及对应的jar包已经到位。
应该是修改对象war包项目的session值,检查测试。
一台tomcat对应的session值修改,然后检查对比是否另外一台tomcat响应正确,redis数据库是否存储实际的session值,默认也是指定过期时间30分钟,redis命令:ttl "sesionId",正常情况是完全模拟session原理实现。
jsp测试页面:
tomcatA
<body>
TomcatAAAAAAAAA<br/>
<%
HttpSession session = request.getSession();
//将数据存储到session中
session.setAttribute("data", "dingnigefei");
//获取session的Id
String sessionId = session.getId();
System.out.println(session.getAttribute("data"));
System.out.println(sessionId);
%>
</body>
------------------------------------------------------------
tomcatB
<body>
TomcatBBBBBBBB<br/>
<%
HttpSession session = request.getSession();
System.out.println(session.getAttribute("data"));
%>
</body>
访问量很大的互联网架构考虑,必须考虑对于应用无状态性需要良好的设计、管控。
一个系统的伸缩性的好坏取决于应用的状态如何管理。试想一下,假如我们在 session 中保存了大量与客户端的状态信息的话,那么当保存状态信息的 server 宕机的时候,我们怎么办?通常来说,我们都是通过集群来解决这个问题,而通常所说的集群,不仅有负载均衡,更重要的是要有失效恢复 failover,比如 tomcat 采用的集群节点广播复制,Jboss 采用的配对复制等 session 状态复制策略,但是集群中的状态恢复也有其缺点,那就是严重影响了系统的伸缩性,系统不能通过增加更多的机器来达到良好的水平伸缩,因为集群节点间 session的通信会随着节点的增多而开销增大, 因此要想做到应用本身的伸缩性, 我们需要保证应用的无状态性,这样集群中的各个节点来说都是相同的,从而是的系统更好的水平伸缩。上面说了无状态的重要性,那么具体如何实现无状态呢?此时一个 基于session 框架就会发挥作用了。
一般通过 cookie 来实现,或者也可以采用集中式 session 管理来完成,说具体点就是多个无状态的应用节点连接一个 session 服务器,session 服务器将 session 保存到缓存中,session 服务器后端再配有底层持久性数据源,比如数据库,文件系统等等,让数据即使在宕机的情况下,将访问的应用状态持久化,保证能够尽可能短的时间内的有效failove。
相关推荐
tomcat6+nginx1.8搭建的负载均衡,tomcat6+nginx1.8搭建的负载均衡
keepalived+nginx+tomcat+redis+mysql所需的jdk包,之前csdn不让上传超过200m得只能分开上传。
Nginx+Tomcat+Redis实现负载均衡过程中session所需架包
2个tomcat8+nginx+2个redis(主从同步)+同步会话
redis+tomcat+nginx负载均衡配置 非常详细,下载放入项目即可使用
MySQL5.6.15或者5.7版本,nginx-1.20.2版本,redis3.2.11版本,phpredis-4.2.0版本,php-8.1.1,tomcat8.0.21版本。里面详细介绍了各种软件的源码安装过程,和遇到的一些错误解决方法,按照文档来操作肯定可以安装...
Nginx+tomcat+redis软负载均衡需要的一整套资源,还包括了JDK,依赖包等文件
nginx+redis负载均衡、session共享,基于redis+tomcat实现session同步的简单demo
这里配置Keepalived + Nginx + Tomcat + Redis的架构,其中:keepalived用于管理Virtual IP,与nginx一起搭配实现高可用性的反向代理前端;后端使用Tomcat管理web服务,并利用Redis实现session共享。
nginx2.8.1+tomcat7+redis1.8 session共享,windows环境下,jar包都包含,直接运行即可,把redis服务,tomcat两个,niginx负载平衡,session共享,参考别人的例子,自己总结的。
Tomcat+nginx+redis负载均衡配置,Linux下配置NGINX和Redis实现负载均衡和资源共享
windows系统下nginx+tomcat+redis做负载均衡和session粘滞附整套解决方案
SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+...
Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享
超详细Nginx+Tomcat+Redis搭建高性能负载均衡集群Session共享搭建说明,按文档步骤可轻松搭建并实现session共享
原创文档,NGINX + TOMCAT 6 + REDIS 实现负载均衡 session会话同步,已亲测
tomcat7+nginx+memcached 配置tomcat 集群以及负载均衡所需要的msm jar包 亲测可用 msm 1.9.7版本 采用kryo序列化方式
tomcat8+Redis+nginx负载均衡集群部署,apache-tomcat-8.0.47+nginx-1.13.6+Redis-x64-3.2.100
nginx+tomcat7负载均衡+redis缓存session