[RCA] 12/12 TREM 檢知重複觸發問題
· 約2分
嚴重程度中
狀態已結案
事件概述
- 發生時間: 2025/12/12 04:24:28 UTC+8
- 觸發條件: 地震後
- 問題描述: TREM Lite 出現檢知重複觸發的問題
- 根本原因: upstream 資料不一致污染 cache,導致系統異常
根本原因分析
問題根源
Balance Server 上的 Nginx 使用了以下負載平衡設定:
upstream core_servers {
server tnn.exptech.dev:80;
server tpe.exptech.dev:80;
hash $remote_addr consistent;
}
問題說明
問題主因:
當系統從不同的 upstream 取得資料時,會將不一致的資料寫入 cache。
- 兩個 upstream 伺服器(
tnn.exptech.dev和tpe.exptech.dev)的資料不一致 - 使用一致性雜湊(
hash $remote_addr consistent;)時,請求可能被分配到不同的 upstream - 當系統從不同的 upstream 取得資料時,會將不一致的資料寫入 cache
- 後續請求讀取到被污染的 cache 資料,導致資料狀態混亂
- 進而引發 TREM Lite 檢知重複觸發的問題
解決方案
修改後的設定
將 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
後續觀察
經觀察後,故障應該已經排除。建議持續監控系統狀態,確保問題不再發生。
