12/12 TREM 檢知重複觸發問題
嚴重程度:中狀態:已結案
- 發生時間
- 2025/12/12 04:24:28 (UTC+8)
- 觸發條件
- 地震後
- 問題描述
- TREM Lite 出現檢知重複觸發的問題
- 根本原因
- upstream 資料不一致污染 cache,導致系統異常
根本原因分析
Section titled “根本原因分析”Balance Server 上的 Nginx 使用了以下負載平衡設定:
upstream core_servers { server tnn.exptech.dev:80; server tpe.exptech.dev:80;
hash $remote_addr consistent;}-
兩個 upstream 的資料不一致
tnn.exptech.dev和tpe.exptech.dev的資料不一致。 -
一致性雜湊把請求分到不同 upstream
使用
hash $remote_addr consistent;時,請求可能被分配到不同的 upstream。 -
不一致的資料寫入 cache
從不同的 upstream 取得資料時,會將不一致的資料寫入 cache。
-
後續請求讀到被污染的 cache
資料狀態因此混亂。
-
檢知重複觸發
進而引發 TREM Lite 檢知重複觸發。
修改後的設定
Section titled “修改後的設定”Nginx upstream 改成下面的設定:
upstream core_servers { server tnn.exptech.dev:80 max_fails=1 fail_timeout=10s; server tpe.exptech.dev:80 backup;}-
主伺服器設定:
tnn.exptech.dev設為主伺服器,並設定故障檢測參數max_fails=1:允許最多 1 次失敗fail_timeout=10s:故障後 10 秒內不再嘗試該伺服器
-
備援伺服器設定:
tpe.exptech.dev設為備援伺服器(backup)只在主伺服器不可用時才會使用。
-
移除一致性雜湊: 避免請求被分配到不同的 upstream 伺服器
-
單一資料來源: 使用主備模式,讓所有請求都從同一個資料來源取得資料,避免不同 upstream 的資料不一致污染 cache
