Apache Web服务器,Tomcat:更改负载平衡configuration,以便一个Tomcat实例处于冷备用状态

我在基于Debian X64的服务器上configuration了负载均衡和故障转移设置。 现在,我有2个Tomcat实例,它们处于负载平衡和故障切换并且一直运行。 请求通过Tomcat1(server1)或Tomcat2(server2)提供。

Tomcat前面有一个Apache Web服务器,用作负载平衡器和故障切换,并使用mod_jk进行configuration。 两个Tomcat都通过AJP连接到Web服务器。

现在,我想要做的是,而不是运行两个Tomcat实例,我只想运行一个。 当这个实例死亡或崩溃时,第二个Tomcat实例被激活并且请求被服务。

这是configuration:

workers.properties:

 worker.list=loadbalancer worker.list=jk-status worker.jk-status.type=status #worker.jk-status.read_only=true worker.list=jk-manager worker.jk-manager.type=status worker.server1.port=8010 worker.server1.host=localhost worker.server1.lbfactor=1 worker.server1.type=ajp13 worker.server2.port=8011 worker.server2.host=localhost worker.server2.type=ajp13 worker.server2.lbfactor=1 worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=server1,server2 worker.loadbalancer.sticky_session=true 

sites-enabled / 000-default:

 Listen 443 <VirtualHost _default_:443> <Directory /> Options FollowSymLinks AllowOverride All </Directory> ServerName www.domain.com ServerAlias *.domain.com domain.com JkMount /* loadbalancer SSLEngine on SSLCertificateFile /path/to/.crt SSLCertificateKeyFile /path/to/.key SSLCertificateChainFile /path/to/.ca-bundle </VirtualHost> 

将其添加到apache2.conf中:

 LoadModule jk_module modules/mod_jk.so JkWorkersFile /etc/apache2/workers.properties JkLogFile /etc/apache2/mod_jk.log JkMount /* loadbalancer JkMount /jkStatus jk-status <IfModule mod_rewrite> RewriteEngine On </IfModule> 

Tomcat1:

 <Connector port="8010" 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" /> <Connector port="8443" enableLookups="true" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" maxThreads="200" compression="off" sslProtocols="TLS" sslEnabledProtocols="TLSv1+TLSv1.1+TLSv1.2" compressionMinSize="1024" scheme="https" secure="true" clientAuth="false" keystoreFile="/path/to/keystore" keystorePass="PASS" URIEncoding="utf-8"/> 

同上面一样,只是在Tomcat2中更改了端口号。

我希望有足够的信息来处理这个问题。 请让我知道。 谢谢。

更新configuration

  worker.list=loadbalancer worker.list=jk-status worker.jk-status.type=status worker.list=jk-manager worker.jk-manager.type=status worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=server1,server2 # Define the first member worker worker.server1.type=ajp13 worker.server1.host=localhost worker.server1.port=8010 # Define preferred failover node for worker1 worker.server1.redirect=server2 # Define the second member worker worker.server2.type=ajp13 worker.server2.host=localhost worker.server2.port=8011 # Disable worker2 for all requests except failover worker.server2.activation=disabled worker.loadbalancer.sticky_session=true 

根据mod_jk文档 ,似乎您将使用distance来创build一个热备份,通过设置更大的距离:

一个整数,表示一名工人的平衡工人之间的偏好。 负载平衡器不会select一些平衡的工作人员,如果有另一个可用的工人距离较远。 只有当一定距离以下的所有工人失误,停用或停止时,距离较远的工人才有资格获得平衡。

然而,在LoadBalancer Howto文档中,给出了另一种方法:

最后,您还可以通过将激活设置为禁用并将属性redirect添加到其他工作人员来configuration热备用工作人员:

  # The advanced router LB worker worker.list=router worker.router.type=lb worker.router.balance_workers=worker1,worker2 # Define the first member worker worker.worker1.type=ajp13 worker.worker1.host=myhost1 worker.worker1.port=8009 # Define preferred failover node for worker1 worker.worker1.redirect=worker2 # Define the second member worker worker.worker2.type=ajp13 worker.worker2.host=myhost2 worker.worker2.port=8009 # Disable worker2 for all requests except failover worker.worker2.activation=disabled 

worker1上的redirect标志告诉负载平衡器在worker1出现问题的情况下将请求redirect到worker2。 在所有其他情况下,worker2不会收到任何请求,因此就像热备份一样。