2017-06-07 317 views
2

這將是對一些容易混淆由於PostgreSQL的人窮術語的選擇,但請多多包涵......集羣PostgreSQL的集羣

我們需要能夠支持多個PostgreSQL(PG)集羣,並使用它們在多臺服務器上進行羣集,例如repmgr。例如,要支持每個PG羣集的服務器可用性和PITR。在許多情況下,每臺服務器的單個PG集羣成本太高,因此我們在單獨的PG集羣上進行數據分離,恢復等等的多租戶(小型)客戶,但也希望能夠通過複製/過度。

PG羣集最接近的類比是一個SQL Server實例 - 每個實例可以承載多個數據庫,擁有自己的端口等。與SQL Server類似,您可以在同一臺服務器上運行多個實例(PG羣集),並設置爲每個複製。

基本repmgr設置沒有問題 - 在單個PG羣集模型中似乎相當清楚。但是,是否有使用repmgr的多個PG羣集的推薦/支持方法?我可以想象假裝repmgr認爲每個PG集羣實際上是一個獨立的repmgr集羣(帶有單獨的repmgr.conf,連接信息/端口)。但是,我不確定這會起作用。

我通常會希望故障轉移到同一臺服務器上的所有PG羣集,而不是一次一個。

我認識到這可能不是所有情況下的最佳主意,但我主要探索什麼是可能的。我有一些選擇,但是這與我們目前的單節點模型最接近。

爲了澄清,我需要支持許多服務器羣集中的數千名客戶。理想情況下,每個集羣使用相同的repmgr DB(例如在主PG集羣中),並且基本上獨立於其他服務器集羣。

謝謝...

+1

我真想PostgreSQL的砸術語「集羣」 :(。我用「實例」來代替。也許你應該修改相應澄清。無論如何,這聽起來像你節約了大量的單租戶的Postgres實例。考慮自動化這通過工具 - Ansible,Puppet等 - 和容器 - Docker,AWS等。 –

回答

1

回答我的問題,但我希望有一天終於有人張貼一個更好的答案,因爲我否則很喜歡repmgr。最後,由於repmgr集羣連接字符串和PG集羣(端口)之間存在一種隱含關係,所以看起來repmgr並不適用於多個PG集羣(實例)。因此,你基本上必須爲每個集羣PG集羣/實例創建一個單獨的repmgr環境(DB),這會使repmgr帶來的很多操作簡單。

我將調查使用Corosync/Pacemaker /等的更通用的解決方案,至少在這種情況下,虛擬羣集IP處理內置於解決方案中,並且不需要額外的軟件/資源來拉動關閉。

我確定我可能是過度簡化了一些東西,但似乎repmgr已經接近解決大部分問題,是否允許repmgr DB完全獨立於PG集羣並允許每個repmgr羣集來指定自己的連接信息,而不是(僅)repmgr DB本身的連接信息。