DigitalOcean ロードバランサのヘルスチェックが CodeIgniter セッションを圧迫している

DigitalOcean ロードバランサのヘルスチェックが CodeIgniter セッションを圧迫している

しばらく前からこの問題を解決しようとしていますが、今のところ成功していません。DigitalOcean サポートに数回問い合わせましたが、さらに困惑しています。

私は次の設定をしています: ドメインは、codeigniter で構築された私のアプリをホストする 2 つのアプリ ドロップレットの前面にある DO ロードバランサーを指しています。3 つ目のドロップレットには私のデータベース サーバーがあります。アプリ サーバーは PHP7 で、php+fpm を使用しています。

アプリのドロップレットは負荷分散されているため、データベース上でセッションを処理しますが、これはユーザーの観点からは問題なく機能します。

LB ヘルス チェックは HTTP 上で 10 秒ごとに実行されるように設定されており、ターゲットは codeigniter によって生成されたページです。

これまでのまとめ: ヘルス チェックは 10 秒ごとに (1 分あたり 6 回) 2 つのドロップレットに送信されるので、1 分あたり合計 12 回のヘルス チェックが予想されます。DO が自動フェイルオーバーをサイレントに実行することを考えると、その数は実際には 1 分あたり 24 回のチェック (フェイルオーバー LB からもチェックが送信された場合) となり、1 時間あたり 1440 回になると考えられます。セッション テーブルにはプライベート範囲内の 2 つの別個の連続した IP からのトラフィックが同量あるため、"二重" チェックは実際に発生します。

問題: 実際には、ロード バランサーから予想されるセッション数のちょうど 4 倍が表示されています (1 時間あたり約 1,440 セッションではなく、1 時間あたり約 5,760 セッションという一貫した数値が表示されています)。DigitalOcean では原因を突き止めることができませんでした。

テーブルを小さく保つために空のセッションを 1 日に数回クリアするガベージ コレクション (適切な名前がないため) があるため、セッションの量は実際の問題ではありませんが、これについては困惑しています。ヘルス チェックの間隔を少し空けたり、セッション ハンドラー ライブラリを起動しない URL にチェックを指定したりすることはできますが、どちらの軽減策も目的に反します。

このような動作を見た人はいますか? 何かアイデアはありますか? 私はこれを約 1 か月間追跡しています。

答え1

ロードバランサーの内部動作に関する詳細な知識がない場合:

ヘルスチェックは、ロードバランサーで定義されている各エントリ ポイント、各サービスに代わって実行されると思われます。

同じバックエンドに HTTP エントリ ポイントと HTTPS エントリ ポイントの両方がある場合、個別のヘルス チェックが 2 つ実行され、表示されるリクエストの数が 2 倍になります。

関連情報