Мы тестируем StackExchange.Redis v2.1.58, который поставляется с дозорным режимом функцией:
Если вы укажете serviceName в строке подключения, он запустит дозорный режим. .. обнаружить текущий главный сервер ... и вернуть управляемое соединение, указывающее на этот главный сервер, которое будет автоматически обновлено, если главный сервер изменится.
С настройкой Redis (v5.0.8) HA:
- 172.17.6.45: главный, дозорный
- 172.17.6.46: подчиненный, дозорный
- 172.17.6.47: только дозорный
Мы протестировал следующий сценарий:
Приложение подключается к Redis в дозорном режиме со строкой подключения как
172.17.6.45:26379,serviceName=mymaster
Start новый экземпляр Redis в качестве подчиненного в .47
Запуск переключения на подчиненный сервер в .47
Когда произошел шаг # 2 SE.Redis не перезагружает информацию о конечной точке. Мы печатаем конечные точки в журнале, когда на шаге 3 произошел сбой соединения, и по-прежнему печатаются только .45 и .46. После шага № 3 SE.Redis не может переключить соединение с новым мастером в .47, потому что его нет в списке конечных точек.
Я хотел бы знать, как сделать так, чтобы SE.Redis знал о + ведомое событие на шаге № 2 и выполните перезагрузку конечной точки.
ОБНОВЛЕНИЕ:
После дальнейшего тестирования почему-то мы больше не можем создавать проблему. И после прохождения кода SE.Redis действительно происходит обработка перезагрузки конечной точки при переключении мастера. Мы рассмотрим этот сценарий позже, когда начнем использовать его для разработки продукта.