Вот несколько способов настройки кластера JIRA с использованием Apache httpd-сервера в качестве обратного прокси-сервера и балансировки нагрузки. Также см. Интеграция JIRA с Apache для более общего обсуждения использования JIRA с Apache.
Существует множество решений по балансировке нагрузки и прокси-серверов, которые могут удовлетворить ваши конкретные потребности, а также лучше, чем Apache httpd.
Существует две опции:
- Каждый узел на отдельной машине (более производственный)
- Конфигурация одного хоста (проще настроить и использовать для локального тестирования)
Руководство высокого уровня
-
Установите и настройте последнюю JIRA как обычно, т.е. без конкретных параметров, указанных ниже.
- Запустите этот экземпляр и загрузите его с помощью данных плана тестирования JIRA.
- Выключите этот экземпляр.
База данных HSQL по умолчанию не будет работать с кластером JIRA.
- Установите второй узел, не запуская его.
-
Задайте настройки кластера в обоих случаях, как указано ниже:
- Укажите одну и ту же базу данных (файлы dbconfig.xml на каждом из них, вероятно, должны быть одинаковыми) и пустой общий дом.
- Создайте файл cluster.properties для каждого узла
- Скопируйте следующие каталоги из локального дома первого узла в общий дом (некоторые могут быть пустыми):
- данные
- плагины
- логотипы
- импорт
- экспорт
- Запустите уже настроенный экземпляр.
- Установите ваш плагин и при необходимости добавьте лицензию.
- Запустите второй экземпляр. Он присоединится к БД, а затем заполнит свой местный дом и присоединится к общему дому. Затем он также скопирует ваш плагин.
Для общего релиза кластеров мы стремимся иметь возможность добавлять / обновлять плагин в реальном кластере. Это все еще не доступно для плагинов, для которых требуются задачи (tasks) обновления.
Каждый узел на отдельной машине
Каждый узел JIRA (два в этом примере) работает на своей собственной машине (физической или виртуальной) с третьей машиной для общих служб. В производстве общие службы, скорее всего, будут работать на разных машинах друг от друга.
РИСУНОК
Настройка JIRA
- На третьей машине настройте общий домашний каталог, доступный для записи на обоих серверах.
- Настройте два сервера JIRA на разных машинах. Эти серверы должны:
- Имейте cluster.properties в локальном домашнем каталоге JIRA (см. пример ниже).
- Быть настроены на использование одного и того же пути контекста.
- Быть настроены на использование одной и той же базы данных.
- Файлы dbconfig.xml на каждом из них, вероятно, должны быть одинаковыми.
Установите их имя узла Apache, добавив следующий параметр к той же переменной (заменив node1 на имя узла, используемое в конфигурации балансировки нагрузки Apache):
- -DjvmRoute=node1
- Убедитесь, что базовый URL-адрес, настроенный в JIRA, является URL-адресом программ пользовательского интерфейса прокси-сервера / балансировки нагрузки.
Пример файла cluster.properties
# This unique ID must match the username and the BalancerMember entry in the Apache config
jira.node.id = node1
# The location of the shared home directory for all JIRA nodes
jira.shared.home = /net/mynfsserver/jira_shared_home
Конфигурация httpd (без контекстного пути)
Нам нужно настроить httpd аналогично стандартным обратным прокси, но с добавлением конфигурации mod_proxy_balancer.
Чтобы запустить JIRA на http: // MyCompanyServer /, добавьте блок конфигурации, подобный этому в конце http.conf.
<VirtualHost *:80>
ProxyRequests off
ServerName MyCompanyServer
<Proxy balancer://jiracluster>
# JIRA node 1
BalancerMember http://jira1.internal.atlassian.com:8080 route=node1
# JIRA node 2
BalancerMember http://jira2.internal.atlassian.com:8080 route=node2
# Security "we aren't blocking anyone but this the place to make those changes
Order Deny,Allow
Deny from none
Allow from all
# Load Balancer Settings
# We are not really balancing anything in this setup, but need to configure this
ProxySet lbmethod=byrequests
ProxySet stickysession=JSESSIONID
</Proxy>
# Here's how to enable the load balancer's management UI if desired
<Location /balancer-manager>
SetHandler balancer-manager
# You SHOULD CHANGE THIS to only allow trusted ips to use the manager
Order deny,allow
Allow from all
</Location>
# Don't reverse-proxy requests to the management UI
ProxyPass /balancer-manager !
# Reverse proxy all other requests to the JIRA cluster
ProxyPass / balancer://jiracluster/
ProxyPreserveHost on
</VirtualHost>
Конфигурация httpd (с путем контекста)
Некоторые незначительные изменения в вышеуказанной конфигурации необходимы, если JIRA развернуто в пути контекста. Чтобы запустить JIRA в http: // MyCompanyServer / jira /, добавьте блок конфигурации, подобный этому в конце http.conf.
<VirtualHost *:80>
ProxyRequests off
ServerName MyCompanyServer
<Proxy balancer://jiracluster>
# JIRA node 1
BalancerMember http://jira1.internal.atlassian.com:8080/jira route=node1
# JIRA node 2
BalancerMember http://jira2.internal.atlassian.com:8080/jira route=node2
# Security "we aren't blocking anyone but this the place to make those changes
Order Deny,Allow
Deny from none
Allow from all
# Load Balancer Settings
# We are not really balancing anything in this setup, but need to configure this
ProxySet lbmethod=byrequests
ProxySet stickysession=JSESSIONID
</Proxy>
# Here's how to enable the load balancer's management UI if desired
<Location /balancer-manager>
SetHandler balancer-manager
# You SHOULD CHANGE THIS to only allow trusted ips to use the manager
Order deny,allow
Allow from all
</Location>
# Immediately redirect /jira to /jira/ and don't pass it to the load balancer.
RedirectMatch ^/jira$ /jira/
ProxyPassMatch ^/jira$ !
# Don't reverse-proxy requests to the management UI
ProxyPass /balancer-manager !
# Reverse proxy all other requests to the JIRA cluster
ProxyPass /jira balancer://jiracluster
ProxyPreserveHost on
</VirtualHost>
Конфигурация одного хоста
В целях разработки весь кластер может быть запущен на одной машине.
Конфигурация выполняется, как указано выше, со следующими изменениями:
- Каждый узел JIRA должен работать на разных портах.
- Ehcache должен быть настроен для использования разных настроек; отредактируйте файл cluster.properties и добавьте «hostName» и «port» следующим образом:
Пример настроек EhCache для узла 1
ehcache.listener.hostName=localhost
ehcache.listener.port=40001
Пример настроек EhCache для узла 2
ehcache.listener.hostName=localhost
ehcache.listener.port=40002
Решение проблем
Валидация того что кеши реплицированы корректно по кластеру.
Чтобы протестировать правильность репликации кэшей между двумя узлами в кластере.
-
Войдите в один узел кластера. Переход непосредственно к узлу проще всего, минуя любой балансировщик нагрузки.
- Перейдите в «Администрирование / Типы задач» и измените имя типа задачи
- Войдите в другой узел (узлы) в кластере
- Перейдите в «Администрирование / Типы задач» и убедитесь, что отредактированное имя с шага-b отображается правильно.
Если новое значение не видно на других узлах, тогда, кластер не общается должным образом.
- Возможно, вам придется отключить брандмауэр или, по крайней мере, разрешить прохождение портов, настроенных выше. Некоторые системы, особенно более поздние версии Linux, блокируют их даже во внутренней локальной сети.
- Вам необходимо обеспечить поддержку многоадресной рассылки. Для Linux вам может понадобиться включить его. Многоадресная рассылка часто не включена для локального хоста.
# ifconfig lo multicast
# ifconfig lo
lo: flags=4169<UP,LOOPBACK,RUNNING,MULTICAST> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 4974487 bytes 3608495877 (3.3 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4974487 bytes 3608495877 (3.3 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- Каждый сервер должен иметь возможность правильно разрешать собственное имя хоста. Это не так очевидно, как кажется, и ошибки здесь могут быть трудными для обнаружения
Некоторые дистрибутивы Linux добавят записи в / etc / hosts, такие как
127.0.0.1 localhost.localdomain localhost
127.0.1.1 myhost.mycompany.com myhost
Это может привести к тому, что ehcache объявит себя другим узлам в кластере, находящимся в 127.0.1.1. Это не поможет и приведет к несогласованности кеша в кластере. Вы можете установить уровень ведения журнала на ehcache в log4j.properties для отслеживания, чтобы попытаться диагностировать такую ошибку.
log4j.logger.net.sf.ehcache.distribution = TRACE, console, filelog
Попробуйте удалить строку, ссылающуюся на 127.0.1.1, из / etc / hosts или указать свойство hostName для cacheManagerPeerListenerFactory в cluster.properties.
ehcache.listener.hostName=com.example.myhost
По материалам Atlassian JIRA Server Developer Configuring a JIRA cluster