You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Kernel freak <ke...@gmail.com> on 2015/12/09 15:56:46 UTC
Failover not working even after configuration.
I am working on Apache and tomcat to setup Load-balancing and fail-over.
Initially I thought that load-balancing would include fail-over, but I was
wrong. I thought that if one instance is not active, then consuming other
instance also becomes a part of load-management. Enough with the
terminologies, I setup fail-over, but the ironical part is fail-over itself
is failing.
As soon as I shut down one instance of tomcat, the entire setup is dead and
I am getting 503. Can someone help me understand what is the problem.
Added this in apache2.conf :
JkWorkersFile /etc/apache2/workers.properties
JkMount /* loadbalancer
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-default in sites-enabled :
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,AllowDeny from noneAllow from all</Location>
First tomcat's 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>
Second Tomcat's 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>
I am working on Apache and tomcat to setup Load-balancing and
fail-over. Initially I thought that load-balancing would include
fail-over,
but I was wrong. I thought that if one instance is not active, then
consuming other instance also becomes a part of load-management. Enough
with the terminologies, I setup fail-over, but the ironical part is
fail-over itself is failing.
As soon as I shut down one instance of tomcat, the entire setup is
dead and I am getting 503. Can someone help me understand what is the
problem.
Added this in apache2.conf :
JkWorkersFile /etc/apache2/workers.properties
JkMount /* loadbalancer
workers.properties :
GNU nano 2.2.6 File: 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-default in sites-enabled :
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,AllowDeny from noneAllow from all</Location>
First tomcat's 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>
Second Tomcat's 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>
What mistake I am making in the config for implementing load-balancing and
fail-over together. Thanks a lot.
Re: Failover not working even after configuration.
Posted by "André Warnier (tomcat)" <aw...@ice-sa.com>.
On 09.12.2015 17:02, Kernel freak wrote:
> Hi,
>
> Thank you for finding out that mistake with port-number. What I fail to
> understand is, where to redirect the AJP request then?
Why would you need to ?
Again :
Your AJP <Connector> (in Tomcat) will *never* receive requests that are HTTPS. It expects
(and in your configuration, receives) only requests in the AJP protocol format (from the
Apache-httpd-side mod_jk or mod_proxy_ajp module).
(And if it received anything else, it would bitterly complain).
Also again:
Your configuration is :
User browser <-- HTTP(S) --> Apache httpd + mod_jk <- AJP -> Tomcat AJP Connector
<-->Tomcat webapp
The user's browser talks to Apache httpd using either HTTP or HTTPS.
If it is HTTPS, Apache unencrypts it.
The request is then (partially) processed in Apache httpd (parsing the headers etc.), and
then it is forwarded to (one of the) Tomcat by the mod_jk module, in AJP format (which has
no encrypted version). It is received by the AJP Connector in Tomcat (which understands
AJP, but not HTTP/HTTPS). The AJP Connector in Tomcat makes this into a Tomcat/java HTTP
Request object, that object is passed to the webapp, and that is what the webapp is
dealing with.
The webapp Response object goes the opposite way.
Tomcat outputs this response through the AJP connector, which encodes it as an "AJP
message". This message goes to the Apache mod_jk connector. The mod_jk connector decodes
this back for Apache-httpd, into an "Apache httpd response". Apache httpd then sends this
response back to the browser, in HTTP or HTTPS, depending on how the browser originally
connected to httpd to send that request.
The thing to understand here, is that along with the request in AJP format that mod_jk
sends to the Tomcat AJP Connector, there will be (optionally) a number of "SSL
attributes", which allow the recipient webapp to know that the original browser-to-httpd
connection was HTTPS (or not), even though Tomcat received that request through the AJP
Connector, in non-SSL AJP format.
See here :
http://tomcat.apache.org/connectors-doc/reference/apache.html
--> JkExtractSSL
I do not know Spring, and I do not know under what conditions it would send back https://
links or not. But this should not be a problem, if the configuration on both Apache-httpd
and Tomcat is correct.
Now, all that I am saying above, and also all your load-balancing setup, is only valid
assuming that *all* browser-to-Tomcat communications always goes through Apache httpd.
If you allow browsers to access Tomcat directly, then all this is moot.
A browser cannot talk directly to the Tomcat AJP Connector, they would not understand
eachother. But if your Tomcats have active HTTP/HTTPS Connectors, and the browser is able
to connect to them, then forget all the above, it will not work as you expect.
(Such connections would also bypass the load-balancing that you want).
Can you tell me
> that. I am as of now creating additional mail, as I changed the config and
> added a Cluster in tomcat. I just need to know what's the deal with those
> connectors, as the webapp requires https..
>
> Should I remove that redirectPort in ajp? Kindly let me know. Thank you.
>
> On Wed, Dec 9, 2015 at 4:46 PM, André Warnier (tomcat) <aw...@ice-sa.com>
> wrote:
>
>>
>> On 09.12.2015 15:56, Kernel freak wrote:
>>
>>> I am working on Apache and tomcat to setup Load-balancing and fail-over.
>>> Initially I thought that load-balancing would include fail-over, but I was
>>> wrong. I thought that if one instance is not active, then consuming other
>>> instance also becomes a part of load-management.
>>>
>>
>> It should :
>> quote : http://tomcat.apache.org/connectors-doc/reference/workers.html
>>
>> Load balancer management includes:
>>
>> Instantiating the workers in the web server.
>> Using the worker's load-balancing factor, perform weighed-round-robin
>> load balancing where high lbfactor means stronger machine (that is going to
>> handle more requests)
>> Keeping requests belonging to the same session executing on the same
>> Tomcat worker.
>> Identifying failed Tomcat workers, suspending requests to them and
>> instead fall-backing on other workers managed by the lb worker.
>>
>> The overall result is that workers managed by the same lb worker are
>> load-balanced (based on their lbfactor and current user session) and also
>> fall-backed so a single Tomcat process death will not "kill" the entire
>> site.
>>
>>
>> Enough with the
>>
>>> terminologies, I setup fail-over, but the ironical part is fail-over
>>> itself
>>> is failing.
>>>
>>> As soon as I shut down one instance of tomcat, the entire setup is dead
>>> and
>>> I am getting 503. Can someone help me understand what is the problem.
>>>
>>>
>> Maybe the first step would be to remove the irrelevant parts of he
>> configuration below.
>> Also, please make an effort at formatting your email, in plain text.
>> What comes below is almost unreadable as it is.
>> (Even in the original mail to the list, see by yourself)
>>
>> I have reformatted what I could..
>>
>>
>> Added this in apache2.conf :
>>>
>>> JkWorkersFile /etc/apache2/workers.properties
>>> JkMount /* loadbalancer
>>>
>>> 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-default in sites-enabled :
>>>
>>>
>>> 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>
>>
>>>
>>>
>>> First tomcat's server.xml :
>>>
>>>
>> On your front-end, you are re-directing everything to the tomcats, via AJP.
>> So this Connector is superfluous, and only makes the discussion more
>> confusing :
>>
>> <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"/>
>>>
>>>
>> Same for this one. You are using AJP, so you are never accessing tomcat
>> directly via HTTPS. Useless :
>>
>> <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"/>
>>>
>>
>> This one is being used :
>>
>> <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>
>>>
>>> Second Tomcat's server.xml :
>>>
>>>
>>> useless, see above :
>>
>> <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"/>
>>>
>>> useless, see above :
>>
>>> <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"/>
>>>
>>
>> Used:
>>
>>> <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>
>>>
>>>
>>>
>> Note : your HTTP(S) Connectors are useless, since nothing should in
>> principle ever reach tomcat via HTTP(S). But if you are going to use the
>> redirectPort="8443"
>> attribute, you may at least ensure that the corresponding port is attended
>> to.
>>
>> So, I suggest that you clean up your configuration, and repost it in a
>> more readable format. Then maybe we'll see something.
>>
>>
>>
>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> I am working on Apache and tomcat to setup Load-balancing and
>>> fail-over. Initially I thought that load-balancing would include
>>> fail-over,
>>> but I was wrong. I thought that if one instance is not active, then
>>> consuming other instance also becomes a part of load-management. Enough
>>> with the terminologies, I setup fail-over, but the ironical part is
>>> fail-over itself is failing.
>>>
>>> As soon as I shut down one instance of tomcat, the entire setup is
>>> dead and I am getting 503. Can someone help me understand what is the
>>> problem.
>>>
>>> Added this in apache2.conf :
>>>
>>> JkWorkersFile /etc/apache2/workers.properties
>>> JkMount /* loadbalancer
>>>
>>> workers.properties :
>>>
>>> GNU nano 2.2.6 File: 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-default in sites-enabled :
>>>
>>> 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,AllowDeny from noneAllow from all</Location>
>>>
>>>
>>> First tomcat's 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>
>>>
>>> Second Tomcat's 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>
>>>
>>> What mistake I am making in the config for implementing load-balancing and
>>> fail-over together. Thanks a lot.
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
>>
>>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org
Re: Failover not working even after configuration.
Posted by Kernel freak <ke...@gmail.com>.
Hi,
Thank you for finding out that mistake with port-number. What I fail to
understand is, where to redirect the AJP request then? Can you tell me
that. I am as of now creating additional mail, as I changed the config and
added a Cluster in tomcat. I just need to know what's the deal with those
connectors, as the webapp requires https..
Should I remove that redirectPort in ajp? Kindly let me know. Thank you.
On Wed, Dec 9, 2015 at 4:46 PM, André Warnier (tomcat) <aw...@ice-sa.com>
wrote:
>
> On 09.12.2015 15:56, Kernel freak wrote:
>
>> I am working on Apache and tomcat to setup Load-balancing and fail-over.
>> Initially I thought that load-balancing would include fail-over, but I was
>> wrong. I thought that if one instance is not active, then consuming other
>> instance also becomes a part of load-management.
>>
>
> It should :
> quote : http://tomcat.apache.org/connectors-doc/reference/workers.html
>
> Load balancer management includes:
>
> Instantiating the workers in the web server.
> Using the worker's load-balancing factor, perform weighed-round-robin
> load balancing where high lbfactor means stronger machine (that is going to
> handle more requests)
> Keeping requests belonging to the same session executing on the same
> Tomcat worker.
> Identifying failed Tomcat workers, suspending requests to them and
> instead fall-backing on other workers managed by the lb worker.
>
> The overall result is that workers managed by the same lb worker are
> load-balanced (based on their lbfactor and current user session) and also
> fall-backed so a single Tomcat process death will not "kill" the entire
> site.
>
>
> Enough with the
>
>> terminologies, I setup fail-over, but the ironical part is fail-over
>> itself
>> is failing.
>>
>> As soon as I shut down one instance of tomcat, the entire setup is dead
>> and
>> I am getting 503. Can someone help me understand what is the problem.
>>
>>
> Maybe the first step would be to remove the irrelevant parts of he
> configuration below.
> Also, please make an effort at formatting your email, in plain text.
> What comes below is almost unreadable as it is.
> (Even in the original mail to the list, see by yourself)
>
> I have reformatted what I could..
>
>
> Added this in apache2.conf :
>>
>> JkWorkersFile /etc/apache2/workers.properties
>> JkMount /* loadbalancer
>>
>> 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-default in sites-enabled :
>>
>>
>> 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>
>
>>
>>
>> First tomcat's server.xml :
>>
>>
> On your front-end, you are re-directing everything to the tomcats, via AJP.
> So this Connector is superfluous, and only makes the discussion more
> confusing :
>
> <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"/>
>>
>>
> Same for this one. You are using AJP, so you are never accessing tomcat
> directly via HTTPS. Useless :
>
> <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"/>
>>
>
> This one is being used :
>
> <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>
>>
>> Second Tomcat's server.xml :
>>
>>
>> useless, see above :
>
> <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"/>
>>
>> useless, see above :
>
>> <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"/>
>>
>
> Used:
>
>> <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>
>>
>>
>>
> Note : your HTTP(S) Connectors are useless, since nothing should in
> principle ever reach tomcat via HTTP(S). But if you are going to use the
> redirectPort="8443"
> attribute, you may at least ensure that the corresponding port is attended
> to.
>
> So, I suggest that you clean up your configuration, and repost it in a
> more readable format. Then maybe we'll see something.
>
>
>
>
>>
>>
>>
>>
>>
>>
>>
>>
>> I am working on Apache and tomcat to setup Load-balancing and
>> fail-over. Initially I thought that load-balancing would include
>> fail-over,
>> but I was wrong. I thought that if one instance is not active, then
>> consuming other instance also becomes a part of load-management. Enough
>> with the terminologies, I setup fail-over, but the ironical part is
>> fail-over itself is failing.
>>
>> As soon as I shut down one instance of tomcat, the entire setup is
>> dead and I am getting 503. Can someone help me understand what is the
>> problem.
>>
>> Added this in apache2.conf :
>>
>> JkWorkersFile /etc/apache2/workers.properties
>> JkMount /* loadbalancer
>>
>> workers.properties :
>>
>> GNU nano 2.2.6 File: 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-default in sites-enabled :
>>
>> 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,AllowDeny from noneAllow from all</Location>
>>
>>
>> First tomcat's 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>
>>
>> Second Tomcat's 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>
>>
>> What mistake I am making in the config for implementing load-balancing and
>> fail-over together. Thanks a lot.
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>
Re: Failover not working even after configuration.
Posted by "André Warnier (tomcat)" <aw...@ice-sa.com>.
On 09.12.2015 15:56, Kernel freak wrote:
> I am working on Apache and tomcat to setup Load-balancing and fail-over.
> Initially I thought that load-balancing would include fail-over, but I was
> wrong. I thought that if one instance is not active, then consuming other
> instance also becomes a part of load-management.
It should :
quote : http://tomcat.apache.org/connectors-doc/reference/workers.html
Load balancer management includes:
Instantiating the workers in the web server.
Using the worker's load-balancing factor, perform weighed-round-robin load balancing
where high lbfactor means stronger machine (that is going to handle more requests)
Keeping requests belonging to the same session executing on the same Tomcat worker.
Identifying failed Tomcat workers, suspending requests to them and instead
fall-backing on other workers managed by the lb worker.
The overall result is that workers managed by the same lb worker are load-balanced (based
on their lbfactor and current user session) and also fall-backed so a single Tomcat
process death will not "kill" the entire site.
Enough with the
> terminologies, I setup fail-over, but the ironical part is fail-over itself
> is failing.
>
> As soon as I shut down one instance of tomcat, the entire setup is dead and
> I am getting 503. Can someone help me understand what is the problem.
>
Maybe the first step would be to remove the irrelevant parts of he configuration below.
Also, please make an effort at formatting your email, in plain text.
What comes below is almost unreadable as it is.
(Even in the original mail to the list, see by yourself)
I have reformatted what I could..
> Added this in apache2.conf :
>
> JkWorkersFile /etc/apache2/workers.properties
> JkMount /* loadbalancer
>
> 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-default in sites-enabled :
>
>
> 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>
>
>
> First tomcat's server.xml :
>
On your front-end, you are re-directing everything to the tomcats, via AJP.
So this Connector is superfluous, and only makes the discussion more confusing :
> <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"/>
>
Same for this one. You are using AJP, so you are never accessing tomcat directly via
HTTPS. Useless :
> <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"/>
This one is being used :
> <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>
>
> Second Tomcat's server.xml :
>
>
useless, see above :
> <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"/>
>
useless, see above :
> <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"/>
Used:
> <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>
>
>
Note : your HTTP(S) Connectors are useless, since nothing should in principle ever reach
tomcat via HTTP(S). But if you are going to use the
redirectPort="8443"
attribute, you may at least ensure that the corresponding port is attended to.
So, I suggest that you clean up your configuration, and repost it in a more readable
format. Then maybe we'll see something.
>
>
>
>
>
>
>
>
>
> I am working on Apache and tomcat to setup Load-balancing and
> fail-over. Initially I thought that load-balancing would include
> fail-over,
> but I was wrong. I thought that if one instance is not active, then
> consuming other instance also becomes a part of load-management. Enough
> with the terminologies, I setup fail-over, but the ironical part is
> fail-over itself is failing.
>
> As soon as I shut down one instance of tomcat, the entire setup is
> dead and I am getting 503. Can someone help me understand what is the
> problem.
>
> Added this in apache2.conf :
>
> JkWorkersFile /etc/apache2/workers.properties
> JkMount /* loadbalancer
>
> workers.properties :
>
> GNU nano 2.2.6 File: 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-default in sites-enabled :
>
> 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,AllowDeny from noneAllow from all</Location>
>
> First tomcat's 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>
>
> Second Tomcat's 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>
>
> What mistake I am making in the config for implementing load-balancing and
> fail-over together. Thanks a lot.
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org