Как стать автором
Обновить

Построение HA систем на базе Jboss AS 6

Время на прочтение3 мин
Количество просмотров7.5K
Доброго времени суток, уважаемые хабровчане!
Прочитав этот топик, решил написать свой, так как по моему мнению автор не до конца раскрыл потенциал построение HA систем на Jboss(Tomcat), к тому же в статье есть много ошибок (не грамматических).
В этом топике я не буду приводить step-by-step по конфигурации узлов, лишь выборочно, где есть нюансы.

Откуда ноги растут


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

За входные данные было взято:
1. Зарегистрированных пользователей ИС — 9000000
2. Активных пользователей — 2000000
3. Ежедневно активных пользователей — 500000

В итоге получилась такая архитектура:



Для запуска проекта были заказаны 6 серверов в следующей конфигурации:
2x WEB: 16 core, 12 GB DDR
2x APP: 8 core, 32 GB DDR
2x DB: 8 core, 16 GB DDR

И так, на WEB сервера был установлен apache2+mod_jk
На APP сервера Jboss AS6, Java 6

В роли БД была взята Oracle 11R, но не думаю что в настройке datasource к другим БД есть большие отличия.

Настройка


И так, приступим к настройке:
WEB:
За основу конфиги можно взять в этом топике.

На обеих APP:
[user@app01 ~]$ echo "JBOSS_HOME=/opt/jboss" >> /home/user/.bash_profile
[user@app01 ~]$ export JBOSS_HOME="/opt/jboss"
[user@app01 ~]$ vim $JBOSS_HOME/server/default/deploy/jbossweb.sar/server.xml

Строку
<Engine name="jboss.web" defaultHost="localhost" 

приводим к следующему виду
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1">

Для APP2 соответственно node2.

Эта строка позволит нам использовать использовать липкие сессии в балансировке mod_jk.
jvmRoute=«node1» указывает mod_jk на какую из instance ему забрасывать запрос.

Далее заливаем наше приложение в $JBOSS_HOME/server/default/deploy/, стартуем Jboss и радуемся.

Наверное у многих возникнет вопрос

А зачем такие мощные сервера?


Отвечаю: данная схема позволяет нам расширять по горизонтали не только сервера, но и instances непосредственно на существующих серверах.
Для этого требуется скопировать каталог
[user@app01 ~]$ cp $JBOSS_HOME/server/default $JBOSS_HOME/server/node3
[user@app02 ~]$ cp $JBOSS_HOME/server/default $JBOSS_HOME/server/node4


Соответственно в каждом из server.xml указать необходимый jvmRoute

А на веб серверах добавить в workers.properties новые блоки для новых instance
В строкe worker.list добавляем новые instance
Добавляем новые блоки:
worker.node3.type=ajp13
worker.node3.host=ip_app1
worker.node3.port=8009
worker.node3.lbfactor=50
worker.node3.cachesize=10
worker.node3.cache_timeout=600
worker.node3.socket_keepalive=1
worker.node3.socket_timeout=300

worker.node4.type=ajp13
worker.node4.host=ip_app2
worker.node4.port=8009
worker.node4.lbfactor=50
worker.node4.cachesize=10
worker.node4.cache_timeout=600
worker.node4.socket_keepalive=1
worker.node4.socket_timeout=300



Собственно, уже при такой конфигурации вы готовые обслуживать довольно больше количество посетителей.

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

UPD: Не забываем, что БД имеет органиченое число коннектов, так что при добавлении новых инстансов, нужно учитывать эту тонкость, иначе на боевой среде можете получить лежащую БД.

Заключение



Топик не претендует на истинность, а лишь показывает в каком виде работает довольно крупный проект крупной организации, а так же какой кровью можно обслужить 10 000 000 потенциальных пользователей.

Теги:
Хабы:
Всего голосов 9: ↑7 и ↓2+5
Комментарии15

Публикации

Истории

Работа

Java разработчик
339 вакансий

Ближайшие события

19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн