Apache Web 服务器、Tomcat:更改负载平衡配置,使一个 Tomcat 实例处于冷备用状态

Apache Web 服务器、Tomcat:更改负载平衡配置,使一个 Tomcat 实例处于冷备用状态

我在基于 Debian X64 的服务器上配置了负载平衡和故障转移设置。目前,我有 2 个 Tomcat 实例,它们处于负载平衡和故障转移状态,并且始终在运行。请求通过 Tomcat1(服务器 1)或 Tomcat2(服务器 2)处理。

Tomcat 前面有一个 Apache Web 服务器,充当负载平衡器和故障转移,并配置了 mod_jk。两个 Tomcat 都通过 连接到 Web 服务器AJP

现在,我想要做的是,不再运行 2 个 Tomcat 实例,而是只运行一个。当此实例死亡或崩溃时,第二个 Tomcat 实例将被激活并使用它处理请求。

配置如下:

工人.属性:

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

站点已启用/000-默认:

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 中的端口号发生了改变。

我希望有足够的信息来解决这个问题。请告诉我。谢谢。

更新配置

  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

答案1

根据mod_jk 文档,似乎您可以distance通过将距离设置得更大来创建热备用:

一个整数,用于表示 lb 工作器中平衡工作器之间的偏好。如果有另一个可用工作器且距离更短,负载平衡器将永远不会选择某个平衡工作器。只有当所有低于给定距离的工作器都出现错误、被禁用或停止时,距离较大的工作器才有资格进行平衡。

在里面LoadBalancer 操作说明文档然而,还有另一种方法:

最后,您还可以通过将激活设置为禁用并结合添加到其他工作者的属性重定向来配置热备用工作者:

  # 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 上的重定向标志告知负载均衡器,如果 worker1 出现问题,则将请求重定向到 worker2。在所有其他情况下,worker2 将不会收到任何请求,因此充当热备用。

相关内容