1.准备
apache tomcat 7.0.55
nginx 1.7.2
redis 2.8.9
配置环境使用三个tomcat, 三台tomcat、redis和nginx都在一台机器上,为了方便测试和部署。
大致的整个配置的架构:
在这个图中,nginx做为反向代理,将客户请求根据权重随机分配给三台tomcat服务器,redis做为三台tomcat的共享session数据服务器。
2.规划
redis
localhost:6379
nginx
localhost:80
tomcat
localhost:8081
localhost:8082
localhost:8083
3.配置
tomcat:
修改tomcat文件夹中conf/context.xml文件,在context节点下添加如下配置:
<!-- 单点配置-->
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="192.168.1.249"
port="6379"
password="123456"
database="0"
maxInactiveInterval="60" />
host为redis所在服务的ip,port为redis的端口,password为redis密码,高版本的redis要设置密码,不然就会报连接池打开异常。
<!-- 集群配置-->
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
maxInactiveInterval="60"
password="123456"
sentinelMaster="mymaster"
sentinels="192.168.1.249:7000,192.168.1.249:7001,192.168.1.249:7002,192.168.1.248:7003,192.168.1.248:7004,192.168.1.248:7005"/>
conf/server.xml文件中的端口根据规划依次修改。
另外要在tomcat的lib文件夹下分别添加三个jar文件,这个地方jar文件的版本有可能会有冲突,配置的时候需要多尝试。我这里的版本如下,是验证过可以使用的,通过maven的库都可以下载到。
tomcat-redis-session-manager-1.2-tomcat-7.jar
jedis-2.2.0.jar
commons-pool-1.6.jar
nginx:
修改nginx文件目中的conf/nginx.conf文件为:
#user nobody;
worker_processes 1;
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream localhost {
server localhost:8081 weight=1;
server localhost:8082 weight=2;
server localhost:8083 weight=3;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://localhost;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 100m;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
redis:
vi /usr/local/redis-3.2.4/redis.conf
找到# requirepass foobared ,修改为 requirepass 123456
123456为redis密码
记录操作命令[ Append-only file(缩写aof)的方式](较安全持久化)
appendonly yes #启用aof 持久化方式
# appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证完全的持久化
appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
# appendfsync no //完全依赖os,性能最好,持久化没保证
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 ###重定义命令,例如将CONFIG命令更名为一个很复杂的名字:
# rename-command CONFIG "" 取消这个命令;
以上两行,任意打开一个,即去掉前面的#
#daemonize no 默认情况下, redis 不是在后台运行的,生成模式时一般需要在后台运行,把该项的值更改为 yes
daemonize yes
4.运行
分别启动redis、nginx和三台tomcat。
5.测试
在三个tomcat的webapps/ROOT目录下,分别添加session.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>shared session</title>
</head>
<body>
<br>session id=<%=session.getId()%>
<br>tomcat 3
</body>
</html>
注:每个tomcat下的标示不同
tomcat1:
tomcat2:
tomcat3:
从截图中,可以看出,分别访问了不同的tomcat,但是得到的session却是相同的,说明达到了集群的目的。
- 大小: 19.7 KB
- 大小: 20.3 KB
- 大小: 19.8 KB
- 大小: 19.7 KB
- 大小: 4.8 KB
分享到:
相关推荐
这个小例子"nginx+tomcat+redis完成session共享"旨在演示如何通过这三种技术实现跨服务器的用户会话共享,以提升用户体验并简化系统管理。以下是这些技术及其在会话共享中的作用: 1. **Nginx**:Nginx是一款高性能...
4. Session共享实现:在Tomcat中,可以通过配置`Context`元素的`Manager`子元素来启用RedisSessionManager。这个manager会将session数据存储在Redis中,而不是默认的内存或者硬盘。此外,Nginx需要配置适当的负载...
"redis缓存服务器Nginx+Tomcat+redis+MySQL实现session会话共享"的主题旨在探讨如何利用这些技术组件来实现这一目标。以下是相关知识点的详细说明: **Redis**:Redis是一个高性能的键值数据存储系统,常用于做缓存...
- **session共享**:在分布式环境中,Redis可以作为session存储,解决跨服务器的session共享问题,确保用户会话的一致性。 - **消息队列**:Redis支持发布/订阅模型,可以作为简单消息队列,用于异步处理任务或...
"nginx+tomcat6+redis实现session共享"是一个常见的解决方案,旨在提高系统的可扩展性和高可用性。这个配置允许多个Tomcat服务器之间共享用户session,避免了用户在切换服务器时需要重新登录的问题。下面将详细介绍...
本篇文章将探讨如何利用Redis、Tomcat和Nginx来实现Session共享,以便在分布式环境中保持用户状态的一致性。 首先,让我们了解一下Session的概念。Session是Web服务器用来跟踪用户状态的一种机制。当用户登录后,...
综上所述,通过Nginx实现负载均衡,利用Tomcat处理业务逻辑,结合Redis进行session共享,可以在不牺牲用户体验的前提下提高系统的可扩展性和可靠性。这个过程中涉及的关键技术包括Nginx的反向代理和负载均衡配置、...
### Tomcat + Redis + Nginx 实现Session共享详解 #### 一、集群的基本概念 集群是指一组通过高速网络连接的、相互独立的计算机组成的系统,这些计算机共同工作以提供一致的服务体验,从用户的角度来看,它们就像...
本篇文章将详细介绍如何通过`Nginx`作为反向代理,`Tomcat 8.5`作为应用服务器,以及`Redis`作为分布式缓存,来实现高效的session共享。 首先,我们来看`Nginx`。`Nginx`是一款高性能的HTTP和反向代理服务器,它的...
本教程将引导你通过"jdk+tomcat+nginx+redis+session共享"的全过程,搭建一套高效且可靠的服务器架构。我们将详细介绍每个组件的作用,配置步骤,以及如何实现session共享和负载均衡。 首先,我们从JDK(Java ...
在构建高性能、高可用性的Web应用系统时,"nginx+tomcat7负载均衡+redis缓存session"是一种常见的架构模式。这种模式结合了Nginx的反向代理和负载均衡能力,Tomcat作为Java应用服务器处理业务逻辑,而Redis则用于...
5. 测试验证:通过发送模拟请求,检查Nginx是否能正确分发请求,Tomcat和Redis是否能协同工作,session数据是否能在不同节点间共享。 在实际部署中,还需要考虑监控、日志管理、安全策略等方面,以确保系统的稳定...
通过以上步骤,我们可以构建一个基于nginx、tomcat和redis的服务器集群,有效地实现了session共享。这种架构不仅提高了系统的可用性和扩展性,还保证了用户在集群中的体验一致性。在实际应用中,还可以根据需求调整...
这个"tomcat-redis-session-manager tomcat+nginx+redis集群所需jar"压缩包提供了在这样的架构中实现会话共享所需的Java类库。下面将详细解释其中涉及的技术点: 1. **Apache Tomcat**: Apache Tomcat是一款开源的...
本示例“Spring+Redis+Nginx实Session共享的Demo”提供了一种解决方案,利用Spring、Redis缓存和Nginx反向代理来实现跨服务器的Session一致性。 首先,我们来理解每个组件的作用: 1. **Spring**:这是一个广泛...
在IT行业中,构建高效、可扩展的Web服务是至关重要的,而"nginx+tomcat+redis负载均衡及session共享"的架构就是一个常见的解决方案。这个架构结合了三个强大的工具:Nginx作为反向代理和负载均衡器,Tomcat作为Java...
这个实例“tomcat+nginx+redis 实现sessionId共享”旨在教你如何在使用Tomcat作为应用服务器、Nginx作为反向代理服务器的环境中,利用Redis来实现跨服务器的会话(sessionId)共享。这对于在分布式系统中保持用户...
在Session共享场景中,Redis作为中间缓存,用于存储用户的Session信息,以确保用户在多台服务器间切换时仍能保持登录状态。 4. **Session共享问题**: 在多台服务器部署的环境中,传统的Session存储方式(通常在...
总的来说,"nginx+Redis+tomcat实现session共享测试代码"是一个典型的Web服务集群解决方案,通过结合Nginx的反向代理、Redis的分布式缓存以及Tomcat的应用托管,有效地解决了跨应用Session管理的问题。对于学习和...