コンテンツにスキップ
コンソール

12/12 TREM 檢知重複觸發問題

このコンテンツはまだ日本語訳がありません。

嚴重程度:中狀態:已結案
發生時間
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;
}
  1. 兩個 upstream 的資料不一致

    tnn.exptech.dev 和 tpe.exptech.dev 的資料不一致。

  2. 一致性雜湊把請求分到不同 upstream

    使用 hash $remote_addr consistent; 時,請求可能被分配到不同的 upstream。

  3. 不一致的資料寫入 cache

    從不同的 upstream 取得資料時,會將不一致的資料寫入 cache。

  4. 後續請求讀到被污染的 cache

    資料狀態因此混亂。

  5. 檢知重複觸發

    進而引發 TREM Lite 檢知重複觸發。

Nginx upstream 改成下面的設定:

終端機視窗
upstream core_servers {
server tnn.exptech.dev:80 max_fails=1 fail_timeout=10s;
server tpe.exptech.dev:80 backup;
}
  1. 主伺服器設定: tnn.exptech.dev 設為主伺服器,並設定故障檢測參數

    • max_fails=1:允許最多 1 次失敗
    • fail_timeout=10s:故障後 10 秒內不再嘗試該伺服器
  2. 備援伺服器設定: tpe.exptech.dev 設為備援伺服器(backup)

    只在主伺服器不可用時才會使用。

  3. 移除一致性雜湊: 避免請求被分配到不同的 upstream 伺服器

  4. 單一資料來源: 使用主備模式,讓所有請求都從同一個資料來源取得資料,避免不同 upstream 的資料不一致污染 cache