Windows Server 2003R2 / 2008R2 / 2012, Openfire 3.8.1, Hazelcast 1.0.4, MySQL 5.5.30 -ndb-7.2.12-кластер-gpl-журнал
Мы настроили 5 серверов в Openfire Cluster. Каждая из них находится в разных подсетях, подсети расположены в разных городах и связаны друг с другом через маршрутизаторы VPN (2-8 Мбит / с):
192.168.0.1 - node0
192.168.1.1 - node1
192.168.2.1 - node2
192.168.3.1 - node3
192.168.4.1 - node4
Openfire настроен на использование базы данных MySQL, которая успешно реплицируется с главного узла0 на все подчиненные узлы (каждый узел использует это собственный локальный сервер базы данных, работающий как подчиненный).
В Openfire Web Admin> Server Manager> Clustering мы можем просмотреть все узлы кластера.
Пользовательские настройки Openfire для Hazelcast:
hazelcast.max.execution.seconds - 30
hazelcast.startup.delay.seconds - 3
hazelcast.startup.retry.count - 3
hazelcast.startup.retry.seconds - 10
Конфигурация Hazelcast для node0 (аналогична другим узлам, за исключением раздела интерфейса) (% PROGRAMFILES% \ Openfire \ plugins \ hazelcast \ classes \ hazelcast-cache-config.xml):
<join>
<multicast enabled="false" />
<tcp-ip enabled="true">
<hostname>192.168.0.1:5701</hostname>
<hostname>192.168.1.1:5701</hostname>
<hostname>192.168.2.1:5701</hostname>
<hostname>192.168.3.1:5701</hostname>
<hostname>192.168.4.1:5701</hostname>
</tcp-ip>
<aws enabled="false" />
</join>
<interfaces enabled="true">
<interface>192.168.0.1</interface>
</interfaces>
Это единственные настройки, отличные от настроек по умолчанию.
Проблема в том, что клиенты XMPP авторизуются слишком долго, примерно 3-4 минуты, после авторизации другие пользователи в реестре неактивны в течение 5-7 минут, за это время авторизовались. Пользователь в Openfire Web Admin> Сеансы отмечен как Не в сети. Даже после того, как пользователь видит, что другие пользователи вошли в систему как активные, сообщения не доставляются или доставляются через 5-10 минут или после нескольких перезапусков Openfire ...
Мы ценим любую помощь. Мы потратили около 5 дней, пытаясь настроить этого монстра, и у нас нет никаких идей ... :(
Заранее большое спасибо!
UPD 1: установлен Openfire 3.8.2 alpha с Hazelcast 2.5.1 Build 20130427 с той же проблемой.
UPD 2: Попытка запустить кластер на двух серверах, находящихся в одном городе, разделенных, вероятно, 1-2 переходами при пинге 1-5 мс. Все работает отлично! Затем мы остановили один из этих серверов и запустили один в другом городе (3-4 прыжка при 80-100 мс пинг) проблема снова возникла ... Медленная авторизация, отключенные пользователи в реестре, сообщения не доставляются вовремя и т. Д.
UPD 3: установлен Openfire 3.8.2 без JRE и Java SDK 1.70_25.
Вот скриншоты JMX:
узел 0:
узел 1:
Красная линия - первое клиентское соединение (после перезапуска Openfire). Проверено на двух пользователях. То же самое ... Первый пользователь (node0) подключился мгновенно, второй пользователь (node1) потратил 5 секунд на подключение. Ростеры показывали офлайн-пользователей с обеих сторон по 20-30 секунд, затем в них начали появляться онлайн-пользователи. Первый пользователь отправляет сообщение второму пользователю. Второй пользователь ждет 20 секунд, затем получает первое сообщение. Ответ и все другие сообщения передаются мгновенно.
UPD 4:
Во время раскопок на вкладке «Потоки» JConsole мы обнаружили следующие состояния:
Например, hz.openfire.cached.thread-3:
WAITING on java.util.concurrent.SynchronousQueue$TransferStack@8a5325
Total blocked: 0 Total waited: 449
Может, это поможет ... Мы вообще не знаем, где искать.
Спасибо!