无法使用ASP.NET Redis SessionState Provider连接到本地Redis Sentinel故障转移系统

时间:2015-07-24 13:15:21

标签: c# asp.net redis session-state stackexchange.redis

我使用Sentinels设置了本地Redis环境以进行故障转移。我试图在我的MVC应用程序中使用Redis作为我的SessionStateProvider。我已经安装了Microsoft.Web.RedisSessionStateProvider NuGet包,我有我的提供者的web.config条目。通过Microsoft的announcement blog post阅读此提供程序,似乎只是通过connectionString属性添加了对多个主机的支持。

通过对公告博客帖子的评论提问:

  

@Siddarth

     

StackExchange.Redis Redis客户端允许使用ConnectionMultiplexer列出多个主机,如github.com/.../Basics.md所示。我怎样才能设置多个主机来传递给Redis客户端?在之前的评论中,您提到打开可以设置的optionsString,在这种情况下,我们可以通过多个主机。

回应:

  

@Dvorac

     

ConnectionMultiplexer redis => ConnectionMultiplexer.Connect(" server1:6379,server2:6379");

     

你可以传递这个" server1:6379,server2:6379"使用" connectionString"会话状态提供程序中的设置。

我试图找到比此博客文章和评论更多的文档,但我一直无法找到任何实质性内容。在我寻找更多信息的过程中,我相信我读到提供者应该能够通过迭代所有提供的主机来确定哪个是主人。

截至目前,我99%确定我需要使用connectionString来允许多个主机,尽管我只有1%确定此RedisSessionStateProvider具有Sentinel支持。我一直在努力制作一个合适的connectionString,目前我遇到了以下异常:

  

类型' StackExchange.Redis.RedisConnectionException'的异常发生在Microsoft.Web.RedisSessionStateProvider.dll中但未在用户代码中处理

     

附加信息:没有可用于此操作的连接:EVAL

我的connectionString按照以下格式:

connectionString="1.2.3.4:5,1.2.3.4:5,1.2.3.4:5,1.2.3.4:5,1.2.3.4:5,1.2.3.4:5,ssl=true,password=XXXXXX,abortConnect=false"

如果有人有任何可以引导我朝正确方向发展的信息,我将不胜感激。

我已经设置了一个telnet并且我已经向Redis服务器发送了消息,因此我知道我可以访问并可以从我的机器建立连接。我无法帮助,但我觉得我没有正确编写我的connectionString,因为ASP.NET会话状态提供程序无法处理此配置,我应该建立一些自定义的东西。

1 个答案:

答案 0 :(得分:0)

StackExchange.Redis客户端支持多个服务器,但它是关于主服务器和从服务器而不是多个主服务器支持(如集群)。 ASP.NET Redis会话提供程序不支持主/从服务器,因为您只能从它读取它(实际上只能将它用于只读会话)实际上对于从服务器没用。
如果要为内部Redis服务器设置高可用性,则必须使用内部DNS服务器并为redis会话实例创建记录。您应该在web.config而不是IP中使用该DNS记录,因为当发生故障转移时,您将使用新的主IP更新该DNS条目。