Nginx+Tomcat+Redis负载均衡实现session共享
一、准备工作
中间件:Tomcat、Redis、Nginx
jar包:commons-pool2-2.4.2.jar、jedis-2.8.0.jar、tomcat-redis-session-manager-2.0.0.jar
二、配置Tomcat
多台Tomacat需要配置不同的端口号
将jar包存放到apache-tomcat-9.0.7\lib目录下
三、实现
下载nginx和tomcat, 复制一份tomcat作为tomcat2服务器
分别修改tomcat1、tomcat2的server.xml配置文件
tomcat2一样, 对应修改为28005, 28080, 28009
/conf/context.xml
host为Redis的ip地址,port为端口,database为数据库。
为了区分tomcat1、tomcat2, 修改F:\test_nginx_tomcat\tomcat1\webapps\ROOT
目录下的index.jsp文件内容
分别启动tomcat1、tomcat2, /bin目录下startup.bat命令, 访问
http://localhost:18080
、http://localhost:28080
, 查看是否启动成功到目前为止两台tomcat服务器已经准备就绪了, 但是还没配置nginx, 所以此时是访问不了
http://localhost
的, 如:OK, 现在配置nginx, 其实就是修改nginx.conf文件
这是参考别人的配置, 最重要的是下面中的内容
upstream: 指定服务器集群, 我们开启了tomcat1、tomcat2, 定义2个server即可
weight: 权重, tomcat2是1的两倍, 后面测试发现, 基本上tomcat1和tomcat2的请求次数比例为1:2
server: 监听localhost:80的所有请求, 并将请求根据upstream配置的集群规则进行分发, 注意, proxy_pass的
test.nginx.com
必须跟upstream的test.nginx.com
一致proxy_connect_timeout 3; # 当其中一台服务器宕机后, 请求连接的超时时间, 设为3s, 可以看到tomcat2宕机后, 当轮询到tomcat2服务器时, 响应会有3s的延时, 3s后自动将请求转到tomcat1服务器, 实现了集群的高可用, 同理, 开启tomcat2后, nginx恢复正常的轮询请求
proxy_read_timeout 1;
proxy_send_timeout 1;
保存配置, 启动nginx, 双击启动
浏览器请求http://localhost
, 不断刷新、停掉任意一台服务器, 可以看到文章实现目标
中的效果
三、测试
先后启动Redis服务、两台tomcat服务器、Nginx服务器。
在Tomcat启动页面加上标识,判断两台服务器中sessionId是否一致。