Настройка кластера Apache Tomcat на 3 узлах

Коротко о задаче
Этот материал подходит для инженеров DevOps и администраторов, которые хотят организовать отказоустойчивый кластер Tomcat с репликацией сессий между узлами. В примере используется 3 узла на Ubuntu 18.04 (EC2 или локальные ВМ). Кластер обеспечивает репликацию HTTP-сессий и упрощённое развёртывание WAR через FarmWarDeployer.
Важно: кластер по умолчанию использует мультикаст (Mcast). Во многих облачных окружениях (AWS) мультикаст недоступен — см. раздел «Альтернативы и ограничения».
Детали примера (исходные данные)
- Node1: каталог = /root/tomcat1, IP = 172.31.35.11
- Node2: каталог = /root/tomcat2, IP = 172.31.39.120
- Node3: каталог = /root/tomcat3, IP = 172.31.32.185
Что будем делать
- Скачиваем Apache Tomcat
- Устанавливаем OpenJDK 8
- Конфигурируем кластер (conf/server.xml)
- Запускаем и проверяем сервис, смотрим логи
Предварительные условия
- Три сервера (EC2 или ВМ) с Ubuntu 18.04 LTS
- root-доступ или sudo
- Доступ по сети между узлами (порты 5000, 45564 и 8080 — можно изменить)
Шаг 1 — Загрузка Apache Tomcat
Переключитесь на root, чтобы избежать проблем с правами (в боевом окружении используйте пользователя с минимальными правами и systemd unit).
sudo -i
mkdir tomcat1 # на Node2 mkdir tomcat2, на Node3 mkdir tomcat3
cd tomcat1/ # на Node2 cd tomcat2/, на Node3 cd tomcat3/Скачиваем и распаковываем Tomcat 9 (пример с apache-tomcat-9.0.0.M17, можно выбрать стабильную версию):
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.0.M17/bin/apache-tomcat-9.0.0.M17.tar.gz
tar -zxvf apache-tomcat-9.0.0.M17.tar.gz
Шаг 2 — Установка Java 8
Tomcat 9 может работать с Java 8 и новее, в примере используем OpenJDK 8.
# на каждом узле
sudo apt-get update
sudo apt install openjdk-8-jdk -y
java --version
Примечание: в производстве рассмотрите использование Oracle JDK/Corretto или OpenJDK из официальных репозиториев с долгосрочной поддержкой.
Шаг 3 — Конфигурация Apache Tomcat для кластера
Сначала сделайте резервную копию server.xml:
cd apache-tomcat-9.0.0.M17/
cp conf/server.xml conf/server.xml.bak
Откройте conf/server.xml и выполните изменения. Найдите строки с localhost и замените имя хоста на IP узла (или на корректное имя хоста в вашей сети):
...
замените name=”localhost” на name=”172.31.35.11” и аналогично на других узлах.
Найдите закомментированный блок кластера и добавьте или раскомментируйте следующий фрагмент, подставив IP-адрес данного узла в параметр Receiver@address:
Замените IP-Of-Node на IP каждого узла (172.31.35.11, 172.31.39.120 и 172.31.32.185 соответственно).

