nginx+tomcat+redis

目前,为了使web能适应大规模的访问,需要实现应用的集群部署。集群最有效的方案就是负载均衡,而实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这样我们首先要解决session的统一来保证无论用户的请求被转发到哪个服务器上都能保证用户的正常使用,即需要实现session的共享机制

这里写图片描述

整体作用:
nginx做为反向代理,实现静动分离,将客户动态请求根据权重随机分配给两台tomcat服务器,redis做为两台tomcat的共享session数据服务器,当然可以加mysql做为两台tomcat的后端数据库,本实验没有加。。。
使用Nginx作为Tomcat的负载平衡器,Tomcat的会话Session数据存储在Redis,能够实现零宕机的7x24效果。因为将会话存储在Redis中,因此Nginx就不必配置成stick粘贴某个Tomcat方式,这样才能真正实现后台多个Tomcat负载平衡

实验环境(所有软件都实验yum安装):
nginx(需要epel源)
tomcat(需要epel)
Redis

(1)nginx配置部分

     upstream tomcat {
         server 192.168.6.16:8080;
         server 192.168.6.6:8080;
     }

     server {
         listen       80 default_server;
         listen       [::]:80 default_server;
         server_name  _;
         root         /usr/share/nginx/html;

         # Load configuration files for the default server block.
         include /etc/nginx/default.d/*.conf;

         location / {
             proxy_pass http://tomcat;
         }

         error_page 404 /404.html;
             location = /40x.html {
         }

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

(2)Tomcat

在/etc/tomcat/context.xml里添加如下语句

    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
        host="192.168.6.17"  #Redis主机
        password="123456"  #Redis验证密码,如果没有验证可不写
        port="6379"
        database="0"
        maxInactiveInterval="60"/>

拷贝jar文件到/usr/share/java/tomcat目录下,两个tomcat服务器一样

jar包下载地址

创建测试文件,在另一个tomcat服务器可以换一下名字,便于区别

<%@ page language="java" %>
<html>
  <head><title>TomcatA</title></head>
  <body>
    <h1><font color="red">TomcatA</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("tomcatA","tomcatA"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>

启动服务,测试单个tomcat服务器看是否能获取到sessionID

(3)Redis

修改配置文件如下:

bind 192.168.6.17
requirepass 123456

重启服务,刷新页面,登录Redis服务器即可看到存储的sessionID值

[root@node1 ~]# redis-cli -a 123456 -h 192.168.6.17
192.168.6.17:6379> KEYS *
1) "B12C467021F40DC75BC7B0C422238C98"

测试:

通过nginx调度,看sessionID是否改变,如果内容改变sessionID不变说明成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值