Вопрос

В контексте Tomcat может пройти репликация сеанса без включения липкого сеанса?

Я понимаю, что цель липкой сеанса - иметь клиент «палки» до 1 сервера на протяжении всего сеанса. С репликацией сеанса взаимодействие клиента с сервером воспроизводится по всему кластеру (многие веб -серверы).

В приведенном выше случае может ли репликация сеанса? Сессия клиента IE распространяется, хотя и выходит на веб -серверы, и каждое взаимодействие с любым одним веб -сервером реплицируется, что позволяет беспрепятственно взаимодействовать.

Это было полезно?

Решение

AFAIK, Clustering Tomcat не поддерживает нелейные сессии. Из Tomcat Docs:

Убедитесь, что ваш LoadBalancer настроен для режима липкого сеанса.

Но есть решение (я создал, так что вы знаете, что я предвзят :-)) Memcached-Session-Manager (МСМ), который также поддерживает нелейные сеансы. МСМ использует мемкахед (или любая бэкэнд, говорящий о протоколе Memcached) в качестве бэкэнда для резервного копирования/хранения сеанса.

В немаловатных режимах сеансы хранятся только в Memcached и больше не в Tomcat, как в случае с неприминными сеансами, сеанс-магазин должен быть внешним (чтобы избежать устаревших данных).

Он также поддерживает блокировку сеансов: с неопытными сессиями несколько параллельных запросов могут попасть в разные Tomcats и могут изменить сеанс параллельно, чтобы некоторые изменения сеанса могли перезаписаны другими. Блокировка сеанса позволяет синхронизировать параллельные запросы, идущие в разные Tomcats.

А MSM Home Page В основном описывает подход к липкому сеансу (как он начался только с этого), для получения подробной информации относительно неприбывших сессий, которые вы можете искать или спросить о список рассылки.

Подробности и примеры, касающиеся конфигурации, можно найти в MSM Wiki (SetupandConfiguration).

Просто чтобы дать вам представление о сложности: вам нужен один или несколько мемкахед Серверы, работающие (или S.Th. Аналогичный разговор Memcached) и обновленный контекст Tomcat.xml

<Context>
  ...
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:host1.domain.com:11211,n2:host2.domain.com:11211"
    sticky="false"
    sessionBackupAsync="false"
    lockingMode="auto"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    />
</Context>

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

Другие советы

Отличная статья об этой теме здесь:

Терракота, который они упоминают, имеет упрощенное руководство здесь:

Terracotta работает на Tomcat, но вы должны обратить внимание на проверку, какие кусочки терракотты бесплатны, а какие коммерческие. Пару лет назад их избыточный магазин был оплачен, и я не помню, чтобы это решение было отдельным продуктом.

Я на самом деле нашел обратный к этому вопросу. Репликация сеанса для меня (Tomcat7) с опциями OOTB работает только правильно без липкого сеанса. После переворачивания журнала я обнаружил, что с помощью JVMroutes мой идентификатор сеанса перешел от A123456789 до A123456789.01 - суффикс с jvmroute. Этот сеанс успешно воспроизведен из узла 01 в кластере до узла 02, но использует тот же идентификатор (A123456789.01). Когда я вынимаю узел 01 из кластера, трафик начинает придерживаться узела 02 - и теперь он смотрит на сеанс A123456789.02, которого, конечно, не существует. .01 есть, но в основном сидит на холостом ходу, пока не истекает. Если я подведу другой сервер, а сеансы воспроизводятся, а затем сниму 02, я получаю еще страшное поведение, потому что сеанс поднимается там, где он остановился.

Для меня, до сих пор, репликация сеанса без липких сессий (только обычный RR среди узлов в кластере) - единственное, что сработало.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top