2015-09-02 17 views
5

Ho cercato di ottenere il ASP.NET Redis Session State provider configurato nella mia app per un po 'di tempo. Sono finalmente riuscito a collegarmi direttamente al master e impostare/ottenere le chiavi grazie a questo post: Can't connect to Redis server using ASP.NET Session State ProviderConfigurare ASP.NET Redis Session State Provider per la configurazione Sentinel

Ora, la mia prossima domanda ... far funzionare questo con una configurazione di Sentinel.

Ho familiarità con il comando SENTINEL get-master-addr-by-name master-dev-sessionstate per determinare il master. Questo fornitore ha questo integrato? Sulla base dei commenti sul post del blog linkato sopra (che è anche l'unica documentazione che posso trovare su questo), sembra che dovrei essere in grado di utilizzare l'attributo connectionString per passare più host. Non sono sicuro che questi host multipli siano destinati a essere Sentinel o meno, comunque.

<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> 

Quando si configura la mia connessione come questo, ricevo questo errore:

Additional information: It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail.

ottengo questo errore anche quando ho solo il maestro IP nella mia stringa di connessione. Come puoi vedere sopra, ho abortConnect = "false" nella mia stringa di connessione, che è quello che mi sta chiedendo di fare. Lo stesso errore si verifica con o senza questo presente nella stringa di connessione.

Con questo in mente, qui sono le mie domande ...

  1. Questo provider di configurazioni supporto Sentinel?
  2. In caso affermativo, qual è il formato corretto per la stringa di connessione?
  3. Qualcuno ha altre buone risorse di documentazione per questo? Non sono nemmeno riuscito a trovare nulla sul sito di Microsoft al di fuori di quel post del blog.

MODIFICA: Devo notare che si tratta di un'installazione locale Redis personalizzata. Non stiamo correndo attraverso Azure.

EDIT: Recentemente ho provato a indicare la mia configurazione di lavoro su Sentinel e ricevo "Nessuna connessione disponibile per eseguire questa operazione: EVAL." Questo mi porta a credere che questo provider non abbia il supporto di Sentinel. Qualcuno può confermarlo?

risposta

0

Questo è ciò che viene normalmente aggiunto a web.config quando si installa il pacchetto 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> 

Ecco quello che usiamo con un server di cache 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> 

Abbiamo installato riprovare tempo per 3 secondi con il tempo di funzionamento fuori a 1 secondo, che consente 3 (1000/3000 = 3) tentativi prima che si arrenda.

+1

Non riesco a vedere nell'esempio fornito in cui si passano più host e si tenta di determinare il master. Stiamo utilizzando un'installazione personalizzata di Redis su un server locale, non stiamo eseguendo Azure. –

+0

Il provider di stato sessione MS Redis supporta solo Redis (e solo una connessione). Sentinel è un modulo di livello separato che gestisce un insieme di server Redis master/slave e richiede il supporto del codice client (http://redis.io/topics/sentinel#fundamental-things-to-know-about-sentinel-before- to-deploy - point 4) Puoi discuterne ulteriormente sul progetto git per esso https://github.com/Azure/aspnet-redis-providers – Darren

+0

Anche la sezione web.config non è specifica di Azure. – Darren

2

sto usando questo provider per un'installazione redis privata. Per quanto ho capito la documentazione, questo provider utilizza il pacchetto StackExchange.Redis.Strongname e ConnectionMultiplexer per la configurazione. Con questa libreria è possibile utilizzare il descritto configuration options. Inoltre, questa documentazione afferma che il supporto sentinella (serviceName) non è attualmente implementato.

Tuttavia mi chiedo il motivo per cui è necessario comunicare con le sentinelle, ConnectionMultiplexer è in grado di risolvere l'impostazione dello slave master, vedere Documentazione.Inoltre ho provato questo comportamento chiudendo le istanze di redis e ho dato un'occhiata al traffico di rete. Si prega di dare un'occhiata alla documentazione ConnectionMultiplexer:

A more complicated scenario might involve a master/slave setup; for this usage, simply specify all the desired nodes that make up that logical redis tier (it will automatically identify the master): ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("server1:6379,server2:6379");

Inoltre il mio setup di configurazione appare così:

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

Per quanto riguarda Provider MS.RedisSessionState ho usato il seguente tutorial accanto al site.

+0

Da allora ho cercato nella fonte questo provider e, mentre sta usando ConnectionMultiplexer, non contiene il supporto per Sentinels. Ho scritto questa funzionalità e ho inviato una richiesta di pull. –

+0

bello! quindi con le tue modifiche è possibile aggiungere l'IP sentinella nella stringa di connessione per abilitare l'auto-scoperta del master corrente? – wami

+0

Sì. Spero di avere questa richiesta di accettazione accettata nelle prossime settimane. –

Problemi correlati