无法通过StackExchange重新连接到Azure Redis.Redis

时间:2015-06-18 05:09:31

标签: .net redis azure-web-sites stackexchange.redis azure-redis-cache

警告:好的,这是一个奇怪的,我不确定SO是否是正确的地方。

我有一个Azure网站连接到Azure Redis缓存实例。 (使用StackExchange.Redis)

一切都很棒,然后有一天 - 网站无法连接到Redis。

错误:

  

无法连接到redis服务器;要创建断开连接的多路复用器,请禁用AbortOnConnectFail。 PING上的SocketFailure

这是我的连接字符串:

  

mycache.redis.cache.windows.net,SSL =真,密码= XXXXXX,syncTimeout = 5000

以下是我的诊断步骤:

  1. 尝试从本地连接到Azure Redis。结果:SUCCESS(所以代码好吗?)
  2. 尝试并启动新的Azure Redis实例,从Azure连接。结果:FAIL(网站无法连接到任何azure Redis实例?)
  3. Spinup NEW Azure网站,与错误代码相同的代码,指向现有的Redis缓存。结果:成功(嗯,什么?)
  4. 提交新的MVC网站,添加StackExchange.Redis,部署到新的Azure网站,连接到Redis。结果:成功(所以Redis好吗?)
  5. 将以上vanilla MVC网站部署到现有的 Azure网站(所以代码与4相同,连接到相同的Redis,唯一不同的是它使用旧的Azure网站物理机/网络)。结果:失败(wtf ??)
  6. 所以 - 我认为Redis已被列入黑名单" Azure网站? (这是可能的吗?)我知道客户端(我的代码)不会尝试并保持重新连接,但我已多次反弹该网站,它只是&# 39;重新连接到Redis。

    启动 Azure网站,相同代码连接到相同的Redis实例会导致成功,这告诉我Azure / Redis中出现了某种黑名单/路由问题。

    有什么想法吗?

    修改

    看起来问题是Azure VNET。当我的网站是Azure虚拟网络的一部分时,它无法连接到Redis。但是,当我把它 out 的网络,它连接正常。在今天之前,这个设置工作正常。

    所以我想知道Azure是否进行了更改,以便VNET中的网站无法连接到Azure Redis? (我知道没有意义)

    编辑2

    附件是Redis连接尝试的日志。

      

    异常:无法连接到redis服务器;至   创建一个断开连接的多路复用器,禁用AbortOnConnectFail。   PING上的SocketFailure   的连接字符串-除去:6380,密码= 密码除去下,SSL =真   连接连接字符串已删除:6380 /互动...   BeginConnect: connection-string-removed :6380 1个唯一节点   指定从 connection-string-removed :6380

    请求抢七      
        

    __ Booksleeve_TieBreak ...允许端点00:00:05响应......等待任务完成,IOCP :(忙碌= 0,自由= 1000,最小值= 1,最大值= 1000),     WORKER :( Busy = 4,Free = 32763,Min = 1,Max = 32767)并非所有任务都已完成     干净利落地,IOCP :(忙碌= 0,自由= 1000,最小= 1,最大= 1000),工人:     (Busy = 5,Free = 32762,Min = 1,Max = 32767) connection-string-removed :6380     没有回复等待任务完成,IOCP:     (Busy = 0,Free = 1000,Min = 1,Max = 1000),WORKER:     (忙= 5,自由= 32762,最小= 1,最大= 32767)并非所有任务都干净完成,     IOCP :(忙碌= 0,自由= 1000,最小值= 1,最大值= 1000),工人:     (Busy = 5,Free = 32762,Min = 1,Max = 32767) connection-string-removed :6380     未能提名(WaitingForActivation)未检测到主人      connection-string-removed :6380:Standalone v2.0.0,master;保持活力:00:01:00; int:连接;子:连接;不使用:     DidNotRespond connection-string-removed :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;跨越10s); sub:0     (0.00 ops / s;跨度10s)同步超时:0;火与忘:0;持续     heartbeat:-1s之前重置失败的连接以重试...重试;     尝试离开:2 ... 1个唯一节点指定请求抢占      connection-string-removed :6380> __Booksleeve_TieBreak ...允许端点00:00:05响应......等待任务完成,IOCP:     (Busy = 0,Free = 1000,Min = 1,Max = 1000),WORKER:     (忙= 6,自由= 32761,最小= 1,最大= 32767)并非所有任务都干净完成,     IOCP :(忙碌= 0,自由= 1000,最小值= 1,最大值= 1000),工人:     (Busy = 7,Free = 32760,Min = 1,Max = 32767) connection-string-removed :6380     没有回复等待任务完成,IOCP:     (Busy = 0,Free = 1000,Min = 1,Max = 1000),WORKER:     (忙= 7,自由= 32760,最小= 1,最大= 32767)并非所有任务都干净完成,     IOCP :(忙碌= 0,自由= 1000,最小值= 1,最大值= 1000),工人:     (Busy = 7,Free = 32760,Min = 1,Max = 32767) connection-string-removed :6380     未能提名(WaitingForActivation)未检测到主人      connection-string-removed :6380:Standalone v2.0.0,master;保持活力:00:01:00; int:连接;子:连接;不使用:     DidNotRespond connection-string-removed :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;跨越10s);     sub:0(0.00 ops / s;跨越10s)同步超时:0;火与忘:0;     last heartbeat:-1s ago之前重置失败的连接重试...     重试;尝试离开:1 ... 1个唯一节点指定请求     来自 connection-string-removed 的抢七局:6380>     __Booksleeve_TieBreak ...允许端点00:00:05响应......等待任务完成,IOCP :(忙碌= 0,自由= 1000,最小值= 1,最大值= 1000),     工人:(忙碌= 8,自由= 32759,最小值= 1,最大值= 32767)EndConnect:      connection-string-removed :6380(套接字关闭)连接完成: connection-string-removed :6380所有任务干净完成,IOCP :(忙碌= 0,自由= 1000 ,Min = 1,Max = 1000),WORKER:     (忙碌= 11,自由= 32756,最小= 1,最大值= 32767)      connection-string-removed :6380出现故障:PING上的SocketFailure正在等待任务完成,IOCP :(忙碌= 0,自由= 1000,最小值= 1,最大值= 1000),     工作人员:(忙碌= 11,自由= 32756,最小值= 1,最大值= 32767)并非所有任务都已完成     干净利落地,IOCP :(忙碌= 0,自由= 1000,最小= 1,最大= 1000),工人:     (Busy = 7,Free = 32760,Min = 1,Max = 32767) connection-string-removed :6380     未能提名(WaitingForActivation)未检测到主人      connection-string-removed :6380:Standalone v2.0.0,master;保持活力:00:01:00; int:连接;子:连接;不使用:     DidNotRespond connection-string-removed :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;跨越10s);     sub:0(0.00 ops / s;跨越10s)同步超时:0;火与忘:0;     last heartbeat:-1s ago

      

    有人可以解读这个吗?

