繁体   English   中英

Tomcat,Apache:即使配置后故障转移也无法正常工作

[英]Tomcat, Apache : Failover not working even after configuration

我正在使用Apache和tomcat来设置负载平衡和故障转移。 最初,我认为load-balancing将包括fail-over ,但是我错了。 我认为,如果一个实例处于非活动状态,那么使用另一个实例也将成为负载管理的一部分。 有了足够的术语,我就设置了故障转移,但具有讽刺意味的是, fail-over本身就是故障。

一旦我关闭了一个tomcat实例,整个安装程序就死了,我得到了503。有人可以帮助我了解问题所在。

在apache2.conf中添加了它:

JkWorkersFile /etc/apache2/workers.properties

JkMount /* loadbalancer

worker.properties:

GNU nano 2.2.6文件:worker.properties

 worker.list=loadbalancer
 worker.server1.port=8010
 worker.server1.host=localhost
 worker.server1.type=ajp13

 worker.server2.port=8011
 worker.server2.host=localhost
 worker.server2.type=ajp13

 worker.server1.lbfactor=1
 worker.server2.lbfactor=1

 worker.loadbalancer.type=lb
 worker.loadbalancer.balance_workers=server1,server2
worker.loadbalancer.method=B
worker.balancer.sticky_session=True

000-default在启用站点中:

JkMountCopy On
<Proxy balancer://mycluster>
    BalancerMember ajp://localhost:8010 route=server1 connectiontimeout=10
    BalancerMember ajp://localhost:8011 route=server2 connectiontimeout=10

   ProxySet stickysession=JSESSIONID|jsessionid
   Order Deny,Allow
   Deny from none
   Allow from all

</Proxy>

<VirtualHost *:80>
ProxyRequests off

ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
</VirtualHost>

<Location /balancer-manager>
SetHandler balancer-manager

Order Deny,Allow
Deny from none
Allow from all
</Location>

第一个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" enableLookups="false" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="200" compression="force"
              compressionMinSize="1024" scheme="https" secure="true" clientAuth="false"  sslProtocol="TLS"
                keystoreFile="keystore_file" 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="server1">
    // No modifications inside
</Engine>

第二个Tomcat的server.xml:

<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" enableLookups="false" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="200" compression="force"
              compressionMinSize="1024" scheme="https" secure="true" clientAuth="false"  sslProtocol="TLS"
                keystoreFile="keystore_file" 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="8443" 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="server2">
    // No modifications here
    </Engine>

我在配置中一起实现负载平衡和故障转移时犯了什么错误。 非常感谢。

首先,您正在使用两个不同的代理模块,请不要这样做。

一个是mod_jk,配置文件是worker.properties,uriworkermap.properties,在apache.conf中这部分:

JkMount /* loadbalancer

并以000默认值

JkMountCopy On

另一个是mod_proxy,其相对配置在000-default中:

<Proxy balancer://mycluster>
    BalancerMember ajp://localhost:8010 route=server1 connectiontimeout=10
    BalancerMember ajp://localhost:8011 route=server2 connectiontimeout=10

    ProxySet stickysession=JSESSIONID|jsessionid
    Order Deny,Allow
    Deny from none
    Allow from all

    </Proxy>

<VirtualHost *:80>

ProxyRequests off

ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
</VirtualHost>

<Location /balancer-manager>
SetHandler balancer-manager

Order Deny,Allow
Deny from none
Allow from all
</Location>

至于评论,让我们走mod_jk路线。 首先删除mod_proxy配置部分,基本上是000-default中的所有内容,仅保留:

JkMountCopy On

然后禁用此模块的加载(不必要,但更好):

mod_proxy_ *

然后在worker.properties中将其添加到您的loadbalancer的worker中:

worker.loadbalancer.sticky_session_force = false

并检查一切是否正常,基于此我将更新答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM