Tomcat,Apache:即使在配置后故障转移也不起作用
问题描述:
我正在使用Apache和tomcat来设置负载平衡和故障转移。最初我以为load-balancing
将包括fail-over
,但我错了。我认为如果一个实例不活跃,那么消费其他实例也会成为负载管理的一部分。足够的术语,我安装故障转移,但具有讽刺意味的部分是fail-over
本身就是失败。Tomcat,Apache:即使在配置后故障转移也不起作用
只要我关闭了一个tomcat实例,整个设置就会死机,我得到了503。有人可以帮我理解问题所在。
添加了这个在apache2.conf:
JkWorkersFile /etc/apache2/workers.properties
JkMount /* loadbalancer
workers.properties:
GNU纳米2.2.6文件:workers.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-默认:
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的,而配置文件workers.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>
至于评论,让我们g o mod_jk路由。首先拆下mod_proxy的配置部分,基本上全部是000,默认只留下:
JkMountCopy On
然后禁用加载这个模块(不neccessary但更好):
mod_proxy_ *
然后加入这在workers.properties找你的负载均衡器的工人:
worker.loadbalancer.sticky_session_force =假
而且检查是否有用,基于此我会更新答案
我不介意使用mod_jk先生。但是你发布的答案包含了我的配置,如果你觉得方便,请向我推荐mod_jk。非常感谢。: - )# –
然后首先确保你有一个工作mod_jk配置,开始删除我在我的回复中指出的mod_proxy的指令,并检查是否仍然有效,基于我将更新答案 – Fredi
是的,我有该模块。我也叫apache2ctl -M,它的输出在这里:http://pastebin.com/DxxPuLJG。我应该从000-default中删除所有内容,因为该文件在 –