Не удается повторно подключиться к Azure Redis через StackExchange.Redis

Предостережение: Хорошо, так что это странно, и я не уверен, что ТАК правильное место.

У меня есть веб-сайт Azure, подключающийся к экземпляру Redis Cache Azure. (используя StackExchange.Redis)

Все было замечательно, но однажды сайт не смог подключиться к Redis.

Ошибка:

Не удалось подключиться к серверу (-ам) redis; чтобы создать отключенный мультиплексор, отключите AbortOnConnectFail. SocketFailure на PING

Вот моя строка подключения:

mycache.redis.cache.windows.net, SSL = верно, пароль = хххххх, syncTimeout = 5000

Вот мои шаги диагностики:

  1. Попробуйте подключиться с локального к Azure Redis. Результат: УСПЕХ (так что код хорош?)
  2. Попробуйте раскрутить НОВЫЙ экземпляр Redis Azure, подключитесь из Azure. Результат: FAIL (веб-сайт не может подключиться к ЛЮБОМУ экземпляру Redis Azure?)
  3. Spinup NEW Azure Website с тем же кодом, что и код ошибки, указывающий на существующий кэш Redis. Результат: УСПЕХ (гм, что?)
  4. Создайте новый веб-сайт MVC, добавьте StackExchange.Redis, разверните его на новом веб-сайте Azure и подключитесь к Redis. Результат: УСПЕХ (так что Redis хорош?)
  5. Разверните над обычным веб-сайтом MVC на существующем веб-сайте Azure (такой же код, как у 4, при подключении к тому же Redis, с той лишь разницей, что он использует старый физический компьютер / сеть веб-сайта Azure). Результат: FAIL (wtf??)

Итак, я думаю, что Redis занесен в "черный список" сайта Azure? (это вообще возможно?) Я знаю, что клиент (мой код) не будет пытаться восстановить соединение, но я много раз отказывал сайту, и он просто не может подключиться к Redis.

Тот факт, что запуск нового веб-сайта Azure с тем же кодом, подключенным к тому же экземпляру Redis, приводит к успеху, говорит о том, что в Azure/Redis возникла какая-то проблема с занесением в черный список или маршрутизацией.

Есть идеи?

РЕДАКТИРОВАТЬ

Похоже, проблема в Azure VNET. Когда мой веб-сайт является частью виртуальной сети Azure, он не может подключиться к Redis. Но когда я вынимаю его из сети, он подключается нормально. До сегодняшнего дня эта настройка работала нормально.

Поэтому мне интересно, внесло ли Azure изменения, чтобы веб-сайты в VNET не могли подключиться к Azure Redis? (нет смысла, я знаю)

РЕДАКТИРОВАТЬ 2:

Приложены журналы от попытки подключения Redis.

Исключение: не удалось подключиться к серверу Redis; чтобы создать отключенный мультиплексор, отключите AbortOnConnectFail. SocketFailure для PING -строки соединения удалено:6380, пароль = пароль удален,ssl=True Соединение -строки соединения удалено:6380/Interactive... BeginConnect: строка-соединения удалена: 6380 Указано 1 уникальных узлов Запрос разрыва связи из строки подключения удалено: 6380

