Cluster

具有共享磁碟的多個 Postgres 伺服器(一個寫入器,多個讀取器)

  • August 14, 2014

這是場景:

  1. 一個硬碟(Gluster)
  2. 多個 Postgres 伺服器

要求:

  1. 使用共享磁碟儲存數據庫文件
  2. 使用可提供最大效率的配置

迄今為止的發現,

  1. 如本文件所述,可以使用共享磁碟來儲存數據。但它也說“另一個問題是備用伺服器不應該在主伺服器執行時訪問共享儲存”。這意味著所有伺服器(除了主伺服器)都未使用,這對我們來說幾乎是不可接受的。
  2. 由於我們使用的是共享磁碟,因此不應該進行複制。在本文件中發現某些配置(原始和主/從模式)足夠好。但另一個問題是它們可能會導致上述問題。

問題:

  1. 網上有很多文件讓我對它們的要求和功能感到困惑。我的理解正確嗎?
  2. 如果是這樣,是否有可能實現這種設計(使用 pgpool 或任何其他工具)
  3. 如果是這樣,請您命名工具和/或關鍵字,以便我找到更多資訊。

注意(對於那些有興趣盡可能多地結束問題的人)-它發生在我之前。有人說我正在尋找基於意見的答案。事實上我不是。無論如何,我正在尋找的是技術名稱或某種關鍵字。因此,通過使用它們,我可以搜尋更多資訊。有時您需要知道一些關鍵字才能搜尋和查找資訊。

提前致謝。

不可能從同一個數據目錄執行多個 PostgreSQL 伺服器,即使除了一個之外的所有伺服器都是只讀的。絕對 100% 不受支持。無法完成。現在放棄吧。

有人可能有一天會添加這樣一個特性,但它會對PostgreSQL 進行重大更改,因為 Pg 嚴重依賴共享記憶體和程序間同步信號。此外,還shared_buffers包含尚未寫出的“臟”緩衝區;這些可以懶惰地寫出來,因為 PostgreSQL 知道所有後端都將從那裡讀取,並且只有在數據不在shared_buffers.

如果所有伺服器都是只讀的,那麼對 PostgreSQL 進行微小的更改可能是可行的,但我沒有對其進行調查,因為它是一個非常無趣的案例。

您看到的對共享儲存的引用用於故障轉移,而不是並發操作。該手冊非常具體,您需要確保有適當的圍欄以防止多個數據庫伺服器同時訪問儲存,如果您不這樣做,將導致嚴重的損壞。

您將不得不依賴複製或使用另一個支持共享儲存的數據庫引擎(並處理由此產生的性能影響)。

但是,另外:DB 通常受 I/O 限制。如果您現在擁有兩台能夠達到 1000tps 的伺服器而不是一台能夠達到 2000 tps 的伺服器,那麼共享儲存不會為您帶來任何好處。或者,考慮到不帶低延遲匯流排的共享儲存系統的同步成本(想想 Infiniband/Myrinet ),更像是兩台伺服器,每台伺服器的速度為 200tps。

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