跳轉到

RDS Multi-Env Replication Slot Conflict

概念概覽

Replication Slot 的核心限制

核心知識

Replication Slot 的核心限制

PostgreSQL Replication Slot 一次只允許**一個 active consumer**。若兩個 Bridge Pod 嘗試連接同一個 Slot,後者會報 slot already in use 錯誤並被拒絕。

多環境共用 RDS instance 的兩種方案

方案 A(推薦):每個 DB 建立獨立的 Slot

game_slot_snapshot  →  snapshot DB  →  Bridge Pod A
game_slot_uat       →  uat DB       →  Bridge Pod B

方案 B:單一 Slot + 單一 Bridge Pod,Pod 同時重啟多個環境的 Deployment - 適用於多環境共用同一個 DB(而非不同 DB) - 單 Pod 故障影響範圍擴大

多站點不同 DB 的決策依據

當各環境使用**不同的 Database**(非同一個 DB)時,Slot 是 per-database 概念,必須在各自的 DB 內建立: - Slot 無法跨 Database 共用 - 因此多站點不同 DB 必然需要方案 A(各自獨立 Slot)

經驗教訓

  • Slot 是 per-database 概念,不同 DB 的 Slot 天然隔離,不存在共用的選項

  • 多環境 Slot 策略若設計錯誤,在高流量或多人觸發時會出現難以排查的 slot already in use 錯誤

  • 「多站點共用同一 RDS instance」≠「可以共用同一個 Slot」,需要區分 instance 層與 database 層

常見陷阱

  • 誤以為「共用同一個 RDS instance」就可以共用同一個 Slot,實際上 Slot 是 per-database 的

  • 忘記為新增環境建立對應的 Slot,導致新環境的 Bridge Pod 啟動後一直報連線失敗

最佳實踐

  • Slot 命名規範建議加入環境識別:game_slot_{env},如 game_slot_snapshot、game_slot_uat

  • 每個 Bridge Pod 只負責一個 Slot,保持職責清晰,避免單點故障影響多環境

  • 定期清理不再使用的 Slot,防止 WAL 堆積導致 RDS 磁碟空間耗盡

相關概念

來源 Sessions

日期 Session 貢獻摘要

| 2026-04-14 | c68e794c-bec7-485d-8225-971a172f956c | 釐清多站點共用同一 RDS instance 但不同 DB 時的 Slot 衝突根因,並確認每個 DB 應建立獨立 Slot 的正確策略 |


本概念頁面由 Semi-Brain Wiki 系統自動維護

最後更新: 2026-04-14