Настройка поставщика состояния сеанса ASP.NET Redis для конфигурации Sentinel

Я пытался получить ASP.NET Redis Session State Provider, настроенный в моем приложении в течение некоторого времени. Я наконец смог успешно подключиться напрямую к мастеру и установить / получить ключи благодаря этому сообщению: Не удается подключиться к серверу Redis с помощью поставщика состояния сеанса ASP.NET

Теперь мой следующий вопрос ... заставить это работать с конфигурацией Sentinel.

Я знаком с командой SENTINEL get-master-addr-by-name master-dev-sessionstate для определения мастера. У этого провайдера это встроено? Основываясь на комментариях к сообщению в блоге, приведенному выше (это также ЕДИНСТВЕННАЯ документация, которую я могу найти по этому поводу), кажется, что я должен иметь возможность использовать атрибут connectionString для передачи нескольких хостов. Однако я не уверен, предназначены ли эти несколько хостов для работы в качестве Стражей или нет.

<connectionStrings>
  <add name="RedisConnection" connectionString="1.2.3.4:5,6.7.8.9:10,abortConnect=false,ssl=false,password=XXXXXX,operationTimeoutInMilliseconds=5000"/>
</connectionStrings>

<sessionState mode="Custom" customProvider="MySessionStateStore">
  <providers>
    <clear/>
    <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="RedisConnection"/>
  </providers>
</sessionState>

При такой настройке подключения я получаю такую ​​ошибку:

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

Я получаю эту ошибку, даже если в строке подключения указан только главный IP-адрес. Как вы можете видеть выше, у меня в строке подключения есть abortConnect = "false", что и дает мне указание сделать. Та же ошибка возникает при наличии этого параметра в строке подключения или без него.

Имея это в виду, вот мои вопросы ...

  1. Поддерживает ли этот провайдер конфигурации Sentinel?
  2. Если да, то каков правильный формат строки подключения?
  3. Есть ли у кого-нибудь другие хорошие ресурсы документации для этого? Я даже не смог найти ничего на сайте Microsoft, кроме этого сообщения в блоге.

РЕДАКТИРОВАТЬ: Я должен отметить, что это настраиваемая локальная установка Redis. Мы не работаем через Azure.

РЕДАКТИРОВАТЬ: Я недавно попытался указать свою рабочую конфигурацию на Sentinel, и я получаю «Нет подключения для обслуживания этой операции: EVAL». Это заставляет меня думать, что у этого провайдера нет поддержки Sentinel. Кто-нибудь может это подтвердить?


person Chris Bohatka    schedule 02.09.2015    source источник


Ответы (2)


Я использую этого поставщика для частной установки Redis. Насколько я понял из документации, этот провайдер использует пакет StackExchange.Redis.Strongname и ConnectionMultiplexer для настройки. С помощью этой библиотеки можно использовать описанные параметры конфигурации. Кроме того, в этой документации указано, что дозорная поддержка (serviceName) в настоящее время не реализована.

Тем не менее, мне интересно, почему вам нужно общаться с часовыми, ConnectionMultiplexer может разрешить настройку главного подчиненного устройства, см. Документацию. Более того, я протестировал это поведение, отключив экземпляры Redis и взглянув на сетевой трафик. Ознакомьтесь с документацией ConnectionMultiplexer:

Более сложный сценарий может включать настройку ведущий / ведомый; для этого использования просто укажите все желаемые узлы, составляющие этот логический уровень redis (он автоматически идентифицирует главный): ConnectionMultiplexer redis = ConnectionMultiplexer.Connect ("server1: 6379, server2: 6379");

Кроме того, мои настройки конфигурации выглядят так:

 <add   name="MySessionStateStore" 
    type="Microsoft.Web.Redis.RedisSessionStateProvider"
    connectionString="XXXXXX:6379,XXXXXX:6379,XXXXXX:6379"  
    applicationName="myFancyApp"ssl="false"/>

Что касается поставщика MS.RedisSessionState, я использовал следующее руководство рядом с сайтом .

person wami    schedule 24.09.2015
comment
С тех пор я изучил источник этого поставщика, и, хотя он использует ConnectionMultiplexer, он не поддерживает Sentinels. Я написал эту функцию и отправил запрос на перенос. - person Chris Bohatka; 24.09.2015
comment
отлично! Значит, с вашими изменениями можно добавить контрольный IP-адрес в строку подключения, чтобы включить самостоятельное обнаружение текущего мастера? - person wami; 25.09.2015
comment
да. Я надеюсь, что этот запрос на перенос будет принят в ближайшие несколько недель. - person Chris Bohatka; 25.09.2015

Это то, что обычно добавляется в web.config при установке пакета nuget;

sessionState mode="Custom" customProvider="MySessionStateStore">
  <providers>
    <!--
      <add name="MySessionStateStore" 
        host = "127.0.0.1" [String]
        port = "" [number]
        accessKey = "" [String]
        ssl = "false" [true|false]
        throwOnError = "true" [true|false]
        retryTimeoutInMilliseconds = "0" [number]
        databaseId = "0" [number]
        applicationName = "" [String]
        connectionTimeoutInMilliseconds = "5000" [number]
        operationTimeoutInMilliseconds = "5000" [number]
      />
    -->
    <add name="MySessionStateStore" 
         type="Microsoft.Web.Redis.RedisSessionStateProvider"
         host="127.0.0.1" 
         accessKey="" 
         ssl="false" />
  </providers>
</sessionState>

Вот тот, который мы используем с кеш-сервером Azure ..

<sessionState mode="Custom" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider"
          type="Microsoft.Web.Redis.RedisSessionStateProvider"
          port="6380"
          host="xxxxxxxx.redis.cache.windows.net"
          accessKey="vCG........We0n="
          ssl="true"
          connectionTimeoutInMilliseconds = "5000"
          operationTimeoutInMilliseconds = "1000"
          retryTimeoutInMilliseconds="3000" />
  </providers>
</sessionState>

Мы устанавливаем тайм-аут повторной попытки равным 3 секундам с тайм-аутом операции равным 1 секунде, что позволяет выполнять 3 (1000/3000 = 3) попытки, прежде чем он откажется.

person Community    schedule 02.09.2015
comment
Я не вижу в предоставленном вами примере, когда вы передаете несколько хостов и пытаетесь определить мастер. Мы используем настраиваемую установку Redis на локальном сервере, а не через Azure. - person Chris Bohatka; 02.09.2015
comment
Поставщик состояния сеанса MS Redis поддерживает только Redis (и только одно соединение). Sentinel - это отдельная форма уровня, управляющая набором главных / подчиненных серверов Redis, и требует, чтобы вы поддерживали ее своим клиентским кодом (redis.io/topics/ - пункт 4) Вы можете обсудить это дополнительно в проекте git для него github.com/Azure/aspnet-redis-providers - person ; 03.09.2015
comment
Кроме того, раздел web.config не относится к Azure. - person ; 03.09.2015