注意这些要点,轻松配置Nginx + Tomcat的集群和负载均衡。

发布者:上海IT外包来源:http://www.lanmon.net点击数:1055

Tomcat集群是通过扩展单个服务器来实现性能瓶颈来提高整体系统性能的有效方法。 Nginx是一个高性能的HTTP和反向代理Web服务器,可以通过简单的配置实现Tomcat集群的负载平衡。
本文中使用的Tomcat是版本8.5.35,Nginx是版本1.14.2。接下来,从微信公众账号“启蒙源”开始,查看配置过程和可能遇到的问题。
1概述
对于Web应用程序,群集的最大问题是会话信息的共享。通常,可以使用以下解决方案:
使用粘性会话(例如使用IP Hash的负载平衡策略)将当前用户请求聚合到一台服务器上;缺点是单点故障,会话丢失
使用会话复制使用Tomcat自己的会话复制策略将会话信息同步到群集的每个节点;缺点是它为小型集群消耗更多内存和带宽。
使用第三方缓存中间件缓存整个群集会话信息,例如Redis缓存,可由应用程序控制并与Session关联。
当然,您还可以将会话信息保存到共享文件系统或数据库。
在配置Nginx的过程中,您可能会遇到以下问题:
配置上游名称时不能使用下划线,例如tomcat_ha,或者Tomcat会为字符抛出异常[_]在域名中永远不会有效
杀死windows上的所有nginx.exe进程,taskkill/fi'imagename eq nginx.exe'/f
在Windows上,pid为4的系统进程将占用80个端口,因此这里nginx更改为8000。在配置Tomcat集群的过程中,需要注意以下问题:
确保web.xml配置了元素
确保Context的Manager不会被标准会话管理器替换。
Receiver.address不应配置为auto,因为默认值可能绑定到127.0.0.1; Receiver.port可以更改或不更改,Tomcat将检测4000-4100范围内的可用端口并自动处理冲突。
如果需要关闭防火墙或打开不同服务器上的端口,则需要时间同步。
2. Nginx核心配置
Nginx使用默认配置,添加和修改的核心配置如下:
Http {
.
#gzip on;
#Set负载均衡服务器列表和权重
上游tomcat-ha {
#ip_hash;
服务器172.31.1.41: 8080权重=1;
服务器172.31.1.42: 8080权重=1;
}
服务器{
听8000;
Server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
地点/{
根html;
Index index.html index.htm;
#转发送请求
Proxy_passhttp://tomcat-ha $ request_uri;
Proxy_set_header主机$ http_host;
Proxy_set_header X-Real-IP $ remote_addr;
Proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
Proxy_set_header X-Forwarded-Proto $ scheme;}
.
}
}
3. Tomcat集群配置
启用集群配置并将以下配置添加到元素:
它的工作原理简要说明:
Nginx将请求转发给Tomcat1,请求登录身份验证,创建会话,生成cookie,并在返回响应之前将会话信息复制到Tomcat2。
再次请求时,nginx将带有会话cookie的请求转发给Tomcat2。 Tomcat2发现内部会话池具有关联的经过身份验证的成功Session对象,并且不再对请求资源进行身份验证。
4.验证负载平衡和会话复制
4.1测试环境
使用两台PC部署Tomcat。对应关系为:172.31.1.41-Tomcat1,172.31.1.42-Tomcat2
部署基于使用Tomcat附带的SessionExample程序并编写了一个tomcat-benchmark Web应用程序。
与Tomcat自己的Manager应用程序一起查看已部署的应用程序内部会话池
4.2负载均衡
将tomcat-benchmark部署描述符文件中的context-param修改为“我是Tomcat 1/2”以区分两个Tomcats,启动Nginx和Tomcat,并访问浏览器172.31.1.42: 8000以查看两个请求切换服务器:
4.3会话复制
为了便于理解,首先将Nginx负载均衡策略设置为ip_hash:
假设Nginx始终将请求定位到Tomcat1,然后在Tomcat1上创建会话并向会话添加一些属性。
关闭Tomcat1以模拟故障,此时Nginx将使用前一个会话cookie将请求转发给Tomcat2。
检查Tomcat2上是否存在与cookie(JSESSIONID)关联的会话信息。如果有成功的副本。
整个过程如下:
与上面的描述相反,您可以看到会话信息已从Tomcat2复制到Tomcat1。
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部