Балансировка нагрузки Tomcat в Azure
Мы реализуем небольшую ферму (2 узла) Tomcat, установленную на двух срезах в Azure, и устанавливаем перед ней балансировщик нагрузки Azure. Это в основном циклический, не липкий балансировщик сеансов.
Веб-приложение использует контейнер Tomcat управляемая безопасность (аутентификация форм, в настоящее время через DataSourceRealm.
По мере того, как пользователь получает циклический доступ к узлу, на котором он не аутентифицируется, как мы и ожидали, он получает ошибки аутентификации.
Я сделал довольно много исследований, и, кажется, нет ни одного предписанного способа справиться с этим... Было высказано предположение, что мы положили узлы за сервер Apache и использовать mod_jk; что мы переконструируем процесс проверки подлинности, чтобы использовать файлы "cookie" для подтверждения подлинности, которые мы используем кластеризацию котяра.
Каким был бы самый простой способ для нас достичь этого? Наше приложение не использует сеансы ни для чего (кроме CMS Tomcat). Мы бы предпочли не выходить из CMS Tomcat, хотя мы и не против построение реализации ЯАС, если это необходимо. Но на самом деле, единственное, что нам нужно поддерживать,-это межузловая аутентификация.Любая помощь ценится!
EDIT: мы попытались memcached на Azure, получили следующее:
2013-07-08 21:50:55.463 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@dcd4755
2013-07-08 21:50:55.463 INFO net.spy.memcached.MemcachedConnection: Reconnecting due to failure to connect to {QA sa=srvr.cloud.com/1XX.1XX.1XX.1XX:11XXX, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0}
java.net.ConnectException: Connection timed out: no further information
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source)
at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:399)
at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:247)
at net.spy.memcached.MemcachedConnection.run(MemcachedConnection.java:915)
Наш контекст.xml:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:srvr.cloud.com:11XXX"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"
/>
1 ответ:
Подход заключается в размещении memcached на серверах иликэшировании Windows Azure и использованииmemcached-session-manager для совместного использования данных сеанса между серверами Tomcat.
"memcached-session-manager-это менеджер сеансов tomcat, который сохраняет сеансы в memcached для высокодоступных, масштабируемых и отказоустойчивых веб-приложений. Он поддерживает как липкие, так и не липкие конфигурации и в настоящее время работает с tomcat 6.x и 7.x. для липких сессий сессия отказоустойчивость (Tomcat crash) поддерживается, для неклейких сеансов это значение по умолчанию (сеанс по умолчанию обслуживается разными tomcats для разных запросов). Также memcashed failover (memcached crash) поддерживается через миграцию сеансов. Также не должно быть единой точки отказа, поэтому при сбое memcached сеанс не будет потерян (но либо будет доступен в tomcat, либо в другом memcached)."
См. немного устаревшее обсуждение в этот ответ.