在单机情况下,Session可由部署在服务器上的Web容器来管理 (如Tomcat、JBoss)。
在负载均衡的集群环境下,负载均衡可能将请求分发到不同的服务器上去,在这种情况,需要将有状态的session统一管理起来。
本文将给出一个简单的示例,将session存放到Redis统一管理。因为只是一个示例,所以Nginx只用1台,Tomcat使用2台,Redis一个或者简单的主从。
准备Redis
下载redis-3.2.3.tar.gz (请点击“阅读原文”获取下载链接)
解压缩redis
将解压缩后的redis文件名改成好记点的6379 (可以不重命名)。
然后使用 make && make install 完成安装。
安装成功之后,出现如下显示:
因为本版本使用的Redis版本是 3.2.3, 在这个版本中,有 protected mode 的属性(默认是yes),进入6379目录,修改redis.conf配置文件。从而,其它网段的程序可以去访问,否则可能会出现如下的错误。
修改后保存。
进入src目录,启动Redis服务
成功启动显示如下:
准备Tomcat
下载tomcat,并解压缩为两个tomcat,并修改各自server.xml中的端口,保证两者不冲突。
本示例中,tomcat_1的端口为8082
tomcat_2的端口为8083
准备Session-Manager
大家可以通过如下路径获取Session-Manager的jar包和相关的依赖包,包括common-pool2和Jedis。
https://pan.baidu.com/s/1geZVozx
下载好之后,我们首先将这三个jar包,放到Tomcat目录下的lib文件夹中。
配置 Context.xml,添加如下内容,具体的host和port由自己的环境决定。
然后准备一个项目,为了方便,我直接将测试的war中的文件替换了Tomcat_Home/webapps中的ROOT的内容。也可以通过tomcat自带的examples示例来测试session。
如:http://localhost:8082/examples/servlets/servlet/SessionExample
至此,两个测试的tomat就准备好了,并且已经配置了session管理,由redis来存储。接下来,我们就需要一个Nginx用于负载,配置两个tomcat的信息即可。
准备Nginx
下载Nginx,解压,然后进入Nginx的conf目录,修改nginx.conf文件内容,找到http的部分,添加upstream,就是我们上述提到的两个tomcat。
本文Nginx的端口为8899, 自己设定了一个。
至此Nginx, Tomcat, Session-Manager, Redis相关的环境就全部准备好了。
接下来,要做的就是启动Nginx, Tomcat, Redis,来看看 session是否存入到Redis中,自己的Web工程能不能正常运行等。
进入NGINX_HOME/使用 nginx 命令启动Nginx服务器。
进入两个tomcat_1和tomcat_2,分别启动tomcat。登录自己在ROOT中放置的WEB工程,可以看到session在Redis中存储下来了。
通过Redis-Desktop Manager查看Redis中session的信息。
配置一个Redis从服务器
通过Redis-Desktop Manager查看Redis中session的信息。
为上面的6379主服务器配置一个从服务器6380。
在6380的redis.conf中指定 是6379的slave,如:
启动从服务器:
使用Redis-Desktop Manager
可以看到,主服务6379和从服务6380都包含session的相关信息。