Может репликация сессии происходит без липкой сессии? - PullRequest
2 голосов
/ 20 февраля 2012

В контексте Tomcat, может ли репликация сеанса происходить без включения «липкого» сеанса?

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

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

Ответы [ 3 ]

2 голосов
/ 20 февраля 2012

AFAIK, кластеризация tomcat не поддерживает неприлипающие сеансы.От tomcat docs :

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

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

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

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

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

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

Просто чтобы дать вам представление о сложности: вам нужен один или несколько memcached серверов, работающих (или что-то подобное, аналогично memcached) и обновленный tomcat context.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>

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

0 голосов
/ 17 июля 2014

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

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

0 голосов
/ 20 февраля 2012

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

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

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

...