Статьи

Как кластеризовать сервер SpringSource tc


Я решил собрать это HowTo во время работы над скринкастом tc Server для
стенда
Chariot Solutions на
SpringOne 2GX . Для незнакомых людей, tc Sever — это корпоративная версия Apache Tomcat, предоставляемая SpringSource ™.

Существует несколько
различий между tc Server и Apache Tomcat, однако по своей сути они являются одним и тем же сервером. Как утверждает SpringSource, tc Server «защищен для корпоративного использования». На сайте SpringSource есть много информации о tc Server,
поэтому я не буду вдаваться в подробности. Основное внимание в этом посте уделено описанию того, как настроить и запустить небольшой кластер (репликация сеанса) tc-серверов.

Кластеризация

Кластеризация сервера tc обеспечивает репликацию сеанса и репликацию атрибутов контекста. Репликация сеанса в основном копирует объект HttpSession всем членам кластера каждый раз, когда он изменяется. Типичные веб-приложения используют объект HttpSession для временного хранения специфичной для пользователя информации, такой как элементы корзины покупок, учетные данные безопасности и т. Д. Когда веб-сеанс пользователя завершается (например, пользователем, сбой сервера и т. Д.), Тогда все данные сеанса теряются, что может вызвать серьезные проблемы с юзабилити и доступностью. Следующие шаги предоставят вам простой (3) узел кластера репликации сеансов tc Server, который обеспечивает стабильную платформу, настроенную для высокой доступности.

ПРИМЕЧАНИЕ. Если у вас большой кластер с множеством узлов, SpringSource рекомендует более
расширенная конфигурация кластера, которая реплицирует информацию сеанса на один резервный элемент.

Что вам нужно

  • Установка сервера tc — я использовал нейтральный дистрибутив только для сервера (tcServer-6.0.20.B-GA-appserver.tar). Вы можете скачать eval с сайта SpringSource.
  • JDK 1.5 или 1.6 — я использовал Sun JDK 1.6
  • Платформа Mac, Unix или Linux — вы можете установить на Windows, однако, следующие инструкции относятся к платформе Unix.

Шаги высокого уровня

  • Установите и протестируйте tc сервер
  • Создать экземпляры сервера tc
  • Настроить кластеризацию
  • Сборка и развертывание тестового веб-приложения
  • Протестируйте кластер

Установка и тестирование tc-сервера

1. Установите JDK.

ПРИМЕЧАНИЕ. Если вы устанавливаете на 64-битную платформу UNIX, вы должны явно установить переменную среды JAVA_HOME. Это также помогает позже при создании экземпляра tc Server с использованием сценария tcserver-instance.sh.

2. Распакуйте дистрибутив tc Server во временную директорию, используя следующую команду.

$ tar -xf tcServer-6.0.20.B-GA-appserver.tar

3. Перейдите во временный каталог, содержащий распакованные установочные файлы сервера tc.

4. Запустите программу установки с помощью следующей команды.

$ ./install.sh
a. Введите 1 и нажмите Return.
б. Укажите полный путь к месту, где вы хотите установить tc Server, и нажмите «Return».
НОТА:

Установщик не будет создавать каталог для вас, поэтому он должен существовать.
с. Введите 2 и нажмите Return, чтобы выйти из программы установки.
Сервер tc теперь установлен с компоновкой ASF экземпляра сервера tc. Макет ASF является макетом структуры каталогов Apache Tomcat. Существует также макет сервера tc, который мы будем использовать при кластеризации серверов. Есть некоторые
различия между макетами.
5. Проверьте вашу установку. Сначала измените каталог на каталог bin экземпляра tc-сервера по умолчанию INSTALL_DIR / tcServer-6.0 / tomcat-6.0.20.B / bin.
6. Запустите экземпляр tc-сервера.
$ ./tcserver-ctl.sh запустите ИЛИ
$ ./tcserver-ctl.sh запустите

Команда ‘start’ запускает tc Server как процесс-демон. Команда run запускает tc Server как основной процесс.

7. Откройте веб-браузер и укажите
http: // localhost: 8080 /, и вы должны увидеть следующую домашнюю страницу для сервера.
Теперь вы можете выключить сервер. Если вы запустили сервер с помощью команды run, вы можете использовать ctrl + c для выключения. Если вы запустили сервер как процесс-демон, то для выключения используйте следующую команду:
$ ./tcserver-ctl.sh stop Поздравляем! Вы успешно установили и протестировали tc Server за несколько коротких шагов.
Создание экземпляров tc Server Я решил использовать макет tc Server для экземпляров, поэтому нам нужно создавать их с помощью сценария tc Server.

1. Перейдите в каталог INSTALL_DIR / tcServer-6.0.

2. Запустите tcserver-instance.sh с необходимыми параметрами -s (имя сервера) и -v (версия сервера tc).

$ ./tcserver-instance.sh -s tcserver1 -v 6.0.20.B
3. Повторите шаг №2 еще два раза для имени сервера tcserver2 и tcserver3. Вы должны иметь структуру каталогов, подобную этой:
4. Проверяйте каждый экземпляр (tcserver1, tcserver2 и tcserver 3) по одному, чтобы убедиться, что они запускаются нормально. Поскольку все 3 экземпляра сейчас используют одни и те же порты, вам нужно тестировать по одному за раз.
Настройка кластеризации 1. Для каждого экземпляра tc Server (tcserver1, tcserver2 и tcserver3) добавьте следующий
дочерний элемент <Cluster> в
<Engine>

