Amazon-Ec2
當數據庫和應用程序在 Amazon EC2 的同一實例上執行時如何進行負載平衡
我有在同一個 Ec2 實例上執行我的應用程序和 Postgresql 數據庫的情況。Postgresql 的數據保存在與實例的根卷不同的另一個 EBS 卷上。
如果我想通過創建另一個實例來平衡這個設置,那麼:
- 有哪些技術可以幫助我使兩個實例上的數據庫保持同步?
- 這些技術的優缺點是什麼?
- 使用單獨的數據庫伺服器是否比經歷上述麻煩更好?(現在我避免使用單獨的數據庫實例的主要原因是保持在免費層內)
為了使 PostgreSQL 數據庫保持同步,您需要一個可以寫入的主數據庫,以及一個或多個使用 PostgreSQL 內置複製跟隨它的只讀從屬數據庫。請參閱使用者手冊。PostgreSQL 本身不支持多主複製(所有副本都是可寫的)。
但是,在這種情況下,我無法想像您出於負載原因需要第二個數據庫。如果您使用的是 EC2 免費套餐,那麼您使用的是嚴重受限的微型實例,並且 EBS 上的磁碟 I/O 性能很差。使用 EBS 優化的大型實例以及由四個 EBS 預置 IOPS 卷組成的條帶 raid10 陣列,您將獲得*一千(或更多)倍的性能。*即使是普通的中型實例也可能表現得更好。我最近寫了一些關於這個的。
在這一點上嘗試向外擴展對於性能來說是完全沒有必要的。但是,對於數據保護和冗餘來說,這是一個好主意。考慮使用
barman
with hook 腳本將基本備份和 WAL 存檔儲存在 S3 中,或者在執行主伺服器的流式副本的不同可用區中添加第二個 PostgreSQL 伺服器。記住也要在 AWS 之外保留良好的備份,例如每晚的數據庫轉儲。