更改 AWS 的只讀副本的流複製以觸發基於複製
我們有一個 Postgres RDS 實例,我們為其創建了一個只讀副本實例。我們面臨的問題是,只要在只讀副本上有長時間執行的查詢(大約 30-40 分鐘),它就不會完成給出衝突錯誤。此衝突的原因是主 RDS 上有更新,該更新反映到只讀副本,因為它遵循流複製方法。由於這個原因以及新的需求,我們需要每天進行這個複製過程,即我們需要一種基於觸發器的方法(類似於每日備份方法),而不是持續更新。
我在AWS的控制台中看到,我們可以設置各種參數。我可以設置一些參數來滿足我的要求嗎?或者我唯一的出路是刪除只讀副本實例並使用基於觸發器的複制工具(如 Bucardo)並為此使用 EC2 實例?
我真的更喜歡這樣的方法,通過它我可以調整一些參數並實現我的目標,而不必刪除只讀副本實例。
我們面臨的問題是,只要在只讀副本上有長時間執行的查詢(大約 30-40 分鐘),它就不會完成給出衝突錯誤。
此行為由參數max_standby_streaming_delay / max_standby_archive_delay 控制。您可以在只讀副本實例使用的 RDS 參數組中調整這些參數,以便有更多時間完成對只讀副本的查詢。
由於這個原因以及新的需求,我們需要每天進行這個複製過程,即我們需要一種基於觸發器的方法(類似於每日備份方法),而不是持續更新。
如果您希望每晚刷新主數據庫的快照,您可以使用每晚還原 RDS 快照的 cron 作業來實現。我認為 RDS 沒有自動為您執行此操作的按鈕,但使用 AWS CLI編寫夜間create-db-snapshot + restore-db-instance-from-db-snapshot應該不會太難,或 boto,或任何您喜歡的 AWS 介面。您甚至可以維護一個始終指向最新實例的 Route53 條目,並讓舊實例在被殺死之前逗留一天左右,這樣一夜之間針對現有實例執行的會話就不會被中斷。
我在AWS的控制台中看到,我們可以設置各種參數。我可以設置一些參數來滿足我的要求嗎?或者我唯一的出路是刪除只讀副本實例並使用基於觸發器的複制工具(如 Bucardo)並為此使用 EC2 實例?
假設現在 RDS Postgres 支持會話複製角色,可以將 Bucardo 連接到 RDS,但是如果您想要夜間快照,我認為使用 RDS 實例快照會更好。