为了缓解因为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。
相关推荐
Nginx 1.9.12版本提供了静态文件服务、HTTP/HTTPS服务、负载均衡等功能,是搭建高可用Web服务的首选。 4. **Zookeeper 3.3.6**: Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,...
tomcat的nginx集群用redis的包 本机ip为192.168.1.101 1、准备测试环境 两个Tomcat 在Eclipse中新建2个Servers,指定对应的Tomcat,端口号错开。 Tomcat1(18005、18080、18009) Tomcat2(28005、28080、28009) ...
3. **反向代理与负载均衡**:Nginx可以作为反向代理服务器,将客户端请求转发到后端服务器,实现负载均衡,同时内建健康检查机制,保证服务稳定性。 4. **缓存服务**:Nginx具备缓存功能,可以减轻后端服务器的压力...
3. **反向代理和负载均衡**:Nginx可作为HTTP反向代理,加速缓存,并实现负载均衡,同时具备RS服务器健康检查功能。 4. **缓存功能**:Nginx可以作为缓存服务器,类似于Squid,支持memcache和redis等缓存技术。 5....
2.9 Nginx四层负载均衡 39 2.9.1 静态负载均衡 39 2.9.2 动态负载均衡 41 参考资料 42 3 隔离术 43 3.1 线程隔离 43 3.2 进程隔离 45 3.3 集群隔离 45 3.4 机房隔离 46 3.5 读写隔离 47 3.6 动静隔离 48 3.7 爬虫...
2.6 安装Nginx服务器 * 下载Nginx安装包 * 解压并安装Nginx * 启动Nginx * 浏览器验证启动情况 三、容器化和cloud computing 3.1 安装Docker * 下载Docker安装包 * 安装Docker * 启动Docker服务 * 设置开机启动 ...
- **Nginx负载均衡/反向代理实现**:配置Nginx实现负载均衡和反向代理。 **7.14 双十一专题-九阳真经** - **太极聚气之分布式压测平台**:构建分布式压力测试平台。 - **氤氲紫气之分布式缓存体系**:构建高效的...
- **1.2.1.1 软件级负载均衡**:如Nginx、HAProxy等,它们通常部署在服务器集群的前端,负责根据一定的算法将请求分发到不同的后端服务器上。 - **1.2.1.2 硬件级负载均衡**:通过专门的负载均衡设备(如F5、Cisco...
##### 2.6 Nginx安装 1. **下载Nginx安装包**:访问Nginx官网下载适用于Linux的安装包。 2. **解压安装包**:使用`tar -zxvf nginx-xxx.tar.gz`命令解压安装包。 3. **编译安装**:解压后进入目录,执行`./...
- **负载均衡**:介绍Ribbon、Nginx等工具的使用方法。 - **API网关**:介绍Zuul、Spring Cloud Gateway等API网关的使用方法。 ##### 2.6 分布式追踪 - **Sleuth**:介绍如何使用Spring Cloud Sleuth进行分布式追踪...
技术选型和解决方案的选择至关重要,例如,数据库中间件如Mycat用于读写分离和分库分表管理,数据同步工具如Binlog实现数据库间的实时同步,反向代理如Nginx和HAProxy用于负载均衡和七层处理,缓存技术如Redis和...