2015-12-09 59 views
0

我正在使用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> 

我提出的配置實現負載均衡和故障轉移在一起是什麼錯誤。非常感謝。

回答

1

首先,您正在使用兩個不同的代理模塊,不這樣做。

一個是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 =假

而且檢查是否有用,基於此我會更新答案

+0

我不介意使用mod_jk先生。但是你發佈的答案包含了我的配置,如果你覺得方便,請向我推薦mod_jk。非常感謝。: - )# –

+0

然後首先確保你有一個工作mod_jk配置,開始刪除我在我的回覆中指出的mod_proxy的指令,並檢查是否仍然有效,基於我將更新答案 – Fredi

+0

是的,我有該模塊。我也叫apache2ctl -M,它的輸出在這裏:http://pastebin.com/DxxPuLJG。我應該從000-default中刪除所有內容,因爲該文件在 –