Я работаю над задачей, в которой мне нужно сбалансировать нагрузку двух экземпляров tomcat, чтобы они использовали общий сеанс также между собой, и когда один из них выходит из строя, другой может справиться с задачей.
Кажется, что первая задача работает, так как, когда обе версии Tomcat подключены к сети, проблем не возникает.
Я не знаю, как определить, какой пользователь от какого кота, поэтому я могу видеть, находится ли пользователь из другого кота в чате, тогда идентификатор сеанса правильно используется.
Вторая проблема, с которой я сталкиваюсь, заключается в том, что если один tomcat выйдет из строя, другой экземпляр tomcat должен продолжать работать и обслуживать сделанные запросы, но этого не происходит. Как только любой из экземпляров Apache tomcat выходит из строя, я получаю сообщение 503, служба недоступна. Пожалуйста, дайте мне знать, как я могу решить эту проблему и проверить, какой пользователь от какого экземпляра tomcat. Внесенные изменения: sites-enabled / 000-default:
<Proxy balancer://mycluster>
BalancerMember ajp://localhost:8010 route=jvmroute-first connectiontimeout=10
BalancerMember ajp://localhost:8011 route=jvmroute-second connectiontimeout=10
ProxySet stickysession=JSESSIONID
Order Deny,Allow
Deny from none
Allow from all
</Proxy>
<VirtualHost *:80>
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
</VirtualHost>
Первый 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" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="200" compression="force"
compressionMinSize="1024" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
keystoreFile="keystore" 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="jvmroute-first">
// No modifications within Engine
</Engine>
Второй экземпляр кота:
<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" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="200" compression="force"
compressionMinSize="1024" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
keystoreFile="keystore.jks" 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="443" URIEncoding="utf-8"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"
/>
Почему это происходит. Любые идеи, подсказки. Большое спасибо. :-)
редактировать
Кажется, что-то не так с балансировщиком нагрузки, так как через некоторое время я получаю Err, проверьте снимок экрана
Это может происходить из-за того, что на стороне Tomcat не включена репликация сеанса. Поскольку липкий сеанс включен в Apache, запросы всегда маршрутизируются на основе проверки JSESSIONID.
Реализуйте кластеризацию в экземплярах Tomcat с переключением при отказе, чтобы любой неудачный запрос после сбоя перенаправлялся на второй сервер Tomcat.