Разница в том, что процесс Sentinel и Redis-Master уничтожен, а IP-кабель отключен - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть традиционная конфигурация redis-sentinel со следующей настройкой:

  • Узел-1 с часовым и редисом (изначально как мастер)
  • Узел-2 с дозором и редис-рабом
  • Узел-3 с дозором и редис-рабом

На узле-1 я запускаю Java-приложение, которое вызывает useSentinelServers () следующим образом:

GLconfig.useSentinelServers()
    .setMasterName(cluster_name)
    .setScanInterval(3000)
    .setReadMode(ReadMode.MASTER)
    .setSubscriptionMode(SubscriptionMode.MASTER)
    .addSentinelAddress(addr1)
    .addSentinelAddress(addr2)
    .addSentinelAddress(addr3)

GLclient = Redisson.create(GLconfig);

Я использую GLclient для настройки подписки, а также для публикации данных. Адреса 1, 2 и 3 являются адресами: порты сторожевых серверов (соответственно, узлов 1, 2 и 3)

Что касается аварийного переключения, все работает как надо. Вот что я делаю:

  • Мастер находится в узле-2
  • Java-приложение на узле-1 публикует данные на канал каждый второй.
  • Это приложение также подписано на канал и, как следствие, он также получает опубликованные данные.
  • Теперь я убиваю оба процесса (redis-master + sentinel) на узле-2 с убийством -9.
  • Через несколько секунд эта конфигурация восстанавливается и Java Приложение снова получает опубликованные данные.
  • Короткое отключение является допустимым и предусмотренным.

Теперь я снова делаю ту же последовательность, но вместо того, чтобы убивать процессы sentinel и redis-master на узле-2, я просто отключаю IP-кабель этого хоста (Raspberry-Pi).

Это приводит к неожиданному поведению:

  • Java-приложение по-прежнему публикует данные на канале.
  • Однако, это приложение не получает опубликованных данных. больше.
  • Запуск публикации с помощью redis-cli на узле-3 для того же канала, также не отображается в приложении java.
  • Эта ситуация не меняется с течением времени.

При подключении IP-кабеля в Node-2 конфигурация восстанавливается; Java-приложение на узле-1 снова получает опубликованные данные. Также он получает опубликованные данные, полученные с узла 3 с redis-cli.

Этот сценарий воспроизводим.

Мое наблюдение состоит в том, что есть четкое различие между:

  • Уничтожение обоих часовых процессов в redis-master (kill -9) против
  • Отключение IP-кабеля (сравнимо с отключением питания или сбоем маршрутизатора)

(отключение IP-кабеля имеет тот же эффект, что и 'ifconfig eth0 down' на узле-2)

Является ли это известной проблемой, и какие меры противодействия можно предпринять, чтобы подписка работала в случае обрыва кабеля, как я описал? например таймеры, дополнительные параметры для использованияSentinelServers () и т. д.

Спасибо и всего наилучшего.

...