![DigitalOcean 負載平衡器運作狀況檢查淹沒了我的 CodeIgniter 會話](https://rvso.com/image/726398/DigitalOcean%20%E8%B2%A0%E8%BC%89%E5%B9%B3%E8%A1%A1%E5%99%A8%E9%81%8B%E4%BD%9C%E7%8B%80%E6%B3%81%E6%AA%A2%E6%9F%A5%E6%B7%B9%E6%B2%92%E4%BA%86%E6%88%91%E7%9A%84%20CodeIgniter%20%E6%9C%83%E8%A9%B1.png)
我已經嘗試解決這個問題有一段時間了,但到目前為止還沒有成功。在聯絡 DigitalOcean 支援幾次後,我更加迷失了。
我有以下設定:網域指向一個 DO 負載平衡器,該負載平衡器位於託管我的基於 codeigniter 建置的應用程式的兩個應用程式 Droplet 的前面。第三個 Droplet 擁有我的資料庫伺服器。應用程式伺服器是 PHP7 和 php+fpm
由於應用程式 Droplet 是負載平衡的,因此我處理資料庫上的會話,從使用者的角度來看,這運作得很好。
LB 運行狀況檢查配置為在 HTTP 上每 10 秒執行一次,目標是 codeigniter 產生的頁面。
到目前為止的總結:由於每 10 秒(每分鐘 6 次)針對 2 個液滴進行一次健康檢查,因此我預計每分鐘總共會進行 12 次健康檢查。鑑於 DO 靜默地具有自動故障轉移,我們可以假設該數字實際上是每分鐘 24 次檢查(如果它們也從故障轉移 LB 發送檢查),因此每小時 1440 次。 「雙重」檢查實際上是現實,因為我的會話表具有來自私有範圍內兩個不同且連續的 IP 的相同流量。
問題是:我實際上看到的會話量是我期望的負載平衡器會話量的 4 倍(而不是每小時約 1440 個會話,我看到的是每小時約 5760 個會話的一致數字)。 DigitalOcean 無法弄清楚。
會話數量並不是真正的問題,因為我有一個垃圾收集(由於缺乏更好的名稱),每天多次清除空會話以保持表較小,但我對此感到困惑。我知道我可以稍微間隔一下運行狀況檢查,或者將檢查指向不會啟動會話處理程序庫的 URL,但這兩種緩解措施都達不到目的。
有人看過這樣的行為嗎?有任何想法嗎?我已經追這個了大約一個月了。
答案1
如果不詳細了解負載平衡器的內部運作原理:
我懷疑運行狀況檢查是代表每個入口點、負載平衡器中定義的每個服務執行的。
如果您有一個 HTTP 和一個 HTTPS 入口點,並且兩者都進入同一後端,那麼將導致兩個單獨的運行狀況檢查,從而使您看到的請求數量加倍。