Краткие пояснения ключевых компонентов:
- DeltaManager — репликация только изменённых данных сессии (эффективнее при больших сессиях).
- GroupChannel + McastService — обнаружение участников и передача сообщений (мультикаст).
- ReplicationValve — перехватывает запросы и реплицирует изменения сессии.
- FarmWarDeployer — упрощённое развёртывание WAR на всех узлах.
Важно: если используете балансировщик нагрузки с режимом sticky sessions, можно не включать репликацию сессий.
Шаг 4 — Запуск, проверка и логи
Запуск Tomcat:
# на каждом узле
bin/startup.sh
netstat -tulpn | grep 8080Проверка логов (в режиме реального времени):
tail -100f logs/catalina.outОстановка:
bin/shutdown.sh
Проверка корректности работы кластера
- На одном узле разверните приложение и создайте сессию (например, авторизация в веб-приложении).
- На другом узле убедитесь, что та же сессия доступна (без повторного логина) — это индикатор репликации.
- В логах Cataline должна появиться информация о присоединении узлов и репликации сессий.
Отладка и типовые проблемы
- Нету связи между узлами: проверьте firewall/iptables и security group (порты 5000 и 45564).
- Мультикаст недоступен в облаке: в AWS мультикаст обычно заблокирован — используйте Unicast (когда доступно) или настройте виртуальную сеть/overlay.
- Различные версии Tomcat/Java на узлах: убедитесь, что версии совместимы.
- Конфигурация appBase и host name: ошибки в имени host мешают правильной репликации и деплою.
Полезные команды для диагностики:
ps aux | grep tomcat
ss -tunlp | grep 5000
grep -i cluster logs/catalina.outРекомендации по безопасности
- Не запускать Tomcat от root в проде; создайте отдельного системного пользователя и unit-файл systemd.
- Откройте только необходимые порты (8080, 5000, 45564) и ограничьте доступ по IP.
- Включите TLS на фронтальном балансировщике (написать сертификаты на load balancer, не на каждом Tomcat).
- Регулярно обновляйте Java и Tomcat до поддерживаемых версий.
Альтернативы и ограничения
- Sticky sessions + балансировщик (NGINX, HAProxy) — проще, но не обеспечивает failover сессий при падении узла.
- Внешнее хранилище сессий (Redis, Memcached) — надёжнее и масштабируется лучше, особенно в облаке.
- Использование Unicast вместо мультикаста — помогает в средах, где мультикаст недоступен.
Когда кластер Tomcat не подходит:
- Очень большие объёмы сессий (используйте Redis).
- Облачные сети без поддержки мультикаста и без возможности настройки overlay.
Критерии приёмки
- Все три узла взаимодействуют и обнаруживают друг друга в логах.
- Репликация сессии работает: пользовательская сессия доступна при переключении на другой узел.
- Развёрнутые WAR появляются на всех узлах (если используется FarmWarDeployer).
- Сервис корректно стартует/останавливается без ошибок в catalina.out.
Контрольный список для ролей
Администратор:
- Проверить сетевую доступность портов
- Настроить пользователей и права
- Настроить systemd unit и логирование
Разработчик:
- Тестировать поведение сессий в кластере
- Проверить совместимость библиотек с DeltaManager
DevOps:
- Настроить CI/CD, деплой WAR через FarmWarDeployer или внешний pipeline
- Настроить мониторинг (CPU, память, GC, доступность)
Мини-методология развертывания (быстрая инструкция)
- Подготовить три VM/EC2 с Ubuntu 18.04 и открыть порты.
- Установить Java 8 на всех узлах.
- Скачать и распаковать Tomcat на каждом узле.
- Скорректировать conf/server.xml (IP каждого узла).
- Запустить Tomcat и проверить логи и сетевые подключения.
- Тестировать сессии и деплой приложений.
Миграционные и совместимые заметки
- Tomcat 9 совместим с Java 8+. При переходе на Tomcat 10 требуется проверить API и зависимости (серверные спецификации могут отличаться).
- Ubuntu 18.04: репозитории поддерживают OpenJDK 8, но для длительной поддержки рассмотрите обновление ОС.
Простая диаграмма принятия решения
flowchart TD
A[Нужно реплицировать сессии?] -->|Нет| B[Использовать sticky sessions на LB]
A -->|Да| C[Доступен мультикаст в сети?]
C -->|Да| D[Использовать SimpleTcpCluster 'мультикаст']
C -->|Нет| E[Использовать Unicast/Redis или внешний store]Заключение
Мы рассмотрели последовательность действий для развёртывания кластера Apache Tomcat на трёх узлах: подготовка окружения, установка Java 8, настройка conf/server.xml с SimpleTcpCluster, запуск и проверка. Для продакшена рекомендую отказаться от запуска от root, настроить systemd unit, ограничить сетевой доступ и рассмотреть внешнее хранилище сессий при работе в облаке.
Ключевые источники для дальнейшего чтения: официальная документация Apache Tomcat по кластеризации и менеджерам сессий.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента