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

Предостережение: Хорошо, это странный вопрос, и я не уверен, что SO - подходящее место.

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

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

Ошибка:

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

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

mycache.redis.cache.windows.net, ssl = true, пароль = xxxxxx, syncTimeout = 5000

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

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

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

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

Любые идеи?

ИЗМЕНИТЬ

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

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

ИЗМЕНИТЬ 2:

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

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

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

Попробуйте подключиться локально к Azure Redis. Результат: УСПЕХ (значит, код хорош?)


person RPM1984    schedule 18.06.2015    source источник
comment
В Azure Redis нет никакой логики в отношении поддержки VNET или занесения сайтов в черный список, поэтому проблема маловероятна на стороне Azure Redis. Отправьте электронное письмо на адрес azurecache на Microsoft.com, указав имя вашего кеша и имя вашего веб-сайта, на котором вы наблюдаете сбой, и мы посмотрим, сможем ли мы выяснить, что происходит ...   -  person RPM1984    schedule 18.06.2015
comment
привет @JonCole, спасибо. :) Я написал на адрес [email protected]. Это интересно, как только я достаю его из VNET, он работает нормально. То же самое касается подключения к сторонней службе Redis (например, RedisLabs). В VNET = сбой, вне VNET = успех.   -  person JonCole    schedule 18.06.2015
comment
@JonCole - мне не пришло письмо. Подходит ли адрес электронной почты [email protected]?   -  person RPM1984    schedule 19.06.2015
comment
Да, это правильно. Мы постараемся ответить сегодня.   -  person RPM1984    schedule 21.06.2015
comment
В качестве побочного примечания просмотрите этот вопрос, поскольку у вас, похоже, также есть та же проблема в дополнение к проблеме, которую вы описываете в этом вопросе: stackoverflow .com / questions / 30895507 /   -  person JonCole    schedule 22.06.2015
comment
Была такая же проблема с новым кешем Redis уровня Premium сегодня. Вместо этого устанавливается инстанс стандартного уровня, пока эта ошибка не будет исправлена.   -  person JonCole    schedule 23.06.2015
comment
Привет, Алекс, спасибо, но не могли бы вы подтвердить несколько вещей. 1) Какие экземпляры VNET / веб-сайтов / Redis вы имеете в виду (у нас проблема с несколькими средами), 2) В чем была проблема, 3) Когда вы исправили проблему, 4) Связано ли это с заявкой, которую я поднял ? (если да, не могли бы вы ответить там, а не ТАК)   -  person Rush Frisby    schedule 22.11.2015


Ответы (3)


Приносим извинения за неудобства ...

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

person Aleks B    schedule 24.06.2015
comment
Я отвечал по электронной почте. Я предоставлю вам дополнительную информацию в заявке на поддержку. - person RPM1984; 25.06.2015
comment
Да, _1_ исправляет начальное сообщение о подключении для меня, но иногда у меня все еще возникают проблемы с подключением. В сети случаются сбои, и нам просто нужно с этим справиться. - person Aleks B; 25.06.2015

Мне удалось исправить первую ошибку («Не удалось подключиться к серверу (-ам) Redis ..»), установив для AbortOnConnectFail значение false. Затем я получил сообщение об ошибке «Нет подключения для обслуживания этой операции: EXISTS foo» (= в данном случае попытка проверить, существует ли ключ 'foo').

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

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

