![DigitalOcean ロードバランサのヘルスチェックが CodeIgniter セッションを圧迫している](https://rvso.com/image/726398/DigitalOcean%20%E3%83%AD%E3%83%BC%E3%83%89%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B5%E3%81%AE%E3%83%98%E3%83%AB%E3%82%B9%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%8C%20CodeIgniter%20%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%9C%A7%E8%BF%AB%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B.png)
しばらく前からこの問題を解決しようとしていますが、今のところ成功していません。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 倍になります。