Tomcat, Apache: отказоустойчивость не работает даже после настройки
Я работаю над Apache и Tomcat, чтобы настроить балансировку нагрузки и отработки отказа. Сначала я думал, что load-balancing
будет включать в себя fail-over
, но я был неправ. Я думал, что если один экземпляр не активен, то использование другого экземпляра также становится частью управления нагрузкой. Достаточно терминологии, я настраиваю переключение при сбое, но ироническая часть fail-over
само по себе терпит неудачу.
Как только я закрываю один экземпляр tomcat, все настройки мертвы, и я получаю 503. Может кто-нибудь помочь мне понять, в чем проблема.
Добавил это в apache2.conf:
JkWorkersFile /etc/apache2/workers.properties
JkMount /* loadbalancer
работники.свойства:
Файл GNU nano 2.2.6: worker.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'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>
Второй 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>
Какую ошибку я делаю в конфигурации для совместной балансировки нагрузки и отработки отказа. Большое спасибо.
1 ответ
Во-первых, вы используете два разных прокси-модуля, не делайте этого.
Одним из них является mod_jk, а конфигурационными файлами являются works.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>
Что касается комментариев, давайте пойдем по маршруту mod_jk. Сначала удалите часть конфигурации mod_proxy, по существу все, что в 000-default, оставив только:
JkMountCopy On
Затем отключите загрузку этих модулей (не обязательно, а лучше):
mod_proxy_ *
Затем добавьте это к вашему рабочему loadbalancer в worker.properties:
worker.loadbalancer.sticky_session_force = false
И проверьте, все ли работает, основываясь на этом я обновлю ответ