2010-09-03 3 views
1

У меня есть несколько экземпляров tomcat, работающих на физически независимых машинах.Как обмениваться сеансами между независимыми экземплярами tomcat

Я хочу настроить tomcat для обмена сеансами между этими экземплярами.

Я попытался настроить org.apache.catalina.session.PersistentManager с http://tomcat.apache.org/tomcat-6.0-doc/config/manager.html. Но я вижу только файл сеанса, когда я завершаю экземпляры tomcat, и я не знаю, участвуют ли эти экземпляры в этом сеансе. Думаю, нет. Потому что это не имеет смысла, если tomcat записывает сессию только при выключении.

Другая вещь, которую я нашел, это cluster-howto, но я не могу этого сделать, машины не могут видеть друг друга. Они используют только путь хранения для использования.

Другая вещь, которая, я думаю, я могу сделать, - это реализовать manager, но это кажется немного сложным.

Я должен добавить, что я использую tomcat для развертывания военных файлов Grails, и я использую сессию grails. Я думаю, что это имеет какое-то отношение к Spring

Итак, вопрос в том, как лучше всего вы думаете, что я могу сделать, чтобы выполнить более эффективную задачу? Или, может быть, я чего-то не хватает? Можете ли вы дать мне какой-нибудь указатель?

+0

Почему вам нужно обмениваться сеансами на уровне сервера приложений? Я предполагаю, что я спрашиваю, можете ли вы решить свою проблему с липкими сессиями? –

+0

Я думаю, вы говорите о настройке кластера, где экземпляры tomcat видят друг друга. Я не могу этого сделать, потому что топология различна. В прошлом мы разрабатываем собственный менеджер сеансов. Этот сеанс совместного доступа в хранилище. Но теперь мы хотим использовать некоторую конфигурацию сеанса на уровне сервера. – user2427

+0

Нет, липкие сеансы - это когда балансировочный балансир восходящего потока запоминает, какая машина имела этот сеанс, а затем перенаправляет пользователя на машину, у которой есть его сеанс. Аарон спрашивает, зачем вам вообще нужно делиться сессиями. Вы хотите сделать это для восстановления после сбоя? –

ответ

2

У вас есть F5 Big IP, выполняющий балансировку нагрузки перед серверами tomcat, поэтому он будет обрабатывать sessionID for you, отправив вас обратно на правильный сервер Tomcat. Используйте алгоритм sticky-round-robin.

Согласно USECASE в комментариях -

То, что я пытаюсь сделать, это сохранить некоторые данные в сессии, а затем перенаправить на сервер входа, который в успехе сценария перенаправляет мои серверы. И мое беспокойство вызывает то, что происходит, если балансировщик нагрузки перенаправляет запрос на сервер, который ранее не сохранил необходимые данные в сеансе. Может быть, липкая сессия - это то, что мне нужно. Итак: могу ли я настроить липкую сессию в объектно-кластерной среде?

При успешном входе в систему - вы перенаправляете обратно сначала в BigIP. Он заберет sessionID из браузера. Он отправит вас в правильный Tomcat, и вы сможете получить данные сеанса.

Если нет, похоже, что вам нужно сохранить «sessionID» сам по отношению к некоторому «идентификатору пользователя» в базе данных, но это плохой дизайн. Я думаю, что первые должны работать

+0

Хорошая ссылка, спасибо. Но я также нуждался бы в восстановлении сеанса. – user2427

+0

@damian: Session failover также будет выполняться Big IP в этом случае. – JoseK

+0

такая же конфигурация? – user2427

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