Failover

正確管理 PGPool II

  • October 22, 2013

目前我有一個站點,有一個 Postgres 數據庫伺服器。它僅適用於選定數量的使用者(少於 10 個),但它需要盡可能長的正常執行時間。

我想對數據庫進行某種自動故障轉移。

所以我在想這樣的事情:一台執行 PGPool II 的伺服器,一台執行 Postgres 作為主伺服器,一台執行 Postgres 作為從伺服器。但是,如果 PGPool 執行的任何地方突然斷電(或當機,或其他),就會出現單點故障,整個事情就會崩潰。

假設不可能將其外包給其他人,是否有解決方案?

可以確定的一件事是,必須至少有兩台機器在執行pgpool。您如何實現這一點取決於 - 沒有普遍適用於所有情況的解決方案。如果您擁有的是一個 Web 應用程序,那麼您還必須在至少兩台機器上執行該 Web 應用程序,這樣您就可以進行如下操作:

           +----------+  +---------+
           | pgmaster |  | pgslave |
           +----------+  +---------+
                |             |
     +----------+-------------+-----------+ 
     |                                    |
+-----|----+                         +-----|----+
|  pgpool  |                         |  pgpool  |
|     |    |                         |     |    |
|  webapp  |                         |  webapp  |
+-----|----+                         +-----|----+
     |                                    |
  internet                             internet

(在這種情況下,您還需要在客戶端進行某種故障轉移——我標記為“網際網路”的那個。)

另一方面,如果您確實需要的不是高可用性 Web 應用程序(或類似服務),而是高可用性 postgresql(任何客戶端都可以隨時連接),那麼另一種選擇是

           +----------+  +---------+
           | pgmaster |  | pgslave |
           +----------+  +---------+
                |             |
     +----------+-------------+-----------+ 
     |                                    |
+-----|----+                         +-----|----+
|  pgpool  |                         |  pgpool  | (standby)
+-----|----+                         +-----|----+
     |                                    |  
 Failover
 IP address
     |
   client

在這種pgpool情況下, 也可以與數據庫在同一台機器上。重要的是,如果 IP 地址故障轉移,您需要某種方式,這keepalived可能keepalived是切換故障轉移 IP 的不同方式)。另請注意,在這種情況下,連接的客戶端可能在故障轉移的情況下斷開連接,但它們將能夠立即重新連接。

另請注意,還有其他困難,其中之一是您不能排除網路分區,其中兩台 PostgreSQL 機器都將工作並連接,但它們會以某種方式失去彼此的連接,所以他們每個人都會認為另一個死了,因此每個人都會決定成為大師。為了解決這個問題,我知道三種解決方案: 1)STONITH,需要特殊的硬體;2)Quorums,需要特殊軟體(如corosync/pacemaker);3) 手動故障轉移(管理員收到通知,系統崩潰,直到他們決定如何修復它)。但是,如果你使用我上面提出的方案,設置一個法定人數可能不是太難,但是用三個pgpool而不是兩個;但我不記得是否pgpool支持。

底線:高可用性可能既困難又昂貴。仔細檢查完全避免它的可能性。如果你做不到,請準備好多學習、多設計和重新設計,並意識到這將花費大量時間。

引用自:https://serverfault.com/questions/547690