以下の構成でセッション サーバーとして redis を使用しようとしたときに問題が発生しました。
- https://github.com/Azure/aspnet-redis-providersで同じアプリケーションをホストする複数の Windows サーバー
- 重み付けされたルーティングを備えたエラスティック ロード バランサーは、要求をすべての IIS サーバーにリダイレクトします。
- Redis は AWS エラスティック キャッシュでホストされ、両方のサーバーからアクセスできます
Redis は一度に 1 つのサーバーのセッション サーバーとして問題なく機能します
セッションごとに 3 つのキーが作成されます
"{/_ktffpxxxxxxg2xixdnhe}_Write_Lock"
"{/_ktffpxxxxxxg2xixdnhe}_Data"
"{/_ktffpxxxxxxg2xixdnhe}_Internal"
問題: 1 つ以上のサーバーが同じインスタンスで redis からセッションにアクセスして同じユーザーにサービスを提供しようとすると、server1 が配置されている_Write_Lock
場合、server2 はデータの読み取り + 更新タイムアウトまたは書き込みに失敗し、その後キーをクリアします
--> その結果、どのサーバーに対するユーザーの次のリクエストでも、セッションの検証に失敗します。
この問題が発生するのは私だけですか?? 助けてください ...
注: ELB でセッション スティッキを有効にすると、サインアウトは断続的ではありませんが、そのサーバーのすべてのユーザー セッションを失うことなく、アップグレードのためにサーバーを取り出すことが制限されます。