Nginx+tomcat+redis实现tomcat集群负载均衡

本文详细介绍如何通过Redis实现Tomcat服务器间的会话共享。包括环境搭建、具体配置步骤及测试验证过程。

准备篇

注:暂时只支持tomcat8以下版本,如果需要最新版本的支持,关注https://github.com/jcoleman/tomcat-redis-session-manager

输入图片说明

环境

两台服务器,我这里的配置如下

  1. 服务器1 (主服务器)

    系统:Ubuntu14.04

    IP:192.168.1.105

    服务器环境:jdk1.7+tomcat7+nginx+redis

  2. 服务器2

    系统:Ubuntu16.04

    IP:192.168.1.110

    服务器环境:jdk1.7+tomcat7

**注:**环境搭建篇可参考

  1. 服务器环境之2:ubuntu14.04安装jdk1.7
  2. 服务器环境之4:ubuntu14.04安装tomcat,端口修改
  3. nginx安装(ubuntu14.04)
  4. redis安装
测试页面

这里是两个jsp页面,放在tomcat/weapp/manager/下,用于测试session共享。

服务器一

<body>
   Servier<b>105</b> <br>sessionId:
  <b> <%= session.getId() %></b>
</body>

服务器二

<body>
   Servier<b>110</b> <br>sessionId:
  <b> <%= session.getId() %></b>
</body>

tomcat配置

  1. 把下面的三个jar包放入/tomcat/lib中(两个服务器都需要)。最后一个jar不太好弄,这里提供下载→打包下载

    • commons-pool2-2.2.jar
    • jedis-2.5.2.jar
    • tomcat-redis-session-manager-2.0.0.jar

    或者最后一个jar也可以自己打包,参考https://github.com/jcoleman/tomcat-redis-session-manager

  2. 将下面内容添加到/tomcat/context.xml中最后一行</Context>标签的前面

    服务器一

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
         host="localhost"  
         port="6379"  
         database="0"  
         maxInactiveInterval="60" />
服务器二
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
         host="192.168.1.105"  <!-- 安装redis的服务器ip-->
         port="6379"  
         database="0"  
         maxInactiveInterval="60" />

##Nginx配置 修改/usr/local/nginx/conf/nginx.conf。下面是我自己的nginx.conf

#user nobody;  
worker_processes  1;

#error_log logs/error.log;  
#error_log logs/error.log  notice;  
#error_log logs/error.log  info;  

#pid       logs/nginx.pid;  


events {
   #use   epoll;             #epoll是多路复用IO(I/OMultiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能  
   worker_connections  1024;  #单个后台work processes 进程最大的并发连接数  
}


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;
   #要代理的服务器的地址和端口号    weight 为权重,权重越大 被访问的次数越多, 压力越大!  
  upstream myServer {

   server 192.168.1.110:8080;
   server 192.168.1.105:8080 weight=2;
   }

   #gzip  on;  
    #监听80 端口  
   server {
       listen       80;
       #定义要使用的域名  
       server_name  localhost;

       #charset koi8-r;  
      #设定本虚拟主机的访问日志  
       #access_log logs/host.access.log  main;  
       #配置前缀  即要转发到的ip+port  
       location / {
           proxy_pass  http://myServer;
          # root   html;  
          # index  index.html index.htm;  
       }

       #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;
       }
    }
}

测试

浏览器中打开 http://192.168.1.105/manager/test.jsp

输入图片说明

可以看到当前访问的是110服务器,这时候刷新页面,直到访问105服务器,如下图。可以看到两个sessionID一致,说明session已经共享了。

输入图片说明

成功,完

转载于:https://my.oschina.net/chaon/blog/853737

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值