person mikkark    schedule 22.07.2015
comment
Служба поддержки Azure помогла нам решить эту проблему, оказалось, что виртуальная сеть настроена неправильно. Было установлено два неверных DNS-сервера, что вызвало проблему Redis (а также другие проблемы, которые были решены). Я удалил DNS-серверы, и все заработало. - person RPM1984; 23.07.2015
comment
__Booksleeve_TieBreak ... Разрешение конечным точкам 00:00:05 ответа ... Ожидание завершения задачи, IOCP: (Занят = 0, Свободен = 1000, Мин = 1, Макс = 1000), РАБОЧИЙ: (Занят = 4, Свободен = 32763 , Мин. = 1, Макс. = 32767) Не все задачи выполнены правильно, IOCP: (Занят = 0, Свободен = 1000, Мин = 1, Макс = 1000), РАБОЧИЙ: (Занят = 5, Свободен = 32762, Мин = 1, Макс. = 32767) Строка-подключения-удалена: 6380 не ответили Ожидание завершения задачи, IOCP: (Занят = 0, Свободен = 1000, Мин. = 1, Макс = 1000), РАБОЧИЙ: (Занят = 5, Свободен = 32762, Мин = 1, Макс = 32767) Не все задачи выполнены правильно, IOCP: (Занят = 0, Свободен = 1000, Мин = 1, Макс = 1000), РАБОЧИЙ: (Занят = 5, Свободен = 32762 , Min = 1, Max = 32767) строка подключения удалена: 6380 не удалось назначить (WaitingForActivation) Мастера не обнаружены строка подключения удалена: 6380: автономный v2. 0,0, мастер; keep-alive: 00:01:00; int: Подключение; sub: Подключение; не используется: 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 операций / с; интервал 10 с); sub: 0 ​​(0,00 операций / с; интервал 10 с) Таймауты синхронизации: 0; выстрелить и забыть: 0; последнее контрольное сообщение: -1 сек. назад, сбрасывая неудачные соединения, чтобы повторить попытку ... повторная попытка; осталось попыток: 2 ... 1 указанный уникальный узел Запрос тай-брейка от connection-string-remote: 6380> __Booksleeve_TieBreak ... Разрешение конечным точкам 00:00:05 ответа ... Ожидание завершения задачи , IOCP: (Занят = 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: автономный v2.0.0, мастер; keep-alive: 00:01:00; int: Подключение; sub: Подключение; не используется: 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 операций / с; пролеты 10 с); sub: 0 ​​(0,00 операций / с; интервал 10 с) Таймауты синхронизации: 0; выстрелить и забыть: 0; последнее контрольное сообщение: -1 сек. назад, сбрасывая неудачные соединения, чтобы повторить попытку ... повторная попытка; осталось попыток: 1 ... 1 указанный уникальный узел Запрос тай-брейка от connection-string-remote: 6380> __Booksleeve_TieBreak ... Разрешение конечным точкам 00:00:05 ответа ... Ожидание завершения задачи , IOCP: (Занят = 0, Свободен = 1000, Мин = 1, Макс = 1000), РАБОЧИЙ: (Занят = 8, Свободен = 32759, Мин = 1, Макс = 32767) EndConnect: строка подключения удалена : 6380 (отключение сокета) Подключение завершено: строка подключения удалена: 6380 Все задачи завершены без ошибок, IOCP: (Занят = 0, Свободен = 1000, Мин. = 1, Макс = 1000 ), РАБОЧИЙ: (Занят = 11, Свободен = 32756, Мин = 1, Макс = 32767) строка подключения удалена: Ошибка 6380: Ошибка сокета при PING Ожидает завершения задачи, IOCP: (Занят = 0 , Свободно = 1000, Мин = 1, Макс = 1000), РАБОЧИЙ: (Занят = 11, Свободен = 32756, Мин = 1, Макс = 32767) Не все задачи выполнены правильно, IOCP: (Занят = 0, Свободен = 1000, Мин = 1, Макс = 1000), РАБОЧИЙ: (Занят = 7, Свободен = 32760, Мин = 1, Макс = 32767) строка подключения удалена: 6380 не удалось назначить (WaitingForActivation) Нет обнаружены мастера строка подключения-удалена: 6380: автономный v2.0.0, главный; keep-alive: 00:01:00; int: Подключение; sub: Подключение; не используется: 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 операций / с; интервал 10 с); sub: 0 ​​(0,00 операций / с; интервал 10 с) Таймауты синхронизации: 0; выстрелить и забыть: 0; последнее биение: -1 сек. назад - person mikkark; 05.08.2015

Отчасти эта манипуляция мне помогла.

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

дважды проверьте свой пароль (закрытый ключ) на правильность

person Nigrimmist    schedule 29.09.2015