Отказоустойчивость Jboss EAP 7.1.6 не работает, если в кластере два узла - PullRequest
1 голос
/ 27 мая 2019

Я исследовал проблему, связанную с тестом отработки отказа, когда в нем только два узла. Вот сценарий.

Тестовые шаги:

  1. У нас есть два узла кластера, давайте примем их как узел1 и узел2.
  2. Первоначально узел 1 запущен и работает, но узел2 не работает, и клиент подключен к узлу 1.
  3. Как только узел 2 полностью запущен, мы остановили узел 1.
  4. В этом случае клиент получил зависание и вышел из системы из системы.

Этапы расследования:

  1. При запуске узла 2, до того, как он полностью запустился (частично запустился), обнаружение узла было помечено как узел 2 как пункт назначения с ошибкой и помещено в объект кэша.
  2. Даже если узел node2 полностью запущен, он не удаляется из кэша.
  3. Когда узел 1 остановлен, он также помечается как пункт назначения с ошибкой. В этой ситуации оба узла, помеченные как сбойные данные обнаружения.
  4. Даже при втором проходе этот сбойный целевой кэш не очищается. Но когда я очищаю кеш, как показано ниже. Открытие было успешным.
        if (discoveryConnections && ! ok) {
            if (failedDestinations != null)
            {
                failedDestinations.clear();
            }
            Logs.INVOCATION.tracef("EJB discovery provider: all connections marked failed, retrying ...");
            for (EJBClientConnection connection : configuredConnections) {
                if (! connection.isForDiscovery()) {
                    continue;
                }
                URI destination = connection.getDestination();
                Logs.INVOCATION.tracef("EJB discovery provider: attempting to connect to connection %s", destination);
                discoveryAttempt.connectAndDiscover(destination, null);
            }
        }

Но для правильного переключения при сбое, когда узел запущен и работает, он должен быть очищен из объекта кэша JD-FB failddestination.

Это дает оба узла как сбойные и кэшированные, не очищается, когда серверы работают

...