5

警告: わかりましたので、これは奇妙なものであり、SO が適切な場所であるかどうかはわかりません。

Azure Redis Cache インスタンスに接続する Azure Web サイトがあります。(StackExchange.Redis を使用)

すべてが素晴らしかったのですが、ある日、Web サイトが Redis に接続できなくなりました。

エラー:

redis サーバーに接続できませんでした。切断されたマルチプレクサを作成するには、AbortOnConnectFail を無効にします。PING での SocketFailure

ここに私の接続文字列があります:

mycache.redis.cache.windows.net,ssl=true,パスワード=xxxxxx,syncTimeout=5000

私の診断手順は次のとおりです。

  1. ローカルから Azure Redis に接続してみてください。結果: 成功 (つまり、コードは適切ですか?)
  2. 新しい Azure Redis インスタンスを試してスピンアップし、Azure から接続します。結果: 不合格 (Web サイトが Azure Redis インスタンスに接続できない場合)
  3. 既存の Redis キャッシュを指す、エラー コードと同じコードを使用して、新しい Azure Web サイトをスピンアップします。結果: 成功 (うーん、何?)
  4. 新しい MVC Web サイトをファイルし、StackExchange.Redis を追加し、新しい Azure Web サイトにデプロイして、Redis に接続します。結果: 成功 (つまり、Redis は優れているのでしょうか?)
  5. 上記のバニラ MVC Web サイトを既存のAzure Web サイトにデプロイします (コード 4 と同じで、同じ Redis に接続します。違いは、古い Azure Web サイトの物理マシン/ネットワークを使用していることだけです)。結果: 失敗 (wtf ??)

では、Redis が Azure Web サイトを「ブラックリストに載せた」と考えているのでしょうか? (それも可能ですか?)クライアント(私のコード) が再接続しようとしないことはわかっていますが、サイトを何度もバウンスしましたが、Redis に再接続できません。

同じ Redis インスタンスに接続する同じコードを使用して新しいAzure Web サイトをスピンアップすると成功するという事実は、Azure/Redis で何らかのブラックリスト/ルーティングの問題が発生したことを示しています。

何か案は?

編集

問題は Azure VNET にあるようです。私の Web サイトが Azure Virtual Network の一部である場合、Redis に接続できません。しかし、ネットワークから外すと、問題なく接続されます。今日まで、このセットアップは正常に機能していました。

VNET 内の Web サイトが Azure Redis に接続できないように、Azure が変更を行ったのではないでしょうか? (意味がわからない)

編集2

Redis 接続試行のログが添付されています。

例外: redis サーバーに接続できませんでした。切断されたマルチプレクサを作成するには、AbortOnConnectFail を無効にします。SocketFailure on PING connection-string-removed :6380,password= password-removed ,ssl=True Connecting connection-string-removed :6380/Interactive... BeginConnect: connection-string-removed :6380 1 つの一意のノードが指定されました タイブレークを要求していますfrom connection-string-removed :6380

