Mysql

DigitalOcean 負載均衡器執行狀況檢查淹沒了我的 CodeIgniter 會話

  • August 28, 2018

我一直在嘗試解決這個問題一段時間,但到目前為止還沒有成功。在聯繫了 DigitalOcean 支持幾次後,我更加迷茫了。

我有以下設置:域指向一個 DO 負載均衡器,它位於兩個應用程序 droplet 的前面,託管我基於 codeigniter 建構的應用程序。第三個水滴有我的數據庫伺服器。應用伺服器是 PHP7 和 php+fpm

由於應用程序 Droplet 是負載平衡的,因此我在數據庫上處理會話,從使用者的角度來看,這可以正常工作。

LB 健康檢查配置為在 HTTP 上每 10 秒執行一次,目標是 codeigniter 生成的頁面。

到目前為止的總結:由於健康檢查每 10 秒(每分鐘 6 次)針對 2 個液滴,我預計每分鐘總共進行 12 次健康檢查。鑑於 DO 靜默具有自動故障轉移,我們可以假設該數字實際上是每分鐘 24 次檢查(如果他們還從故障轉移 LB 發送檢查),因此每小時 1440 次。“雙重”檢查實際上是現實,因為我的會話表具有來自私有範圍內兩個不同且連續的 IP 的等量流量。

問題:我實際上看到的會話數量是我期望負載均衡器的 4 倍(而不是每小時約 1440 個,我看到的一致數字是每小時約 5760 個會話)。DigitalOcean 無法弄清楚。

會話數量不是一個真正的問題,因為我有一個垃圾收集器(因為沒有更好的名稱),它每天多次清除空會話以保持表小,但我對此感到困惑。我知道我可以只對健康檢查進行一點空間檢查,或者將檢查指向不啟動會話處理程序庫的 URL,但這兩種緩解措施都達不到目的。

有沒有人見過這樣的行為?有任何想法嗎?我已經追了大約一個月了。

如果不詳細了解負載均衡器的內部工作原理:

我懷疑健康檢查是代表每個入口點執行的,每個服務在負載均衡器中定義。

如果你有一個 HTTP 和一個 HTTPS 入口點都去同一個後端,這將導致兩個單獨的健康檢查,你看到的請求數量加倍。

引用自:https://serverfault.com/questions/928340