Nginx + Tomcat + Redis 架构的负载均衡及会话保持

1、系统架构

Nginx + Tomcat + Redis 架构的负载均衡及会话保持

2、服务器情况

 服务器 1:nginx(80)、redis(6379)

 服务器 2:tomcat1(8080)、tomcat2(8080)

 服务器 3:mysql(3306)

3、Nginx 主要配置

http {
 ......
 upstream tomcat {
 ip_hash;
 server tomcat1:8080 max_fails=3 fail_timeout=15s;
 server tomcat2:8080 max_fails=3 fail_timeout=15s;
 }
 server {
 ......
 location /tomcat {
 proxy_pass http://tomcat;
 }
 }
}

4、会话保持的几个方案说明

1. nginx 的 ip_hash 算法

实现原理就是同一个客户端的所有请求只调度给同一个后台 tomcat,这样会话就能保持在同一台服务器上。

优点:配置最简单,在 nginx的 upstream 调度里加一句ip_hash 即可。

缺点:后端 tomcat 宕机,用户 session 会丢失。

2. tomcat 的 session 复制集群

多台 tomcat 通过组播互相沟通会话信息,以保持不同tomcat 之间的会话一致性。

优点:后端 tomcat 宕机,用户 session 不丢失。

缺点:使用组播将信息复制到多个 tomcat 节点,网络开

销大。

3. 缓存集中式管理 session

session 可以保存在文件、数据库和内存中,利用 redis 或 memcached 将 session 信息缓存,以达到会话信息不丢失,也不影响负载均衡的目的。

优点:只要缓存服务器没问题,用户 session 不会丢,也没有额外的网络开销。

缺点:太依赖缓存服务器,需要额外的缓存服务器,成本也高,当然要求维护人员技术水平也较高,适合于性能要求高的大型环境。

5、测试功能

1. 启动好相关服务;

2. 通过 nginx 登陆后台,并确定连接的是哪个 tomcat;

3. 关闭目前使用的 tomcat,刷新后台页面,确认是否存在掉线情况;

4. 启动已关闭的 tomcat,关闭另外一个 tomcat,确认是否还在登陆状态。


分享到:


相關文章: