nginx+redis+tomcat7集群session共享

本文介绍如何通过Nginx、Redis和Tomcat7搭建集群环境,实现session共享与负载均衡。重点讲解各组件的安装配置过程,包括Redis的安装与测试、Nginx的配置细节、Tomcat的配置调整,以及最终测试结果验证session共享的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


nginx+redis+tomcat7集群session共享

文档:nginx-redis-tomcat7集群session共享.docx

下面的描述中部分图片没有显示,请参考上面的文档。

一 : 安装介质准备:

(1)     tomcat7
apache-tomcat-7.0.41.tar.gz
test.jsp
(2)     Nginx 及相关组件:
nginx相关.rar
(3)     Redis 相关组件 及 jar包
redis介质及jar包.rar
(根据个人习惯,在linux的根目录下建了一个tmp文件夹,所需介质全部放到该文件夹下)
 
先确保linux系统上已安装有gcc及相关编译组件。 
 

二: 安装redis

1): 进入到tmp目录下,解压redis的相关文件进行安装,
        # tar zxvf redis-2.8.23.tar.gz

  1. cd redis-2.8.23
    # make
  2. make install
    安装完成后在redis 的src 目录下有redis-benchmark、redis-check-aof、redis-check-dump redis-cli、redis-server 等几个可执行文件,其中 redis-server 是redis server 的启动服务,redis-cli 可进入redis 客户端;
    此外,在解压后的文件夹中还有redis的配置文件redis.conf 。
    可以在usr下建一个redis 目录,将上述可执行文件拷贝到该文件夹下。
    2):测试redis是否安装成功
    a-启动redis 服务
    #./redis-server ,启动成功后看到如下界面
    Redis 的默认端口是6379 ,
    b-启动redis client 端进行测试
    #./redis-cli 启动redis 的客户端服务,出现如下界面,我们可以利用redis设置一个简单缓存进行测试:
    c-上述现象都正常说明redis安装没有问题,上述方式启动时使用的是默认配置,我们可以修改redis的配置文件,按照我们的要求进行修改;
    这里从别的地方截个图供参考:
    上述只是配置的一部分,可根据自己的要求进行配置修改。
    修改完成后让redis使用我们修改的配置文件
    #./redis-server           redis.conf (根据自定义文件启动加载配置)

    三: 安装Nginx

    1)  先安装nignx 运行时依赖的zlib 及 pcre
    进入temp目录下,解压zlib 和 pcre 并进行配置安装
             (1)安装zlib
             # tar zxvf zlib-1.2.8.tar.gz
  3. cd zlib-1.2.8
  4. ./configure --prefix=/usr/local/zlib (可以不配置目录,安装到默认目录下)
    # make && make install
             (2)安装pcre
             # tar zxvf pcre-8.32.tar.gz
  5. cd pcre-8.32
  6. ./configure --prefix=/usr/local/pcre (可以不配置目录,安装到默认目录下)
    # make && make install
    2)  安装Nginx
  7. tar zxvf nginx1.4.0.tar.gz
  8. cd nginx1.4.0
  9. mkdir /usr/nginx (在usr目录下创建nginx的安装目录)
  10. ./configure --prefix=/usr/nginx
    # make && make install
    3) 配置Nginx
    #cd /usr/nginx/conf
    #vi nginx.conf
    配置参考如下:(可实现session共享和负载的基本配置)
    #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
    Unknown macro: {     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;
           #配置负载的三个tomcat服务器
        upstream  www.mytest.com
    Unknown macro: {          # 这里还可以根据服务器压力配置权重,(注意tomcat访问端口) server  127.0.0.1}
     
           #
        server {
            listen       9999; #nginx监听端口
            server_name  www.mytest.com;  #nginx服务所在主机
            charset utf-8;
            #access_log  logs/host.access.log  main;
                   #
            location /
    Unknown macro: {             root   html;             index  index.html index.htm;                           proxy_pass  http}
     
            #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
    Unknown macro: {             root   html;         }
     
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$
    Unknown macro: {         #    proxy_pass   http}
     
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ \.php$
    Unknown macro: {         #    root           html;         #    fastcgi_pass   127.0.0.1}
     
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht
    Unknown macro: {         #    deny  all;         #}
        }
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
        #    location /
    Unknown macro: {     #        root   html;     #        index  index.html index.htm;     #    }
        #}
        # HTTPS server
        #
        #server {
        #    listen       443;
        #    server_name  localhost;
        #    ssl                  on;
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
        #    ssl_session_timeout  5m;
        #    ssl_protocols  SSLv2 SSLv3 TLSv1;
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers   on;
        #    location /
    Unknown macro: {    #        root   html;    #        index  index.html index.htm;    #    }
        #}
    }

    四: 安装tomcat

    在usr 目录下准备两个tomcat,分别为redis-tomcat701,redis-tomcat702,并将test.jsp页面部署到webapp下。
    修改Tomcat配置:
    Redis-tomcat701 配置:
    1)  修改conf下 server.xml文件配置
    修改访问端口8080,根据nginx配置修改为 8088,同时修改其他端口,防止两个tomcat同时启动时出现端口冲突。如图:
    2)  修改conf下context.xml文件配置,在 </Context> 标签上加入以下redis session共享的的配置内容:
    < Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />        <Manager  className="com.radiadesign.catalina.session.RedisSessionManager" 
                     host="localhost" 
                     port="6379" 
                     database="0" 
                     maxInactiveInterval="60" />
    如图:
    Redis-Tomcat2 配置:
    3)  修改conf下 server.xml文件配置
    修改访问端口8080,根据nginx配置修改为 8087,同时修改其他端口,防止三个tomcat同时启动时出现端口冲突。如图:
    4)  修改conf下context.xml文件配置,在 </Context> 标签上加入以下redis session共享的的配置内容:
    < Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />        <Manager  className="com.radiadesign.catalina.session.RedisSessionManager" 
                     host="localhost" 
                     port="6379" 
                     database="0" 
                     maxInactiveInterval="60" />
    如图:
     
    将redis 的jar 包放入tomcat 的lib 目录下:

    在tomcat的lib目录下可以看到jar包已添加

    五: 部署test.jsp页面

    在tomcat  webapp目录下创建test应用目录,将test.jsp放到该目录下,为更清楚的识别访问的是不同tomcat下的页面达到了session同步的效果,修改test.jsp页面中的输出标记信息,
    Redis-Tomcat 701 下的页面
    类似的,将redis-tomcat702下的页面中的输出信息修改为redis-tomcat702 。

    六: 启动相关程序测试

    1)       先启动redis 服务
    可以看到redis 启动成功,并可以查到当前正在运行的进程及生成的进程pid文件
    2)       依次启动redis-tomcat701、redis-tomcat2、
    redis-tomcat701:
    可以查看到生成的日志文件中打印有redis session的信息,
    同样启动redis-tomcat702。
    3)       启动nginx
    4)       输入访问地址 {+}http://127.0.0.1:9999/test/test.jsp+
    连续刷新页面访问,
    可以看到访问页面被nginx 分发到不同的tomcat 下,但是session是相同的。

    七: 热插拔测试

             实现了集群,我们测试一下tomcat节点的热插拔:
    a--先停掉redis-tomcat701,继续访问{+}http://127.0.0.1:9999/test/test.jsp+ ,查看页面信息:
    此时,访问被nginx分发到redis-tomcat702 ,session的信息仍然和之前保持一致,不断刷新页面,可以时间发生变化
    b---此时,停掉redis-tomcat702,重新开启redis-tomcat701 ,然后继续访问之前的链接{+}http://127.0.0.1:9999/test/test.jsp+ ,查看页面信息:
    可以看到访问被nginx发到redis-tomcat701,session的信息仍然没有发生变化,不断刷新页面,时间发生变化,其他信息均未变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值