使用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。
效果图:




浙公网安备 33010602011771号