Postgresql

具有 pgpool 架構的 Postgres

  • November 20, 2018

下面是一個範例 pgpool 架構:

在此處輸入圖像描述

這意味著您只需要在單個伺服器上擁有 pgpool;這是真的?當我查看配置時,我還看到您在其中配置後端pgpool.conf;所以它進一步暗示了這一點。但是,它並沒有解釋為什麼我在後端伺服器上也看到了 pgpool。

查看文件時,我還看到:

如果您使用的是 PostgreSQL 8.0 或更高版本,強烈建議在 pgpool-II 訪問的所有 PostgreSQL 上安裝 pgpool_regclass 函式,因為它是 pgpool-II 內部使用的。

所以我不知道該怎麼想;如果在所有後端或僅在專用伺服器上擁有 pgpool 是最佳做法?

通常你不會在後端伺服器上安裝 Pgpool。您在圖片中看到的是最常見的配置。Pgpool 是一個獨立的伺服器,它基本上位於數據庫的前面。兩個 Postgres 伺服器通常配置有流式複制;一個是主人,另一個是奴隸。

這允許 Pgpool 對兩個(或更多)數據庫之間的所有讀取查詢進行負載平衡。任何涉及寫入的查詢都將被路由到主伺服器,主伺服器又復製到從伺服器。

正如@Neil McGuigan 所說,您還可以擁有多個 Pgpool 伺服器以實現更好的高可用性。從技術上講,您可以在此配置中的數據庫伺服器上安裝 Pgpool,但這是不好的做法。執行多個 Pgpool 伺服器是一個複雜得多的配置。如果這是您第一次使用 Pgpool,我會先使用一個 Pgpool 伺服器,然後再讓兩個伺服器工作。

在任一配置中,您的應用程序伺服器都認為它只是連接到單個 Postgres 數據庫。

關於pgpool_regclass,這應該是一個單獨的問題,這是來自 Pgpool FAQ

如果您使用的是 PostgreSQL 8.0 或更高版本,強烈建議在 pgpool-II 訪問的所有 PostgreSQL 上安裝 pgpool_regclass 函式,因為它是 pgpool-II 內部使用的。如果沒有這個,處理不同模式中的重複表名可能會導致麻煩(臨時表不是問題)。

如果您使用 PostgreSQL 9.4.0 或更高版本以及 pgpool-II 3.3.4 或更高版本,3.4.0 或更高版本,則不需要安裝 pgpool_regclass,因為 PostgreSQL 9.4 具有內置的 pgpool_regclass 函式“to_regclass”。

如果你需要這個,它只是在你的 Postgres 主伺服器上執行一些 SQL 程式碼來添加 Pgpool 使用的函式。

使用 regclass,您還需要做一個額外的步驟(我在考慮 insert_lock)。如果您從原始碼編譯(通常大多數發行版都有真正過時的 Pgpool 版本),您還必須編譯 Postgres 庫。

如果您從原始碼編譯,則必須進入該.../pgpool-II-3.X.X/src/sql/pgpool-regclass文件夾並執行./configure; make.

將 pgpool-regclass.so 文件複製到 Postgres 擴展目錄中。在我的 Ubuntu 14.04 伺服器上(僅使用 Postgres 9.3 軟體包安裝),它位於:/usr/lib/postgresql/9.3/lib. 請記住對所有Postgres 伺服器執行此操作。

完成後,您可以pgpool-regclass.sql在主伺服器上執行。這只是將pgpool_regclass函式映射到您複製的庫。

引用自:https://dba.stackexchange.com/questions/125662