На прошедшей на прошлой неделе конференции JavaDay 2012 я рассказывал о развёртывании Liferay Portal в кластерном окружении на базе сервера приложений GlassFish и СУБД PostgreSQL. В связи с интересом к теме, в этой заметке я привожу пошаговую инструкцию по созданию кластера в GlassFish 3.1.1, которой можно воспользоваться при создании такого окружения. Инструкция является вольным переводом статьи Sven Hafner, которой я пользовался при подготовке к докладу.
Постановка задачи
Наш кластер будет развёрнут на двух физических машинах - node1 и node2. Domain Administration Server (DAS), в идеале, надо было бы вынести на третью машину, но мы, с целью упрощения описания, этого делать не будем, и оставим его на node1. В итоге, архитектура нашего кластера примет следующий вид:

Предусловия
- Две машины с UNIX-like OS.
- Открытый доступ по SSH.
- Установленная JDK 1.6 (!). GlassFish 3.1.1 не может нормально работать с включённой опцией Secure Admin на JDK 1.7.
Установка и конфигурация Glassfish
1. Качаем GlassFish 3.1.1 отсюда.
2. Копируем архив на обе машины и распаковываем его (например, по стандартному пути установки GlassFish - в каталог /opt):
[root@node1 /opt]$ unzip glassfish-3.1.1.zip
3. Удаляем дефолтный домен (на обеих нодах):
[root@node1 /opt/glassfish3/bin]$ ./asadmin delete-domain domain1
Domain domain1 deleted.
Command delete-domain executed successfully.
4. Создаём новый домен (на первой ноде, на второй пока что ничего делать не надо):
[root@node1 ~]$ /opt/glassfish3/bin/asadmin create-domain \
--user admin --adminport 4848 --instanceport 8080 \
--checkports=false myDomain
Во время создания домена говорим глассфишу пароль. Введённый пароль запоминаем / записываем.
(Опционально) 5. Сохраняем пароль в файле (чтобы оно не спрашивало его при каждом стартапе домена):
[root@node1 ~]$ vi domains/myDomain/config/password.txt
...
6. Запускаем домен:
[root@node1 ~]$ /opt/glassfish3/bin/asadmin \
--user admin --passwordfile \
/opt/glassfish3/glassfish/domains/myDomain/config/password.txt \
start-domain myDomain
7. Активируем для домена режим Secure Admin (без этого мы не сможем стартовать инстанс на второй машине через ssh):
[root@node1 ~]$ /opt/glassfish3/bin/asadmin enable-secure-admin
После этого рестартуем домен.
8. Логинимся в админке созданного домена. Создаём кластер:

Все параметры кластера оставляем в значениях по-умолчанию:

9. Создаём инстанс на первой машине:

При создании первого инстанса все параметры тоже оставляем в значениях по-умолчанию:

10. Создаём ноду на второй машине:

В качестве типа ноды выбираем "SSH", указываем hostname второй машины и путь в файловой системе к каталогу с нодами глассфиша:

Редактируем параметры доступа по SSH - задаём логин пользователя, выбираем способ аутентификации с помощью пароля и задаём этот пароль:

11. Создаём инстанс на второй машине (при его создании выбираем созданную на предыдущем шаге ноду):

12. Стартуем кластер и проверяем, запустились ли инстансы на обеих машинах:

Готово! Теперь нужно сконфигурировать проксирование доступа к инстансам нашего кластера через какой-нибудь веб-сервер (например, apache или nginx), но это уже тема для отдельной статьи :)
Дополнительные материалы
- Статья Sven Hafner по кластеризации GlassFish 3.1.
- Презентация c моего доклада на конференции JavaDay 2012.