下面是一个示例 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:如果你需要这个,它只是在你的 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
函数映射到您复制的库。与其他所有事情一样,您可以通过多种方式完成高可用性部署。在这里,我将根据我的经验(我自己的 HA 实现)提出一些建议:
最后,我将推荐这个循序渐进的教程,它将引导您从头开始(安装 PostgreSQL 服务器......)完成高可用性实施。提到的教程描述了我使用的实现。
我希望它有所帮助。
更新:谢谢@Moshe Katz - 链接确实改变了。现在在这里更新,也在原帖中。