我正在处理一个任务,在这个任务中,我必须对两个tomcat实例进行负载平衡,以便它们之间也可以共享一个公共会话,当其中一个发生故障时,另一个可以处理任务。
第一个任务似乎在两个Tomcat版本都在线时工作,那么似乎没有问题。
我不知道如何检测哪个用户来自哪个tomcat,所以我可以看到来自其他tomcat的用户是否正在聊天,然后session-id被正确共享。
我面对的第二个问题是,如果一个tomcat出现故障,另一个tomcat实例应该继续运行并提供正在进行的请求,但这不会发生。 只要有一个Apache Tomcat实例出现故障,我就得到一个503服务不可用。 请让我知道如何解决这个问题,并testing哪个用户是从哪个tomcat实例。 进行的更改:sites-enabled / 000-default:
<Proxy balancer://mycluster> BalancerMember ajp://localhost:8010 route=jvmroute-first connectiontimeout=10 BalancerMember ajp://localhost:8011 route=jvmroute-second connectiontimeout=10 ProxySet stickysession=JSESSIONID Order Deny,Allow Deny from none Allow from all </Proxy> <VirtualHost *:80> ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ </VirtualHost>
第一个tomcat的server.xml:
<Connector port="8080" proxyPort="80" protocol="HTTP/1.1" compression="force" compressionMinSize="1024" connectionTimeout="20000" redirectPort="443" URIEncoding="utf-8" compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"/> <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="200" compression="force" compressionMinSize="1024" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="keystore" keystorePass="password" URIEncoding="utf-8" compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript" /> <Connector port="8010" protocol="AJP/1.3" redirectPort="443" URIEncoding="utf-8" compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript" /> <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvmroute-first"> // No modifications within Engine </Engine>
第二个tomcat实例:
<Connector port="8081" proxyPort="80" protocol="HTTP/1.1" compression="force" compressionMinSize="1024" connectionTimeout="20000" redirectPort="443" URIEncoding="utf-8" compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"/> <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="200" compression="force" compressionMinSize="1024" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="keystore.jks" keystorePass="password" URIEncoding="utf-8" compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript" /> <Connector port="8011" protocol="AJP/1.3" redirectPort="443" URIEncoding="utf-8" compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript" />
为什么会这样呢? 任何想法,线索。 非常感谢。 🙂
编辑
负载平衡器似乎有些问题,因为我在某个时候得到了Err,请检查截图
这可能是因为您没有在Tomcat端启用会话复制。 由于在Apache上启用了粘性会话,请求总是基于对JSESSIONID的检查进行路由。
在具有故障转移function的Tomcat实例中实现集群,以便任何失败的请求在发生故障时都会重新路由到第二个Tomcat服务器。