__Booksleeve_TieBreak... Разрешение ответа конечных точек 00:00:05... Ожидание завершения задачи, IOCP: (Занято = 0, Свободно = 1000, Мин = 1, Макс =1000), РАБОЧИЙ: (Занято =4, Свободно =32763,Min=1,Max=32767) Не все задачи выполнены корректно, IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=5,Free=32762,Min=1, Макс = 32767) строка подключения удалена: 6380 не отвечает Ожидание завершения задачи, IOCP: (Занято = 0, Свободно = 1000, Мин = 1, Макс =1000), РАБОЧИЙ: (Занято = 5, Свободно = 32762, Мин. = 1, макс. = 32767) Не все задачи выполнены корректно, IOCP: (занято = 0, свободно = 1000, мин = 1, макс =1000), РАБОЧИЙ: (занято = 5, свободно = 32762, мин = 1, макс. = 32767) строка подключения удалена: 6380 не удалось назначить (WaitingForActivation) Мастера не обнаружены, строка подключения удалена:6380: автономная версия 2.0.0, мастер; keep-alive: 00:01:00; int: Соединение; саб: подключение; не используется: DidNotRespond строка подключения удалена:6380: int ops=0, qu=2, qs=0, qc=0, wr=0, socks=1; sub ops=0, qu=0, qs=0, qc=0, wr=0, socks=1 Снимок циклического подсчета операций; int: 0 (0,00 ops/s; охватывает 10 с); sub: 0 ​​(0,00 ops/s; охватывает 10 с) Тайм-ауты синхронизации: 0; огонь и забудь: 0; последнее сердцебиение: -1 с назад, сброс сбойных соединений для повторной попытки... повторная попытка; осталось попыток: указано 2... 1 уникальных узлов Запрос разрыва связи из строки подключения удален:6380 > __Booksleeve_TieBreak... Разрешение ответа конечных точек 00:00:05... Ожидание завершения задачи, IOCP: (Busy = 0, Свободно = 1000, Мин. = 1, Макс. =1000), РАБОЧИЙ: (Занято =6, Свободно =32761, Мин. = 1, Макс. = 32767) Не все задачи выполнены корректно, IOCP: (Занято = 0, Свободно = 1000, Мин = 1, Макс =1000), РАБОЧИЙ: (Занято =7, Свободно =32760, Мин = 1, Макс = 32767) строка подключения удалена: 6380 не отвечает Ожидание завершения задачи, IOCP: (Занято = 0, Свободно = 1000, Мин. = 1, Макс. =1000), РАБОЧИЙ: (Занято =7, Свободно =32760, Мин. = 1, Макс. = 32767) Не все задачи выполнены корректно, IOCP: (Занято = 0, Свободно = 1000, Мин. = 1, Макс. =1000), РАБОЧИЙ: (Занято =7, Свободно =32760, Мин. = 1, Макс. = 32767) строка подключения удалена: 6380 не удалось назначить (WaitingForActivation) Нет хозяев, обнаружена строка подключения удалена:6380: Standalone v2.0.0, мастер; keep-alive: 00:01:00; int: Соединение; саб: подключение; не используется: DidNotRespond строка подключения удалена:6380: int ops=0, qu=2, qs=0, qc=0, wr=0, async=3, socks=2; sub ops=0, qu=0, qs=0, qc=0, wr=0, socks=2 Снимок циклического подсчета операций; int: 0 (0,00 ops/s; охватывает 10 с); sub: 0 ​​(0,00 ops/s; охватывает 10 с) Тайм-ауты синхронизации: 0; огонь и забудь: 0; последнее сердцебиение: -1 с назад, сброс сбойных соединений для повторной попытки... повторная попытка; осталось попыток: задано 1... 1 уникальных узлов Запрос разрыва связи из строки подключения удален:6380 > __Booksleeve_TieBreak... Разрешение ответа конечным точкам 00:00:05... Ожидание завершения задачи, IOCP: (Busy = 0, Свободно = 1000, Мин. = 1, Макс. =1000), РАБОЧИЙ: (Занято =8, Свободно =32759, Мин. = 1, Макс. =32767) EndConnect: строка подключения удалена:6380 (отключение сокета) Подключение выполнено: подключение -string-Удалено: 6380 Все задачи выполнены правильно, IOCP: (Занято = 0, Свободно = 1000, Мин = 1, Макс =1000), РАБОЧИЙ: (Занято = 11, Свободно =32756, Мин = 1, Макс = 32767) строка подключения удалена: 6380 сбой: SocketFailure на PING Ожидание завершения задачи, IOCP: (Занято = 0, Свободно = 1000, Мин = 1, Макс =1000), РАБОЧИЙ: (Занято = 11, Свободно =32756, Мин = 1, Макс. = 32767) Не все задачи выполнены корректно, IOCP: (Занято = 0, Свободно = 1000, Мин. = 1, Макс. =1000), РАБОЧИЙ: (Занято =7, Свободно =32760, Мин. = 1, Макс. = 32767) строка подключения удалена: 6380 не удалось назначить (WaitingForActivation) Мастера не обнаружены, строка подключения удалена:6380: автономная версия 2.0.0, мастер; keep-alive: 00:01:00; int: Соединение; саб: подключение; не используется: DidNotRespond строка подключения удалена:6380: int ops=0, qu=2, qs=0, qc=0, wr=0, async=7, socks=3; sub ops=0, qu=0, qs=0, qc=0, wr=0, socks=3 Снимок циклического подсчета операций; int: 0 (0,00 ops/s; охватывает 10 с); sub: 0 ​​(0,00 ops/s; охватывает 10 с) Тайм-ауты синхронизации: 0; огонь и забудь: 0; последнее сердцебиение: -1с назад

Кто-нибудь может расшифровать это?

3 ответа

Решение

Я работаю в команде Azure Web Apps - похоже, ваша VNET попала в особенно странное состояние и прерывает сетевое подключение для вашего приложения. Я исправил это поведение.

Мы невероятно сожалеем о неудобствах...

Если вышеуказанные сообщения не помогли, вы можете проверить:

  • дважды проверьте ваш пароль (закрытый ключ) на правильность
  • Попробуйте установить / снять флажок "32-битное предпочтение" в свойствах проекта, если ваше приложение является исполняемым.
  • попробуйте отключить ssl на стороне Redis Azure (от пользовательского интерфейса) и попытайтесь установить для useSsl значение false.
  • загрузите исходный код (оттуда: https://github.com/StackExchange/StackExchange.Redis) и попробуйте отладить внутреннюю проблему.

Часть этой манипуляции помогла мне.

Возможно, мы столкнулись с той же проблемой. Мне удалось поместить тестовое приложение в веб-приложение в Azure без виртуальной сети, и оно работает сразу после установки (с помощью Stackexchange.Redis). Когда я помещаю тот же код в веб-приложение, которое является частью виртуальной сети, оно не работает.

Мне удалось исправить первую ошибку ("Не удалось подключиться к серверу (-ам) Redis.."), установив для AbortOnConnectFail значение false. Затем я получил ошибку "Нет соединения для обслуживания этой операции: СУЩЕСТВУЕТ foo" (= в этом случае пытается проверить, существует ли ключ "foo").

Я тоже могу это исправить, установив ConnectTimeout на 10 секунд. В общем, я могу заставить его работать, но это, кажется, вызывает большие задержки, когда (я предполагаю) SE.Redis теряет соединение и пытается восстановить соединение.

Другие вопросы по тегам