элемент в файле INSTALL_DIR / tcServer-6.0 / tcserver1 / conf / server.xml.

<?xml version='1.0' encoding='utf-8'?>
<Server port="-1" shutdown="SHUTDOWN">
...
<Service name="Catalina">
...
<Engine name="Catalina" defaultHost="localhost">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
...
</Engine>
</Service>
</Server>

2. Измените прослушивающие порты TCP / IP на каждом экземпляре tc Server, чтобы они были уникальными во избежание конфликтов портов. Это делается путем редактирования файла INSTALL_DIR / tcServer-6.0 / tcserver1 / conf / catalina.properties и изменения следующих портов, чтобы они были уникальными для каждого экземпляра сервера. Я просто увеличил порты http, jmx и ajp для tcserver2 и tcserver3.


http.port = 8080
jmx.port = 6969
ajp.port = 8009

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

Сборка и развертывание тестового веб-приложения

Что ж, мы могли бы просто остановиться прямо здесь, потому что теперь у вас есть работающий кластер, но я хотел бы проверить его, чтобы быть уверенным. Для этого вам нужно создать базовое веб-приложение, которое может читать и записывать объект HttpSession. Затем это приложение будет развернуто на каждом экземпляре tc Server для проверки кластера. Ниже приведены шаги с использованием Maven для создания простого веб-приложения с одной JSP.

1. Установите
Maven

2. Создайте каталог для веб-приложения.

3. Перейдите в каталог веб-приложения и выполните команду Maven:

mvn archetype: create -DgroupId = com.test -DartifactId = ct-web -DarchetypeArtifactId = maven-archetype-webapp

Эта команда создаст базовую структуру веб-приложения.

4. Отредактируйте файл PROJECT_DIR / ct-web / src / main / webapp / index.jsp. Замените содержимое index.jsp следующим:

<html>
<head>
<title> TC Server - Cluster Test Web Application</title>
</head>

<body>
<h2> TC Server - Cluster Test Web Application</h2>
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="35%" style="font-weight: bold;"> WEB-INF Real Path - application.getRealPath("WEB-INF"):</td>
<td width="65%"><%=application.getRealPath("WEB-INF")%></td>
</tr>
<tr bgcolor="#CCCCCC">
<td style="font-weight: bold;"> Session ID - session.getId() :</td>
<td><%=session.getId()%></td>
</tr>
<tr>
<td style="font-weight: bold;"> App Server Info - application.getServerInfo():</td>
<td><%=application.getServerInfo()%></td>
</tr>
</table>
</body>
</html>

Этот код будет отображать физический путь к каталогу WEB-INF из ServletContext, идентификатор HttpSession и информацию о сервере.

5. Отредактируйте файл PROJECT_DIR / ct-web / src / main / webapp / WEB-INF / web.xml. Добавьте в
дочерний элемент
<distribtable /> элемента
<web-app> .

<web-app>
<display-name>Archetype Created Web Application</display-name>

<distributable />

</web-app>

ПРИМЕЧАНИЕ. Эта конфигурация будет указывать, что приложение подходит для распределенной среды. Другой подход заключается в том, чтобы отредактировать INSTALL_DIR / tcServer-6.0 / tcserver1 / conf / context.xml и добавить в <Context distribtable = «true»> для одного или всех распространяемых веб-приложений.

6. Запустите следующую команду, чтобы создать и упаковать веб-приложение.

Пакет $ mvn 7. Теперь у вас должен быть файл ct-web / target / ct-web.war. Скопируйте файл WAR в каталог INSTALL_DIR / tcServer-6.0 / tcserver1 / webapps для каждого экземпляра.8. Запустите все экземпляры сервера. Тестирование кластера Чтобы протестировать кластер, просто откройте веб-браузер и создайте вкладки (или окна) для каждого из следующих адресов: http: // localhost: 8080 / ct-web /

http: // localhost: 8081 / ct-web / http: // localhost: 8082 / ct-web / Реальный путь WEB-INF должен указывать на правильный физический каталог каждого экземпляра сервера. Идентификатор сеанса должен быть одинаковым среди всех трех экземпляров, указывающих, что кластер работает Если бы он не работал, вы бы увидели разные идентификаторы сессии для каждой вкладки или окна. Чтобы доказать это просто: 1. Отключите все серверы tc. 2. Удалите файл ../webapps/ct-web.war и каталог ../webapps/ct-war из каждого экземпляра сервера tc. 3. Отредактируйте файл PROJECT_DIR / ct-web / src / main / webapp / WEB-INF / web.xml в приложении ct-web и удалите или закомментируйте элемент <distribtable /> . 4. Запустите $ mvn clean package

очистить старую сборку и упаковать новый файл ct-web.war.

5. Запустите все экземпляры сервера tc.

6. Скопируйте новый файл ct-web.war во все экземпляры сервера tc.

Теперь веб-приложение ct не настроено для кластеризации, и при повторном тестировании вы должны увидеть разные идентификаторы сеанса для каждого экземпляра сервера.

Теперь вы подтвердили свой полностью работающий (3) узел кластера серверов tc, который реплицирует данные сеанса. Следующим шагом будет размещение балансировщика нагрузки перед кластером, чтобы подготовить его к работе. Опять же, если вы имеете дело с большим количеством узлов tcServer, тогда может потребоваться более сложная конфигурация кластера .

С  http://soatechlab.blogspot.com