Статьи

JBoss Data Grid: установка и разработка

В этом блоге мы обсудим одну конкретную платформу сетки данных от Redhat, а именно JBoss Data Grid (JDG). Сначала мы рассмотрим, как получить доступ к этой платформе сетки данных и установить ее, а затем продемонстрируем, как разработать и развернуть простое приложение сетки данных клиента / сервера, использующее протокол HotRod. В этой статье мы будем использовать последний выпуск JDG 6.2 от Redhat.

Обзор установки

Чтобы начать использовать JDG, сначала войдите на сайт redhat  https://access.redhat.com/home  и загрузите программное обеспечение из раздела «Загрузки» сайта. Мы хотим загрузить сервер JDG 6.2, нажав на соответствующие ссылки в разделе «Загрузки». Для дальнейшего использования также полезно загрузить ZIP-файлы быстрого запуска и репозитория maven. Чтобы установить JDG, мы просто разархивируем пакет сервера JDG в соответствующий каталог в вашей среде.

JDG Обзор

В этом разделе мы предоставим краткий обзор содержимого установочного пакета JDG и наиболее заметных опций конфигурации, доступных пользователям. Из коробки пользователям предоставляется два варианта времени выполнения: JDG в автономном или кластерном режиме. Мы можем запустить JDG в любом режиме, вызвав stanadalone или кластерные сценарии запуска в каталоге <JDG_HOME> / bin. Чтобы настроить JDG в любом режиме, нам нужно настроить файлы standalone.xml и clustertered.xml. В нашем случае мы создадим распределенный кеш, который будет работать на кластере JDG с 3 узлами, поэтому мы будем использовать кластерный скрипт запуска.

Чтобы настроить и добавить новые экземпляры кэша в JDG, мы изменим подсистемы infinispan в соответствующем файле конфигурации xml выше. Следует также отметить, что принципиальное различие между автономным и кластеризованным файлом конфигурации заключается в том, что в кластерном файле конфигурации есть настроенный элемент подсистемы JGroups, который обеспечивает связь и обмен сообщениями между настроенными экземплярами кэша, работающими в кластере JDG.

Настройка и настройка среды разработки

В этом разделе мы подробно расскажем, как разработать и настроить простое приложение для сетки данных, которое будет развернуто в кластере JDG из 3 узлов. Мы покажем, как настроить и развернуть распределенный кеш в JDG, а также покажем, как разработать клиентское приложение HotRod Java, которое будет использоваться для вставки, обновления и отображения записей в распределенном кеше. Сначала мы обсудим установку нового распределенного кэша в кластере JDG из 3 узлов. В этом примере мы запустим наш кластер JDG на одной машине, запустив каждый экземпляр JDG на разных портах.

Во-первых, мы создадим 3 экземпляра JDG, создав на нашем хосте 3 каталога (server1, server2, server3) и разархивировав каждую установку JDG в каждый каталог.

Теперь мы настроим каждый узел в нашем кластере, скопировав и переименовав файл конфигурации clustered.xml в каталоге <JDG_HOME> \ server1 \ jboss-datagrid-6.2.0-server \ standalone \ configuration. Мы будем называть каждый из файлов конфигурации кластера как «clustertered1.xml», «clustered2.xml» и «clustered3.xml» для экземпляров JDG, обозначенных как «server1», «server2» и «server3» соответственно. Теперь мы настроим новый распределенный кеш в нашем кластере JDG, изменив элемент подсистемы infinispan в каждом кластерном файле <n> .xml. Мы продемонстрируем это для узла, обозначенного здесь как «server1», изменив файл «clustertered.xml». Показанная здесь конфигурация кэша будет одинаковой для всех 3 узлов.

Чтобы настроить новый распределенный кэш с именем «directory-dist-cache», мы настраиваем следующие элементы в файле с именем «clustertered1.xml»

<subsystem xmlns="urn:infinispan:server:endpoint:6.0">
        <hotrod-connector socket-binding="hotrod"  cache-container="clusteredcache">
         <topology-state-transfer lazy-retrieval="false" lock-timeout="1000" replication-timeout="5000"/>
        </hotrod-connector>
        .........
      <subsystem xmlns="urn:infinispan:server:core:6.0" default-cache-container="clusteredcache">
                   <cache-container name="clusteredcache" default-cache="default" statistics="true">
                       <transport executor="infinispan-transport" lock-timeout="60000"/>
                    ......
               <distributed-cache name="directory-dist-cache" mode="SYNC" owners="2" remote-                   timeout="30000" start="EAGER">
              <locking isolation="READ_COMMITTED" acquire-timeout="30000" striping="false"/>
              <eviction strategy="LRU" max-entries="20" />
              <transaction mode="NONE"/>
              </distributed-cache>
             ..............
  </cache-container>
     

