Tomcat集群是当单台服务器达到性能瓶颈时,通过横向扩展来提升系统整体性能的有效手段。Nginx是一个高性能的HTTP和反向代理Web服务器,可以通过简单的配置实现Tomcat集群的负载均衡。本文使用的Tomcat是8.5.35版本,Nginx是1.14.2版本。下面我们就来看看配置过程以及可能遇到的问题。首发于微信公众号“启蒙源码”。1.概述对于web应用来说,集群安全的问题在于Session信息的共享。一般有以下解决方案:使用粘性会话,例如使用IPHash负载均衡策略,将当前用户请求集中到一个缺点是单点故障,会话丢失使用Session复制,使用自带的Session复制策略与Tomcat同步会话信息到集群的各个节点;缺点是比较耗内存和带宽,适用于小型集群。三方缓存中间件缓存了整个集群的session信息,比如Redis缓存,可以控制应用与Session的关联,也可以适配Tomcat。当然,会话信息也可以存储在共享文件系统或数据库中。在配置Nginx的过程中,你可能会遇到以下问题:配置upstream名称时不要使用下划线,比如tomcat_ha,否则Tomcat会抛出Thecharacter[_]isnevervalidinadomainname的异常killallnginx.exe进程在windows上,taskkill/fi"imagenameeqnginx.exe"/f在windows上有一个pid为4的系统进程会占用80端口,所以这里把nginx改成8000。在配置Tomcat集群的过程中,需要注意的问题:确保web.xml配置元素保证ContextManager不会被标准的sessionmanager替换Receiver.address不要配置为auto,因为默认可能绑定到127.0.0.1;receiver.port可以改也可以不改,tomcat会检测4000-4100范围内的可用端口,自动处理冲突如果在不同的服务器,需要关闭防火墙或者打开端口,还有时间同步2、Nginx核心配置Nginx使用默认配置,新增和修改的核心配置如下:http{...#gzipon;#设置负载均衡服务器列表和权重upstreamtomcat-ha{#ip_hash;server172.31.1.41:8080weight=1;server172.31.1.42:8080w八=1;}服务器{listen8000;server_namelocalhost;#charsetkoi8-r;#access_loglogs/host.access.logmain;location/{roothtml;indexindex.htmlindex.htm;#forwardrequestproxy_passhttp://tomcat-ha$request_uri;proxy_set_headerHost$http_host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto$scheme;}...}}3.Tomcat集群配置启用集群配置,在元素中添加如下配置:
