具有 pgpool 架构的 Postgres

9 postgresql architecture scalability pgpool connection-pooling

下面是一个示例 pgpool 架构:

在此处输入图片说明

这意味着您只需要在单个服务器上拥有 pgpool;这是真的?当我查看配置时,我还看到您在其中配置了后端pgpool.conf;所以它进一步暗示了这一点。但是,它并没有解释为什么我也在后端服务器上看到 pgpool。

在查看文档时,我还看到:

如果您使用的是 PostgreSQL 8.0 或更高版本,强烈建议在 pgpool-II 访问的所有 PostgreSQL 上安装 pgpool_regclass 函数,因为它被 pgpool-II 内部使用。

所以我不知道该怎么想;在所有后端或仅在专用服务器上使用 pgpool 是最佳实践吗?

小智 10

通常你不会在后端服务器上安装 Pgpool。您在图片中看到的是最常见的配置。Pgpool 是一个独立的服务器,它基本上位于数据库的前面。两个 Postgres 服务器通常配置有流式复制;一个是主人,另一个是奴隶。

这允许 Pgpool 对两个(或更多)数据库之间的所有读取查询进行负载平衡。任何涉及任何写入的查询都将路由到主服务器,然后再复制到从服务器。

正如@Neil McGuigan 所说,您还可以拥有多个 Pgpool 服务器以实现更好的高可用性。从技术上讲,您可以在此配置中的数据库服务器上安装 Pgpool,但这将是不好的做法。运行多个 Pgpool 服务器是一个复杂得多的配置。如果这是您第一次使用 Pgpool,我会先从一个 Pgpool 服务器开始,然后再让两个服务器工作。

在任一配置中,您的应用程序服务器都认为它只是连接到单个 Postgres 数据库。

About 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函数映射到您复制的库。