</subsystem>

 <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
......
<socket-binding name="hotrod" interface="management" port="11222"/>
......
/socket-binding-group>

</server>

Мы обсудим ключевые элементы и атрибуты, относящиеся к конфигурации выше.

  • В подсистеме конечных точек infinispan мы настроим клиентов hotrod для подключения к экземпляру сервера JDG в сокете 11222. 
  • Имя контейнера кэша для размещения каждого из экземпляров кэша будет храниться в контейнере с именем «clusterteredcache».
  • Мы настроили подсистему ядра Infispan к контейнеру кэша по умолчанию, названному «clusterteredcacahe», посредством чего мы позволим собирать статистику jmx, относящуюся к сконфигурированным записям кэша, то есть statistics = «true».
  • Мы создали новый распределенный кеш под названием «directory-dist-cache», в котором будет две копии каждой записи в кеше, хранящейся на двух из 3 узлов кластера. 
  • Мы также установили политику исключения, согласно которой в нашем кеше должно быть более 20 записей, после чего записи будут удалены с использованием алгоритма LRU.
  • Мы должны сконфигурировать узлы «server2» и «server3» для запуска со смещением портов 100 и 200 соответственно, настроив соответствующий элемент группы связывания сокетов. Пожалуйста, просмотрите привязки сокетов, указанные ниже.

Чтобы установить элемент привязки сокета со смещением порта 100 на «server2», мы настраиваем «clustertered2.xml» со ​​следующей записью:

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:100}">
......
<socket-binding name="hotrod" interface="management" port="11222"/>
......
/socket-binding-group>

Чтобы установить элемент привязки сокета со смещением порта 200 на «server3», мы настраиваем «clustertered3.xml» со ​​следующей записью:
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:200}">
......
<socket-binding name="hotrod" interface="management" port="11222"/>
......
/socket-binding-group>

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

Откройте 3 консоли Windows или Linux и выполните следующие команды запуска:

Консоль 1:

1) Перейдите в <JDG_HOME> \ server1 \ jboss-datagrid-6.2.0-server \ bin

2) Выполните эту команду, чтобы запустить первый экземпляр наш JDG-кластер, обозначенный как «server1»: clustered -c = clustertered1.xml -Djboss.node.name = server1

Консоль 2:

1) Перейдите в <JDG_HOME> \ server2 \ jboss-datagrid-6.2.0-server \ bin

2) Выполните эту команду, чтобы запустить второй экземпляр нашего кластера JDG, обозначенного как «server2»: clustered -c = clustertered2.xml -Djboss.node.name = server2

Консоль 3:

1) Перейдите в <JDG_HOME> \ server3 \ jboss-datagrid -6.2.0-server \ bin

2) Выполните эту команду, чтобы запустить третий экземпляр нашего кластера JDG, обозначенный как «server3»: cluster -c = clustertered3.xml -Djboss.node.name = server3.

При условии, что все 3 экземпляра JDG запущены правильно, вы должны увидеть вывод в окне консоли, в результате чего мы увидим, что в представлении JGroups есть 3 экземпляра JDG:

Настройка разработки HotRod Client

Теперь, когда сервер Hotrod запущен и работает, нам нужно разработать Java-клиент Hotrod, который будет взаимодействовать с приложением кластерного сервера. Среда разработки состоит из следующих инструментов.

1) JDK Hotspot 1.7.0_45
2) IDE — Eclipse Kepler Build id:

20130919-0819 Клиентское приложение HotRod — это простое приложение, состоящее из двух классов Java. Приложение позволяет пользователям получать ссылку на распределенный кеш с сервера JDG, а затем выполнять следующие действия:

а) добавлять новые объекты кино.
б) добавлять и удалять шоу для каждого объекта кино.
в) распечатать список всех кинотеатров и шоу, хранящихся в нашем распределенном кэше.

Исходный код можно скачать с github @  https://github.com/davewinters/JDG, Мы могли бы использовать maven здесь, чтобы создать и выполнить наше приложение, настроив maven settings.xml так,  чтобы он указывал на файлы репозитория maven, которые мы загрузили ранее, и настроил файл проекта maven (pom.xml) для сборки и выполнения клиентского приложения.

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

