通常,您不会在后端服务器上安装Pgpool。您在图片中看到的是最常见的配置。Pgpool是一个独立的服务器,基本上位于数据库的前面。两个Postgres服务器通常配置有流复制。一个是主人,另一个是奴隶。
这使Pgpool可以在两个(或多个)数据库之间平衡所有读取查询。任何涉及写操作的查询都将被路由到主服务器,而主服务器又将复制到从服务器。
正如@Neil McGuigan所说,您还可以拥有多个Pgpool服务器以实现更好的高可用性。从技术上讲,您可以在此配置下将Pgpool安装在数据库服务器上,但这将是不正确的做法。运行多个Pgpool服务器是一个更为复杂的配置。如果这是您第一次使用Pgpool,我将首先使用一台Pgpool服务器,然后再使用其中的两台。
在这两种配置中,您的应用服务器都认为它只是在连接到单个Postgres数据库。
关于pgpool_regclass
,这实际上应该是一个单独的问题,来自Pgpool常见问题解答:
如果您使用的是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
函数映射到您复制的库。