下面是一个示例pgpool体系结构:
这意味着您只需要在单个服务器上拥有pgpool;这是真的吗?当我查看配置时,我还看到您在pgpool.conf
中配置后端;因此,它进一步暗示了这一点。但是,这并不能解释为什么我也会在后端服务器上看到pgpool。
在查看文献资料时,我还看到:
如果您使用的是PostgreSQL 8.0或更高版本,则强烈建议在所有要由pgpool访问的PostgreSQL上安装pgpool_regclass函数,因为pgpool在内部使用。
所以我不知道该怎么想;是否最好在所有后端都有pgpool,或者只是一个专用的服务器?
发布于 2016-01-11 21:52:09
通常,您不会在后端服务器上安装Pgpool。您在图片中看到的是最常见的配置。Pgpool是一个独立的服务器,本质上位于数据库的前面。两个Postgres服务器通常配置为流复制;其中一个是主服务器,另一个是从服务器。
这允许Pgpool在两个(或更多)数据库之间加载平衡所有读取查询。任何涉及任何写入的查询都将被路由到主服务器,而主服务器又会复制到从服务器。
作为@Neil McGuigan said,您还可以拥有多个Pgpool服务器以实现更好的高可用性。从技术上讲,您可以在此配置的数据库服务器上安装Pgpool,但这将是错误的做法。运行多个Pgpool服务器是一种更为复杂的配置。如果这是您第一次使用Pgpool,我会先从一台Pgpool服务器开始,然后再让两台开始工作。
在这两种配置中,您的应用服务器都认为它只是连接到单个Postgres数据库。
关于pgpool_regclass
,这应该是另外一个问题,这是Pgpool常见问题解答:
如果您使用的是PostgreSQL 8.0或更高版本,则强烈建议在所有要由pgpool访问的PostgreSQL上安装pgpool_regclass函数,因为pgpool在内部使用。否则,在不同的模式中处理重复的表名可能会带来麻烦(临时表不是问题)。如果您使用的是PostgreSQL 9.4.0或更高版本和pgpool 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
。
将pgpo-regclass.so文件复制到Postgres扩展名目录中。在我的Ubuntu14.04服务器上(仅使用Postgres9.3包安装),它位于:/usr/lib/postgresql/9.3/lib
。请记住对所有Postgres服务器执行此操作。
一旦完成,您就可以在主服务器上运行pgpool-regclass.sql
了。这只是将pgpool_regclass
函数映射到您复制的库中。
发布于 2016-06-08 01:55:35
与其他所有东西一样,您可以通过多种方式完成高可用性部署。在这里,我将根据我的经验(我自己的HA实现)提出一些建议:
最后,我将推荐引导您从头开始的本教程一步一步 (安装PostgreSQL服务器.)以完成高可用性实现。上述教程描述了我使用的实现。
希望能帮上忙。
更新:谢谢@Moshe链接发生了变化。现在在这里更新,在原来的帖子里也有。
https://dba.stackexchange.com/questions/125662
复制相似问题