__Booksleeve_TieBreak... エンドポイント 00:00:05 の応答を許可しています... タスクの完了を待機中、IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=4,Free=32763 ,Min=1,Max=32767) すべてのタスクが正常に完了したわけではありません, IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=5,Free=32762,Min=1, Max=32767) connection-string-removed :6380 が応答しませんでした タスクの完了を待っています、IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=5,Free=32762,Min =1,Max=32767) すべてのタスクが正常に完了したわけではありません。IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=5,Free=32762,Min=1,Max= 32767) connection-string-removed : 6380 の指定に失敗しました (WaitingForActivation) マスターが検出されませんでした connection-string-removed:6380: スタンドアロン v2.0.0、マスター。キープアライブ: 00:01:00; int: 接続中。サブ: 接続中; 使用されていません: DidNotRespond接続文字列が削除されました:6380: int ops=0、qu=2、qs=0、qc=0、wr=0、socks=1; サブ ops=0、qu=0、qs=0、qc=0、wr=0、socks=1 循環 op-count スナップショット。int: 0 (0.00 ops/s; スパン 10 秒); サブ: 0 (0.00 ops/s; スパン 10 秒) 同期タイムアウト: 0; 発射して忘れる: 0; 最後のハートビート: -1 秒前に失敗した接続をリセットして再試行しています... 再試行しています。残りの試行回数: 2... 1 つの一意のノードが指定されました 接続文字列からタイブレークを要求してい ます-削除:6380 > __Booksleeve_TieBreak... エンドポイント 00:00:05 の応答を許可しています... タスクの完了を待っています。IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=6, Free=32761,Min=1,Max=32767) すべてのタスクが正常に完了したわけではありません, IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=7,Free=32760,Min =1,Max=32767) connection-string-removed :6380 が応答しませんでした タスクの完了を待っています、IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=7,Free= 32760,Min=1,Max=32767) すべてのタスクが正常に完了したわけではありません, IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=7,Free=32760,Min=1 、最大 = 32767)接続文字列が削除されました: 6380 指名に失敗しました (WaitingForActivation) マスターが検出されませんでした 接続文字列が削除されました:6380: スタンドアロン v2.0.0、マスター。キープアライブ: 00:01:00; int: 接続中。サブ: 接続中; 使用されていません: DidNotRespond接続文字列が削除されました:6380: int ops=0、qu=2、qs=0、qc=0、wr=0、async=3、socks=2; サブ ops=0、qu=0、qs=0、qc=0、wr=0、socks=2 循環 op-count スナップショット。int: 0 (0.00 ops/s; スパン 10 秒); サブ: 0 (0.00 ops/s; スパン 10 秒) 同期タイムアウト: 0; 発射して忘れる: 0; 最後のハートビート: -1 秒前に失敗した接続をリセットして再試行しています... 再試行しています。残りの試行: 1... 1 つの一意のノードが指定されました接続文字列からのタイブレークを要求しています-削除:6380 > __Booksleeve_TieBreak... エンドポイント 00:00:05 が応答できるようにしています... タスクの完了を待っています、IOCP: (Busy=0 ,Free=1000,Min=1,Max=1000), WORKER: (Busy=8,Free=32759,Min=1,Max=32767) EndConnect: connection-string-removed :6380 (ソケットのシャットダウン) Connect complete: connection-string-removed :6380 すべてのタスクが正常に完了、IOCP: (Busy=0,Free=1000,Min=1,Max=1000)、WORKER: (Busy =11,Free=32756,Min=1,Max=32767) connection-string-removed :6380 faulted: SocketFailure on PING タスク完了待ち, IOCP: (Busy=0,Free=1000,Min=1,Max=1000) , WORKER: (Busy=11,Free=32756,Min=1,Max=32767) すべてのタスクが正常に完了したわけではありません, IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy =7,Free=32760,Min=1,Max=32767) connection-string-removed : 6380 の指定に失敗しました (WaitingForActivation) マスターが検出されませんでした connection-string-removed:6380: スタンドアロン v2.0.0、マスター。キープアライブ: 00:01:00; int: 接続中。サブ: 接続中; 使用されていません: DidNotRespond接続文字列が削除されました:6380: int ops=0、qu=2、qs=0、qc=0、wr=0、async=7、socks=3; サブ ops=0、qu=0、qs=0、qc=0、wr=0、socks=3 循環 op-count スナップショット。int: 0 (0.00 ops/s; スパン 10 秒); サブ: 0 (0.00 ops/s; スパン 10 秒) 同期タイムアウト: 0; 発射して忘れる: 0; 最後のハートビート: -1 秒前

誰でもこれを解読できますか?

4

3 に答える 3

2

私は Azure Web Apps チームに所属しています。VNET が特に奇妙な状態になり、アプリのネットワーク接続が中断されていたようです。この動作を修正しました。

ご不便をおかけして誠に申し訳ございません...

于 2015-06-24T18:26:34.323 に答える
0

上記の投稿が役に立たなかった場合は、次を確認してください。

  • パスワード(秘密鍵)が正しいことを再確認してください
  • アプリが実行可能である場合は、プロジェクトのプロパティで「32ビット優先」をチェック/チェック解除してみてください。
  • Azure redis 側 (ui から) から ssl をオフにして、useSsl を false に設定してみてください。
  • ソースコードをダウンロードして (そこから: https://github.com/StackExchange/StackExchange.Redis )、内部の問題をデバッグしてみてください。

その操作の一部が私を助けました。

于 2015-09-29T20:11:20.387 に答える