Coldfusion 2018 кластеризация и репликация сеанса не работает - PullRequest
0 голосов
/ 28 сентября 2018

Настройка пары новых серверов Coldfusion 2018, и они будут использовать кластеризацию впервые и столкнулись с некоторыми проблемами.

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

Небольшая информация о настройке:

  • 2 веб-сервера (Windows Server 2012) за балансировщиками нагрузки
  • На каждом веб-сервере находится кластер Coldfusion, состоящий из 2 локальных экземпляров (пока неясно, полезно это или нет - будет задан отдельный вопрос) и 2 удаленных экземпляра (удаленные ссылаются на локальные экземпляры каждого противоположного сервера)
  • Для простоты, в настоящее время просто тестируем на одном сервере с локальными экземплярами Coldfusion - оставляя удаленные из уравнения, пока я не получу вещинадежно работает локально
  • Использование переменных сеанса J2EE
  • Время ожидания сеанса Coldfusion установлено на 2 часа
  • В каждом экземпляре Coldfusion для channelSendOptions установлено значение "6"

Вот что я сделал / испытал:

  • У нас есть веб-приложение, которое требует логин и магазиныинформация о пользователе в сеансе при входе в систему.
  • Я внес небольшое изменение в веб-приложение, чтобы показать мне, какой экземпляр кластера обслуживал мой текущий запрос.
  • После настройки кластера я запустилвеб-приложение и вошли в систему, отметив экземпляр, который отображал страницу входа в систему.
  • При входе в систему я сразу же вернулся к экрану входа в систему (приложение проверяет информацию о пользователе в сеансе и перенаправляет для входа в систему, если не найден)
  • Отладка показала, что на самом деле я вошел в систему, но после перенаправления на какую-то новую страницу после входа в систему пользовательская информация исчезнет из сеанса.
  • Несколько попыток входа в систему подряд (одни и те же учетные данные, только что попыталисьснова и снова и снова) выяснилось, что иногда вход в систему будет проходить очень хорошо, и я попаду в приложение.Однако, если я обновил страницу или перешел на другую страницу, сеанс был бы потерян очень скоро, но случайно (в течение нескольких обновлений страницы).
  • В попытке упростить задачу, попытаться выяснить, чтопродолжается, я создал простой .cfm, который обходит все элементы входа в систему и делает одну вещь: добавляет простое строковое значение в сессию, а затем выгружает сессию и имя экземпляра.** Я запустил скрипт один раз, отметил, какой экземпляр используется, и в этом сеансе содержится мое значение.** Затем я отредактировал скрипт, чтобы он больше не устанавливал значение сеанса.** Затем я снова и снова нажимаю «Обновить», чтобы подтвердить:
    1. То, что запросы обслуживались обоими экземплярами в кластере
    2. Чтобы при переключении между экземплярами было доступно значение сеансавсе время.
  • Опять же, репликация будет работать, и в течение нескольких обновлений я мог видеть свою переменную сеанса доступной в каждом экземпляре ... до тех пор, пока она не стала.После случайного количества обновлений / секунд (скажем, от 2 до 10 обновлений) значение исчезнет.

Я затрудняюсь объяснить, почему это происходит.Мы рассмотрели возможность использования Redis в качестве хранилища сессий, чтобы увидеть, помогло ли это, но, честно говоря, наша команда не имеет опыта работы с ним, не очень удобно работать в Windows, и мы действительно не хотим больше движущихся частей в нашей инфраструктуре, если мы можем помочьit.

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

Спасибо

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

Ниже приведен простой тестовый скрипт.Первая строка некомментируется при первом запуске для создания переменной сеанса и комментируется для каждого последующего запуска.

<!--- <cfset Session.svar="cake!"> --->

<cfdump var="#Session#" />

<cfscript>
hostaddress = createObject("java", "java.net.InetAddress").localhost.getHostAddress();
</cfscript>

<cfoutput>
<h3>
Instance: #createobject("component","CFIDE.adminapi.runtime").getinstancename()#
</h3>
</cfoutput>

Refresh 1

Refresh 2

Refresh 3

Refresh 4

enter image description here

Refresh 6

Refresh 7

Refresh 8

Refresh 11

Refresh 13

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...