1) Создать новый проект Java в Eclipse
2) Создать новый пакет с именем uk.co.c2b2.jdg.hotrod и импортировать исходный код, который был загружен с Github, упомянутого ранее.
3) Теперь нам нужно настроить путь сборки в Eclipse, чтобы он содержал соответствующие jar-файлы JDG-клиента, необходимые для компиляции приложения. Вы должны включить все клиентские jar-файлы в путь сборки проекта. Эти jar-файлы содержатся в установочном zip-файле JDG. Например, на моем компьютере эти jar-файлы находятся в каталоге: <JDG_HOME> \ server1 \ jboss-datagrid-6.2.0-server \ client \ hotrod \ java
4. При условии правильной настройки пути сборки Eclipse, источник приложения должен компилироваться без проблем.
5. Нам нужно будет выполнить приложение Hotrod, открыв окно консоли и выполнив следующую команду. Обратите внимание, что указанный здесь путь будет отличаться в зависимости от того, где в вашей среде находятся файлы JAR-клиентов JDG и файлы классов приложений:

java -classpath ".;C:\Users\David\Installs\jbossdatagrids62\server1\jboss-datagrid-6.2.0-server\client\hotrod\java\commons-pool-1.6-redhat-4.jar;C:\Users\David\Installs\jbossdatagrids62\server1\jboss-datagrid-6.2.0-server\client\hotrod\java\infinispan-client-hotrod-6.0.1.Final-redhat-2.jar;C:\Users\David\Installs\jbossdatagrids62\server1\jboss-datagrid-6.2.0-server\client\hotrod\java\infinispan-commons-6.0.1.Final-redhat-2.jar;C:\Users\David\Installs\jbossdatagrids62\server1\jboss-datagrid-6.2.0-server\client\hotrod\java\infinispan-query-dsl-6.0.1.Final-redhat-2.jar;C:\Users\David\Installs\jbossdatagrids62\server1\jboss-datagrid-6.2.0-server\client\hotrod\java\infinispan-remote-query-client-6.0.1.Final-redhat-2.jar;C:\Users\David\Installs\jbossdatagrids62\server1\jboss-datagrid-6.2.0-server\client\hotrod\java\jboss-logging-3.1.2.GA-redhat-1.jar;C:\Users\David\Installs\jbossdatagrids62\server1\jboss-datagrid-6.2.0-server\client\hotrod\java\jboss-marshalling-1.4.2.Final-redhat-2.jar;C:\Users\David\Installs\jbossdatagrids62\server1\jboss-datagrid-6.2.0-server\client\hotrod\java\jboss-marshalling-river-1.4.2.Final-redhat-2.jar;C:\Users\David\Installs\jbossdatagrids62\server1\jboss-datagrid-6.2.0-server\client\hotrod\java\protobuf-java-2.5.0.jar;C:\Users\David\Installs\jbossdatagrids62\server1\jboss-datagrid-6.2.0-server\client\hotrod\java\protostream-1.0.0.CR1-redhat-1.jar" uk/co/c2b2/jdg/hotrod/CinemaDirectory

6. The Hotrod client at runtime provides the end user with a number of different options to interact with the distributed cache as we can view from the console window below.

Client Application Principal API Details

We will not provide a detailed overview of the Hotrod application code however we will describe the principal API and code details briefly.

In order to interact with the distributed cache on the JDG cluster using the Hotrod protocol, we will use the RemoteCacheManager Object which will allow us to retrieve a remote reference to the distributed cache. We have initialised a Properties object with the list of JDG instances and the associated with HotRod server port on each instance. We can add Cinema objects into the distributed cache using the RemoteCache.put() method.

private RemoteCacheManager cacheManager;
 private RemoteCache<String, Object> cache;
.....
Properties properties = new Properties();
 properties.setProperty(ConfigurationProperties.SERVER_LIST, "127.0.0.1:11222;127.0.0.1:11322;127.0.0.1:11422");
cacheManager = new RemoteCacheManager(properties);
cache = cacheManager.getCache("directory-dist-cache");
.....
cache.put(cinemaKey, cinemalist);

In the webinar below, I describe in further detail how to set up a JDG cluster and how to develop and run the JDG application discussed above. For further details on JDG please visit: http://www.redhat.com/products/jbossenterprisemiddleware/data-grid/

Webinar: Introduction to JBoss Data Grid — Installation, Configuration and Development

In this webinar we will look at the basics of setting up JBoss Data Grid covering installation, configuration and development. We will look at practical examples of storing data, viewing the data in the cache and removing it. We will also take a look at the different clustered modes and what effect these have on the storage of your data: