副问题[/!--empirenews.page--]
Tomcat 集群是当单台处事器到达机能瓶颈,通过横向扩展的方法进步整系一切机能的有用本领。Nginx 是一个高机能的 HTTP 和反向署理 web 处事器,可以通过简朴的设置实现 Tomcat 集群的负载平衡。
本文行使的 Tomcat 是 8.5.35 版本,Nginx 是 1.14.2 版本。接下来看下设置的进程以及也许会碰着的题目,首发于微信公家号「顿悟源码」。
1. 概述
对付 Web 应用来说,集群最大的题目就是 Session 信息的共享,一样平常有以下办理要领:
- 行使粘性会话,好比,行使 IP Hash 的负载平衡计策,将当前用户的哀求都齐集到一台处事器上;弱点是单点妨碍,会话丢失
- 行使 Session 复制,行使 Tomcat 自带的 Session 复制计策,将会话信息同步到集群的各个节点;弱点是耗损更多内存和带宽,合用于小型集群
- 行使第三方缓存中间件缓存整个集群会话信息,好比 Redis 缓存,可由应用措施节制与 Session 的关联,也可以适配 Tomcat
- 虽然了,也可以把会话信息存到共享文件体系可能数据库
在设置 Nginx 的进程中,也许会碰着以下题目:
- 设置 upstream 名称时不能行使下划线,好比 tomcat_ha,不然 Tomcat 会抛出 The character [_] is never valid in a domain name 的非常
- 在 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;
-
- #配置负载平衡的处事器列表和权重
- upstream tomcat-ha {
- #ip_hash;
- server 172.31.1.41:8080 weight=1;
- server 172.31.1.42:8080 weight=1;
- }
-
- server {
- listen 8000;
- server_name localhost;
-
- #charset koi8-r;
- #access_log logs/host.access.log main;
-
- location / {
- root html;
- index index.html index.htm;
- #转发哀求
- proxy_pass http://tomcat-ha$request_uri;
- proxy_set_header Host $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 集群设置
启用集群设置,在 元素中添加以下设置:
- <!-- channelSendOptions=6 同步复制 -->
- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">
- <!-- 集群 Session 打点器 -->
- <Manager className="org.apache.catalina.ha.session.BackupManager"
- expireSessionsOnShutdown="false"
- notifyListenersOnReplication="true"
- mapSendOptions="6"/>
- <!--
- <Manager className="org.apache.catalina.ha.session.DeltaManager"
- expireSessionsOnShutdown="false"
- notifyListenersOnReplication="true"/>
- -->
- <!-- 集群内部通讯设置 -->
- <Channel className="org.apache.catalina.tribes.group.GroupChannel">
- <Membership className="org.apache.catalina.tribes.membership.McastService"
- address="228.0.0.4"
- port="45564"
- frequency="500"
- dropTime="3000"/>
- <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
- address="192.168.10.2"
- port="5000"
- selectorTimeout="100"
- maxThreads="6"/>
- <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
- <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
- </Sender>
- <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
- <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
- <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
- </Channel>
- <!-- 此 vavle 拦截哀求,并将 Session 信息发给内部节点 -->
- <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
- filter=".*.gif|.*.js|.*.jpeg|.*.jpg|.*.png|.*.htm|.*.html|.*.css|.*.txt"/>
- <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
- </Cluster>
(编辑:河北网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|