使用Nginx+Tomcat8.5+Redis 实现负载均衡和session共享

一、使用环境

=====================================================

1、操作系统:win10_64

2、反向代理:nginx1.18.0

3、Tomcat:apache_tomcat 8.5.53

4、Redis:redis_64 3.2.100

5、JDK:jdk1.8

重要:

Redis实现session共享时,需要的三个重要jar包:

tomcat-redis-session-manager.jar

commons-pool2-2.2.jar

jedis-2.8.2.jar

注意各个版本之间的依赖,这个依赖经实际测试没有问题

链接:https://pan.baidu.com/s/11YW5lLn6RXO-iYCWqrpbxQ
提取码:ga6n

=====================================================

二、Tomcat集群搭建

tomcat8下载(官网)http://tomcat.apache.org/download-80 我下载的为8.5.53

 

需要我们做的:

1、将 commons-pool2-2.2.jar、jedis-2.8.2.jar、tomcat-redis-session-manager.jar 这三个jar包放到tomcat目录下的lib文件夹里

 

2、更改xml配置文件:
 (1)更改conf目录下的context.xml,在上方加入如下所示

<Valve className="com.seejoke.tomcat.redissessions.RedisSessionHandlerValve"/> 
<Manager className="com.seejoke.tomcat.redissessions.RedisSessionManager" 
          host="localhost"
          port="6379"
          database="0" 
          password="123456"
          maxInactiveInterval="1800" />
</Context>

  host:主机。
  port:端口。
  database:这里指的是redis的数据库名。
  password:redis的密码,这个一定要设置,我就吃了很多亏,因为没有设置这个!
  maxInactiveInterval:session存活时间,以秒为单位。

 (2)更改conf目录下的server.xml文件修改tomcat端口,这里要改三个端口,不会出现闪退的情况:

<!--web服务端口-->
    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />



<!--推出端口-->
<Server port="8006" shutdown="SHUTDOWN">

<!--可注释-->
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

   更改三个端口直至互不占用  

(3)配置完一台tomcat后 复制一台出来,让后修改更改conf目录下的server.xml文件修改tomcat端口就行。

 

 

 

三、Nginx配置

 

 

 

 

 nginx实现负载均衡的几个方式:

1、轮询
     默认配置   
     upstream xsdemo{
     server 127.0.0.1:8081;
     server 127.0.0.1:8082;
     }

2、 weight(权重) weigit值越大权重越高
      正向代理 设置权重
      upstream xsdemo{
      server 127.0.0.1:8081 weight=10;
      server 127.0.0.1:8082 weight=10;
      }

3、 ip_hash
      每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session(并不是共享session解决)的问题。 网传这种方式其实不算是负载均衡,但是我觉得        算吧,假如A和B访问,A去          tomcat1,B去tomcat2,虽然session可以不通过共享的方式来减轻某个tomcat的压力,但是我觉得也算是负载均衡的一种实现思路吧!
      upstream xsdemo{
      ip_hash;
      server 127.0.0.1:8081 weight=10;
      server 127.0.0.1:8082 weight=10;
      }

4、fair(未经测试) 按后端服务器的响应时间来分配请求,响应时间短的优先分配

5、url_hash(未经测试)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效

 

 

四、Redis

redis是不需要做什么具体配置的,只需要将密码设置一下就好了
在redis命令行,或者在RDM里面设置一下

config set requirepass 123456

设置完密码测试能不能登录

 

 

五、测试

在tomcat webapps/ROOT目录下加入session.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>shared session</title>
</head>
<body>
    <br>session id=<%=session.getId()%>
 
    <br>tomcat 8081 <!-- 此处记得针对不同实例名,要进行修改,否则看不出效果-->
</body>
</html>

设置完成后所有的跑起来,先运行两台tomcat,在运行nginx。

效果图: 

 

 

 

 

 

posted @ 2020-07-08 09:10  静静的码  阅读(360)  评论(0)    收藏  举报