Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Донецкий национальный университет.doc
Скачиваний:
8
Добавлен:
10.12.2018
Размер:
468.48 Кб
Скачать

Донецкий национальный университет

Кафедра компьютерных технологий

Отчет

по лабораторной работе №1

«Стандартные средства организации распределенных приложений»

Выполнила студентка

Вовченко М. 

Донецк 2011

Индивидуальное задание

Кластеризация сессий контейнера сервлетов Jetty с использованием Terracotta.

Необходимое ПО:

  1. J2SE 1.5 или старше

  2. Jetty 6.1.12 или старше

  3. Terracotta 2.6.4 или старше

  4. Jetty TIM (Terracotta Integration Module) v. 6.1-1.0.4

Также нужно скопировать jetty-terracotta-sessions-6.1.12.jar в папку $JETTY_HOME>/lib/ext/

Конфигурация файлов Jetty

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

Менеджер идентификаторов сессий Terracotta (TerracottaSessionIdManager)

Один менеджер конфигурируется для каждого экземпляра Jetty, для генерации уникальных идентификаторов сессий. Для его настройки нужно добавить следующие строки в файл $JETTY_HOME/etc/jetty-terracotta.xml:

<Configure id="Server" class="org.mortbay.jetty.Server">

<New id="tcIdManager" class="org.mortbay.terracotta.servlet.TerracottaSessionIdManager">

<Arg>

<Ref id="Server" />

</Arg>

<Set name="workerName">

<SystemProperty name="jetty.node" default="node1" />

</Set>

</New>

<Call name="setAttribute">

<Arg>tcIdManager</Arg>

<Arg>

<Ref id="tcIdManager" />

</Arg>

</Call>

</Configure>

Менеджер идентификаторов сохраняется как атрибут в экземпляре сервера для дальнейшего поиска под именем tcIdManager. workerName это уникальное имя для нода Jetty. В примере это имя – node1.

Менеджер сессий Terracotta (TerracottaSessionManager)

Каждое веб-приложение, чьи сессии нужно кластеризовать, должно использовать TerracottaSessionManager вместо HashSessionManager, используемого по умолчанию. Для этого нужно добавить в файл конфигурации развертывания приложения следующие строки:

<Configure class="org.mortbay.jetty.webapp.WebAppContext">

...

<Property name="Server" id="Server">

<Call id="tcIdManager" name="getAttribute">

<Arg>tcIdManager</Arg>

</Call>

</Property>

<Set name="sessionHandler">

<New class="org.mortbay.terracotta.servlet.TerracottaSessionHandler">

<Arg>

<New class="org.mortbay.terracotta.servlet.TerracottaSessionManager">

<Set name="idManager">

<Ref id="tcIdManager" />

</Set>

</New>

</Arg>

</New>

</Set>

...

</Configure>

Эти строки обеспечивают установку TerracottaSessionManager для каждого веб-приложения и что этот менеджер имеет доступ к уникальному TerracottaSessionIdManager экземпляру Jetty, сконфигурированному выше.

Примечание: также для каждого экземпляра Jetty нужно создать свой конфигурационный файл jetty.xml, в котором нужно указать уникальный порт сервера.

Конфигурация файлов Terracotta

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

Базовый файл конфигурации Terracotta выглядит так:

<?xml version="1.0" encoding="UTF-8"?>

<tc:tc-config xmlns:tc="http://www.terracotta.org/config"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.terracotta.org/config http://www.terracotta.org/schema/terracotta-4.xsd">

<servers>

<server host="localhost">

<data>%(user.dir)/terracotta/server-data</data>

<logs>%(user.dir)/terracotta/server-logs</logs>

</server>

</servers>

<clients>

<modules>

<module name="tim-jetty-6.1" version="1.0.4" />

</modules>

<logs>%(user.dir)/terracotta/client-logs</logs>

</clients>

<application>

<dso>

<instrumented-classes>

<include>

<class-expression>...</class-expression>

</include>

</instrumented-classes>

</dso>

</application>

</tc:tc-config>

Файл конфигурации можно создать в любом месте на диске. Он подключается на этапе запуска экземпляра Jetty.

Также можно задать местоположение сервера Terracotta (по умолчанию localhost) при помощи атрибута host элемента server.

Если приложение использует пользовательские классы, их необходимо описать в секции application. Пример использования пользовательского класса com.acme.domain.User:

<tc:tc-config ...>

...

<application>

<dso>

<instrumented-classes>

<include>

<class-expression>com.acme.domain.User</class-expression>

</include>

</instrumented-classes>

</dso>

</application>

...

</tc:tc-config>

Запуск Jetty и Terracotta

Сначала запускаем сервер Terracotta:

$TC_HOME/bin/start-tc-server.bat

Затем запускаем экземпляры Jetty

cd $JETTY_HOME

$TERRACOTTA_HOME/bin/dso-java.bat –Dtc.config=tc-config.xml –jar start.jar etc/jetty.xml etc/jetty-terracotta.xml

Таким образом, мы решили проблему сохранения сессии на случай «падения» одного или нескольких серверов Jetty или же при перенаправлении пользователя на другой сервер кластера. Однако осталась проблема балансировки нагрузки. Мы не можем управлять перенаправлением пользователей на сервера в зависимости от их загруженности. Каждый сервер Jetty привязан к своему адресу, так что пользователю приходится явно указывать адрес конкретного экземпляра сервера в адресной строке браузера. Для решения этой проблемы необходимо воспользоваться специализированным ПО – балансировщиком, т.к. ни в Jetty ни в Terracotta нет готового решения этой проблемы.