3 个答案:

答案 0 :(得分:2)

我与Azure Web Apps团队合作 - 看起来您的VNET进入了一个特别奇怪的状态,并且正在中断您应用的网络连接。我已经解决了这个问题。

我们非常抱歉给您带来不便......

答案 1 :(得分:0)

我们可能遇到了同样的问题。我能够在没有虚拟网络的情况下将测试应用程序放到Azure中的Web应用程序上,并且它可以开箱即用(使用Stackexchange.Redis)。当我将相同的代码放到虚拟网络的一部分的网络应用程序上时,它无法正常工作。

我设法修复了第一个错误("无法通过将AbortOnConnectFail设置为false来连接到redis服务器..")。然后我收到错误"没有连接可用于服务此操作:EXISTS foo" (=在这种情况下,试图检查密钥是否存在)。

我也可以通过将ConnectTimeout设置为10秒来解决这个问题。所以基本上,我可以让它工作,但这似乎导致长时间延迟(我假设)SE.Redis失去连接并尝试重新连接。

答案 2 :(得分:0)

如果以上帖子没有帮助,您可以查看:

  • 仔细检查您的密码(私钥)是否正确
  • 如果您的应用程序是可执行的,请尝试检查/取消选中项目属性中的“32位首选项”。
  • 尝试从Azure redis端(从ui)关闭ssl并尝试将useSsl设置为false。
  • 下载源代码(从那里:https://github.com/StackExchange/StackExchange.Redis)并尝试调试内部问题。

部分操纵帮助了我。