2013-07-08 3 views
3

Мы реализуем небольшую ферму (2 узла) Tomcat, установленную на двух срезах в Azure, и устанавливаем балансировку нагрузки Azure спереди. Это в основном круговой, нелипкий сеанс балансировки.Балансировка нагрузки Tomcat в Azure

веб-приложение использует контейнер для Tomcat управляемой системы безопасности (проверки подлинности форм, в настоящее время с помощью DataSourceRealm.

Когда пользователь получает круглодонную robin'ed к узлу они не аутентифицированым против, как мы ожидали, они получают ошибки аутентификации.

Я провел много исследований, и, похоже, не существует единого предписанного способа борьбы с этим ... Было высказано предположение, что мы помещаем узлы в сервер Apache и используем mod_jk; что мы перепроектируем процесс аутентификации для использования cookie для подтверждения аутентификации, и мы используем кластеризацию Tomcat.

Что было бы самым простым способом для достижения этого? Наше приложение не использует сеансы ни для чего (кроме CMS Tomcat). Мы бы предпочли не уходить из CMS Tomcat, хотя мы не склонны строить реализацию JAAS, если это необходимо. Но на самом деле единственное, что нам нужно для поддержки, - это аутентификация между узлами.

Любая помощь оценена!

EDIT: Мы попытались Memcached на Azure, получил следующее:

2013-07-08 21:50:55.463 INFO net.spy.memcached.MemcachedConnection: Connection state changed for [email protected] 
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) 

Наша context.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" 
    /> 
+0

Возможный дубликат: http://stackoverflow.com/questions/4708057/tomcat-clustering-in-microsoft-azure –

ответ

3

подход будет хост Memcached на серверах, или Windows Azure Caching, и использовать memcached-session-manager для обмена данными сеанса между серверами Tomcat.

«memcached-session-manager - менеджер сеансов tomcat, который поддерживает сеансы в memcached, для высокодоступных, масштабируемых и отказоустойчивых веб-приложений. Он поддерживает как липкие, так и нелипкие конфигурации и в настоящее время работает с tomcat 6. x и 7.x. Для липких сеансов поддерживается сбой при сбое (ломается tomcat), для нелипких сеансов это значение по умолчанию (сеанс по умолчанию используется разными котами для разных запросов). Также memcashed failover (memcached crash) поддерживается при миграции сеансов. Также не должно быть единой точки отказа, поэтому, когда memcached не работает, сеанс не будет потерян (но либо доступен в tomcat, либо в другом memcached) ».

См. Слегка устаревшее обсуждение на this answer.

Смежные вопросы