nginx+redis+tomcat 负载均衡 session共享

服务器清单:

192.168.10.1 tomcat1
192.168.10.2 tomcat2
192.168.10.3 redis
192.168.10.4 nginx

一、背景

在使用Nginx+Tomcat实现负载均衡的时候,由于Nginx对不同的请求分发到某一个Tomcat,Tomcat在运行的时候分别是不同的容器里,因为会出现session不同步或者丢失的问题。

二、Nginx安装与配置

1、Nginx安装

网上的资源对于安装Nginx的介绍比较多,例如最简单的为:

1) 获取nginx,在http://nginx.org/download/上可以获取当前最新的版本下载,例如:wget http://nginx.org/download/nginx-1.9.8.tar.gz

2)解压缩 tar -xvf nginx-1.9.8.tar.gz包。

3)进入解压缩目录,执行./configure --prefix=/usr/local/nginx-1.9.8 将Nginx安装到/usr/local/nginx-1.9.8目录下

4)make & make install

安装的过程会将Nginx安装到/usr/local/nginx-1.9.8目录下,启动Nginx测试是否可以正常启动。

2、修改Nginx配置多Tomcat服务器

2.1、修改conf/nginx.conf文件,在server标签上边添加upstream如下:

 upstream myserver{
    #weigth参数表示权值,权值越高被分配到的几率越大
        server 192.168.10.1:8080 weight=1;
        server 192.168.10.2:8080 weight=1;
    }

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这里指定了本机下的两个Tomcat实例,端口分别为8080,8080,权重都为1,后边配置Tomcat实例,myserver这个是自己随意命名的,下边要用到

2.2、配置server标签;

 server {
        listen       80;
        server_name  192.168.1.149;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
           # root   html;
           # index  index.html index.htm;
           proxy_pass http://myserver;
        }


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2.3、配置之后的完整内容如下(1.9.8版本删去了注释后的配置内容):

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    upstream mynginxserver {
        server 192.168.10.1:8080 weight=1;
        server 192.168.10.2:8080 weight=1;
    }

    server {
        listen       80;
        server_name  192.168.10.4;

        location / {
           proxy_pass http://mynginxserver; 
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

} 重启nginx#service nginx restart

3、将tomcat-redis-session-1.0-SNAPSHOT.jar、jedis-2.7.2.jar、commons-pool2-2.0.jar 三个jar包分别放在tomcat1和tomcat2实例下的lib目录下。

免费下载这三个jar:http://download.csdn.net/detail/u010870518/9585716

注意:

如果项目里面已经采用了redis缓存,注意jedis的jar包的版本问题,保持jedis的jar版本和项目中一致

4、修改tomcat实例下conf/contex.xml文件

<?xml version='1.0' encoding='utf-8'?>  
<Context>  
    <WatchedResource>WEB-INF/web.xml</WatchedResource>  

    <!-- tomcat-redis-session共享配置 -->  
    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
        <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
         host="192.168.1.3"   
         port="6379"   
         database="0"   
         maxInactiveInterval="1800" />  

</Context>  
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

如果Redis配置了访问权限,请添加密码为:

<?xml version='1.0' encoding='utf-8'?>  
<Context>  
    <WatchedResource>WEB-INF/web.xml</WatchedResource>  

    <!-- tomcat-redis-session共享配置 -->  
    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
        <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
         host="192.168.1.3"   
         port="6379"   
         database="0"  
         password="redispassword" 
         maxInactiveInterval="1800" />  

</Context>  
注意maxInactiveInterval="1800",因为tomcat的session失效时间是30分钟。所以redis的缓存时间设置为1800s;至此,配置完成,可以访问192.168.10.4看看多次刷新效果,登录后访问不同页面效果。这里效果不再说明。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值