Tomcat底层原理分析:7.Tomcat集群配置解析

【专栏目录】
Tomcat底层原理分析:1.基础环境搭建
Tomcat底层原理分析:2.Tomcat架构分析
Tomcat底层原理分析:3.Jasper引擎
Tomcat底层原理分析:4.Tomcatd的server.xml配置内容解析
Tomcat底层原理分析:5.Web应用配置解析
Tomcat底层原理分析:6.Tomcat中对JVM的配置解析
Tomcat底层原理分析:7.Tomcat集群配置解析
Tomcat底层原理分析:8.Tomcat安全性配置解析
Tomcat底层原理分析:9.Tomcat性能调优
【本文导读】

本文主要讲了如何设置Tomcat集群以及如何使用Nginx进行反向代理;
注:本文图片均来自java进阶教程动手实现Tomcat【黑马程序员精品公开课】,侵权立删。

1.Tomcat集群结构图

通过Nginx进行反向代理,即可实现访问一个ip:port,将请求负载均衡到集群中的一个Tomcat-Server中。

image

2.Nginx配置

安装好Nginx后,打开nginx.conf,设置下面内容

# 假设当前Tomcat集群中有两台服务器

# upstream serverpool配置的作用:匹配要代理的服务的ip和端口。(不难看出,Nginx可以代理很多服务,不仅仅是Tomcat)
upstream serverpool{
    server localhost:8888;  # 匹配Tomcat集群中一台服务器的ip和端口
    server localhost:9999;  # 匹配Tomcat集群中另一台服务器的ip和端口
}

# server配置的作用:用户可以通过访问localhost:90,即可将请求负载均衡到Tomcat集群中的某一个服务器上
server{
    listen      90;         # 设置Nginx代理端口
    server_name localhost;  # 设置Nginx代理ip
}

3.负载均衡策略

方式 介绍
轮询 按照请求时间的顺序,平均地将请求分给每一个服务器
权重 按照权重比,将请求分配到每一个服务器上
哈希 按照客户端的ip等参数,进行哈希,匹配对应的服务器
# 权重方式举例说明
upstream serverpool{
    server localhost:8888 weight=2;  # 2/3的概率会由该服务器处理
    server localhost:9999 weight=1;  # 1/3的概率会由该服务器处理
}

4.Session共享

4.1问题

假设第一次请求:登录,访问的是第一个服务器,该服务器会保存当前用户的session;那么第二次请求:查询,可能会被负载均衡到第二个服务器上,而该服务器上没有“第一次请求:登录”生成的session,无法查询,即发生了session不共享的问题。如图:

image

4.2解决方案

方法 详解 弊端
ip_hash策略 将同一个客户端发起的请求,hash到同一个服务器中处理 如果当前服务器宕机,需要重新计算哈希
Session复制 通过广播方式,将当前服务器上的session复制到其他服务器上 当集群中服务器越多,性能越低,网络资源越浪费
SSO单点登录 session的验证统一交给SSO服务器,使得Tomcat服务器变得无状态 成本高,适用于企业级,不适用于小型项目

猜你喜欢

转载自blog.csdn.net/w_y_x_y/article/details/106931312