標籤:
目錄[-]
- 一、高可用性、負載平衡、複製的幾個方案比較:
- 二、多節點叢集方案比較
9.3官方文檔(中文):http://58.58.27.50:8079/doc/html/9.3.1_zh/high-availability.html
複製、叢集和串連池: https://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling
叢集方案功能列表: http://blog.osdba.net/46.html
一、高可用性、負載平衡、複製的幾個方案比較:
共用磁碟失效切換
共用磁碟失效切換通過僅儲存一份資料庫副本來避免花在同步上的開銷。 這個方案讓多台伺服器共用使用一個單獨的磁碟陣列。 如果主伺服器失效,備份伺服器將立即掛載該資料庫, 就像是從一次崩潰中恢複一樣。這個方案允許快速的失效切換並且不會遺失資料。
共用硬體的功能通常由網路存放裝置提供, 也可以使用完全符合POSIX行為的網路檔案系統(參閱Section 17.2.1)。 這種方案的局限性在於如果共用的磁碟陣列損壞了, 那麼整個系統將會癱瘓。 另一個局限是備份伺服器在主伺服器正常啟動並執行時候不能訪問共用的儲存空間。
檔案系統複製(塊裝置)
一種改進的方案是檔案系統複製:對檔案系統的任何更改都將鏡像到備份伺服器上。 這個方案的唯一局限是必須確保備份伺服器的鏡像與主伺服器完全一致— 特別是寫入順序必須完全相同。DRBD是Linux上的一種流行的檔案系統複製方案。
交易記錄傳送
熱備份伺服器可以通過讀取WAL記錄流來保持資料庫的目前狀態。 如果主伺服器失效,那麼熱備份伺服器將包含幾乎所有主伺服器的資料, 並可以迅速的將自己切換為主伺服器。這是一個非同步方案, 並且只能在整個資料庫伺服器上實施。
使用基於檔案的記錄傳送或流複製,或兩者相結合。 前者參閱Section 25.2, 後者參閱Section 25.2.5。 請參閱Section 25.5擷取關於熱備的資訊。
基於觸發器的主備複製
這個方案將所有修改資料的請求發送到主伺服器。 主伺服器非同步向從伺服器發送資料的更改資訊。 從伺服器在主伺服器啟動並執行情況下只應答讀請求。對於資料倉儲的請求來說, 從伺服器非常理想的。
Slony-I是這個方案的一個例子,它支援針對每個表的粒度並支援多個從伺服器。 因為它非同步、批量的更新從伺服器, 在失效切換的時候可能會有資料丟失。
基於語句的複製中介軟體
可以使用一個基於語句的複製中介軟體程式截取每一個SQL查詢, 並將其發送到某一個或者全部伺服器。每一個伺服器都獨立運行。 讀-寫請求發送給所有伺服器,所以每個伺服器接收到任何變化。但是只 讀請求則僅發送給某一個伺服器,從而實現讀取的負載平衡。
如果只是簡單的廣播修改資料的SQL語句, 那麼類似random()
, CURRENT_TIMESTAMP
以及序列函數在不同的伺服器上將產生不同的結果。 這是因為每個伺服器都獨立運行並且廣播的是SQL語句而不是如何對行進行修改。 如果這種結果是不可接受的,那麼中介軟體或者應用程式必須保證始終從同 一個伺服器讀取這些值並將其應用到寫入請求中。 另外還必須保證每一個事務必須在所有伺服器上全部提交成功或者全部復原, 或者使用兩階段交易認可(PREPARE TRANSACTION 和COMMIT PREPARED)。 Pgpool-II和Continuent Tungsten是這種方案的執行個體。
非同步多主伺服器複製
對於那些不規則已連線的服務器(比如膝上型電腦或遠程伺服器), 要在它們之間保持資料一致是很麻煩的。 在這個方案中,每台伺服器都獨立工作並周期性的與其他伺服器通訊以識別相互衝突的事務。 可以通過使用者或者衝突判決規則處理出現的衝突。
同步多主伺服器複製
在這種方案中,每個伺服器都可以接受寫入請求, 修改的資料將在事務被提交之前必須從原始伺服器廣播到所有其它伺服器。 過多的寫入動作將導致過多的鎖定,從而導致效能低下。 事實上,在多台伺服器上同時寫的效能總是比在單獨一台伺服器上寫的效能低。 讀請求將被均衡的分散到每台單獨的伺服器。 某些實現使用共用磁碟來減少通訊開銷。 同步多主伺服器複製方案最適合於讀取遠多於寫入的場合。 它的優勢是每台伺服器都能接受寫請求—因此不需要在主從伺服器之間劃分工作負載。 因為在伺服器之間發送的是資料的變化, 所以不會對非確定性函數(比如random()
)造成不良影響。
PostgreSQL不提供這種類型的複製。 但是PostgreSQL的兩階段交易認可(PREPARE TRANSACTION和 COMMIT PREPARED) 可以用於在應用程式層或中介軟體代碼中實現這個功能。
商業解決方案
因為PostgreSQL是開放原始碼並且很容易被擴充, 許多公司在PostgreSQL的基礎上建立了商業的閉源解決方案, 提供獨特的失效切換、複製、負載平衡功能。
Feature |
Shared Disk Failover |
File System Replication |
Transaction Log Shipping |
Trigger-Based Master-Standby Replication |
Statement-Based Replication Middleware |
Asynchronous Multimaster Replication |
Synchronous Multimaster Replication |
Most Common Implementation |
NAS |
DRBD |
Streaming Repl. |
Slony |
pgpool-II |
Bucardo |
|
Communication Method |
shared disk |
disk blocks |
WAL |
table rows |
SQL |
table rows |
table rows and row locks |
No special hardware required |
|
• |
• |
• |
• |
• |
• |
Allows multiple master servers |
|
|
|
|
• |
• |
• |
No master server overhead |
• |
|
• |
|
• |
|
|
No waiting for multiple servers |
• |
|
with sync off |
• |
|
• |
|
Master failure will never lose data |
• |
• |
with sync on |
|
• |
|
• |
Standby accept read-only queries |
|
|
with hot |
• |
• |
• |
• |
Per-table granularity |
|
|
|
• |
|
• |
• |
No conflict resolution necessary |
• |
• |
• |
• |
|
|
• |
有幾個解決方案不適合上邊這些分類:
資料分區
資料分區將表拆分為資料集。每個資料集只有一台伺服器可以修改。 例如,資料可以按辦事處進行分區,例如, 倫敦和巴黎,每個辦公室用一個伺服器。 如果查詢需要倫敦和巴黎相結合的資料,應用程式可以查詢兩台伺服器, 或主/備用複製可以用來保持每個伺服器上有其他辦公室的唯讀資料副本。
多伺服器並行查詢執行
許多上述解決方案允許多個伺服器來處理多個查詢, 但不是允許單個查詢使用多個伺服器來更快完成。 此解決方案允許多個伺服器上單個查詢同時運行。 它通常被通過伺服器之間的資料分開而執行其查詢的一部分, 並將結果返回到中央伺服器,由它來聯合結果並返回給使用者。 Pgpool-II有這種能力。 也可以使用PL/Proxy工具集實現。
二、多節點叢集方案比較
可以基於Replication Stream(流複製)。
Program |
License |
Maturity |
Replication Method |
Sync |
Connection Pooling |
Load Balancing |
Query Partitioning |
PgCluster |
BSD |
Stalled暫停 |
Master-Master |
Synchronous |
No |
Yes |
No |
pgpool-I |
BSD |
Stable |
Statement-Based Middleware |
Synchronous |
Yes |
Yes |
No |
Pgpool-II |
BSD |
Recent release |
Statement-Based Middleware |
Synchronous |
Yes |
Yes |
Yes |
slony |
BSD |
Stable |
Master-Slave |
Asynchronous |
No |
No |
No |
Bucardo |
BSD |
Stable |
Master-Master, Master-Slave |
Asynchronous |
No |
No |
No |
Londiste |
BSD |
Stable |
Master-Slave |
Asynchronous |
No |
No |
No |
Mammoth |
BSD |
Stalled |
Master-Slave |
Asynchronous |
No |
No |
No |
rubyrep |
MIT |
Stalled |
Master-Master, Master-Slave |
Asynchronous |
No |
No |
No |
BDR (Bi-Directional Replication) |
PostgreSQL (BSD) |
Beta |
Master-Master (no triggers needed) |
Asynchronous |
No |
No |
No |
pg_shard |
LGPL |
Recent release |
Statement-based Middleware (as an extension) |
Synchronous |
No |
Yes |
Yes
|
PostgreSQL高可用性、負載平衡、複製與叢集方案介紹