將網路成本降至最低的最佳 PostgreSQL 複製解決方案
我正在研究 PostgreSQL 複製解決方案。我知道這些解決方案有兩種
- 低級 - 涉及 PostgreSQL 9.x 中可用的流式日誌傳送、熱備份功能
- 高級 - Slony, Londiste 在 SQL 查詢級別工作
我的數據庫不是很忙,也不是很大(至少現在是這樣)。但我想避免由於 Amazon EC2 故障(例如最近發生的故障)而導致的停機。我的解決方案是在不同的可用區中維護一個從站,它將與我的主數據庫實例保持同步。這樣我就可以在 master 宕機時故障轉移到它。需要考慮的一點是,這將需要從主伺服器到從伺服器的持續複製數據,這將是跨 EC2 可用區的網路流量。它不是免費的。現在每 GB 的成本為 1 美分,但在閱讀了 PostgreSQL 食譜中的一些計算後,我了解到即使數據庫流量很低,成本也會變得非常高。例如,在“PostgreSQL 9 Administration Cookbook”的“熱物理備份和連續歸檔”一章中,我讀到:
如果 archive_timeout 設置為 30 秒,我們每天將至少生成 26024 = 2880 個文件,每個大小為 16 MB,因此每天的總容量為 46 GB(最小)
$$ and that I assume with minimum traffic on the DB $$ 我唯一的要求是,在主伺服器上執行的每個寫入 SQL 查詢都應該在從伺服器上重放。如果這是在事件回調中完成的,那麼這將是完美的,因為只有在修改 DB 時才會在主從之間進行數據傳輸,而不是每 30 秒左右,即使沒有發生對 DB 的更改。
因此,我認為 Londiste 可能是我的解決方案,但我不能 100% 確定它是否可以這樣工作。
你有什麼建議?
經過一周的研究,我相信PostgreSQL 實例
Streaming Log Shipping
的Hot Standby
配置可以滿足我即時複製的需求(最小的數據失去視窗),但網路流量低。我已經寫了一篇關於如何設置它的詳細部落格文章。可能還有其他解決方案,使用 pgpool 之類的 3rd 方工具,但我沒有取得太大的成功。
看看pgpool。在我的工作中,我們在生產中使用它,到目前為止我們非常滿意。您顯然仍想進行備份,因為它不能保護您免受 SQL 查詢錯誤的影響,但它可以很好地完成同步/複製。