About pgpool-II(簡體)
更新:2007-04-23
题外话:pgpool以及pgpool-II又是日本人对pgsql的贡献,他们真的做了大量工作。
pgpool的相关网站请在延伸阅读里边查找,这篇文章是基于pgpool-II文档所写,来自源代码包,完整版本请自行下载观看,时间所限我只能简单提及部分内容。
什么是pgpool-II
pgpool-II是一个工作于PostgreSQL服务器和PostgreSQL客户端之间的中间件(middleware),具有如下特性:
- 限制过多连接
PostgreSQL有并发连接的最大数目限制,如果超过这个限制连接请求会被拒绝。然而,设置过多最大连接数目会提高资源消耗并且影响系统性能。pgpool-II也有最大连接数目的限制,但是过多的连接会被放置到队列中而不是立刻返回一个错误。
- 连接池
pgpool-II保持与PostgreSQL服务器的连接,当收到一个使用相同属性(例如:用户名、数据库、协议版本)的连接请求时重用(reuse)它们。能够减少连接的overhead(抱歉,我一直不知道如何准确表达这个词),提高系统的整体吞吐量(throughput)。
- 复制
pgpool-II可以管理多个PostgreSQL服务器,利用复制功能可以在两个或者多个物理磁盘上创建实时备份,因此当发生磁盘故障时可以不停机继续提供服务。
- 负载平衡
如果使用数据库复制,在任何一个服务器上执行SELECT查询都会返回相同结果,pgpool-II能够利用这一点通过在多个服务器上分布(distribute)SELECT查询来减少每一个服务器的负载,提高系统整体吞吐量。最好的结果是,性能提高与PostgreSQL服务器数量成正比。负载平衡对于同时有大量用户进行大量查询的情形特别有用。
- 并发查询
利用并发查询功能,数据能够分配到多个服务器上(参阅石井先生的文章中提到的例子),因此一个查询可以在所有服务器上并发执行以减少整体查询时间。并发查询用于搜索大规模(large-scale)数据会获得最好的效果。
支持平台
pgpool-II可以在Linux、Solaris、FreeBSD以及大多数类UNIX架构上正常运行,目前还不能支持Windows平台。此外需要PostgreSQL 6.4或者更高版本,如果想使用并发查询,则必须使用7.4或者更高版本。
pgpool-II功能与工作模式支持矩阵
这是很重要的部分,因为涉及到pgpool-II的运行设置,我只简单放个对应矩阵,其它请自行查阅文档。此外值得注意:这里的O和X并不是能不能够支持,比如复制模式也能支持“故障恢复”。
功能/模式 | raw 模式 | 连接池模式 | 复制模式 | 主从模式 | 并发查询模式 |
---|---|---|---|---|---|
连接池 | X | O | O | O | O |
复制 | X | X | O | X | X |
负载平衡 | X | X | O | O | X |
Degeneration | X | X | O | O | X |
故障恢复 | O | O | X | X | X |
并发查询 | X | X | X | X | O |
需要服务器数目 | 1 or higher | 1 or higher | 2 or higher | 2 or higher | 2 or higher |
是否需要系统DB? | no | no | no | no | yes |
制约
验证与访问控制
- 在复制与主从模式下,可以支持trust、clear text password、pam methods。
- 在其他所有模式下,可以支持trust、clear text password、crypt、md5、pam methods。
- pgpool-II不支持类似pg_hba.conf的访问控制方式。如果TCP/IP连接可用,pgpool-II会接受来自任何主机的所有连接。如果需要,使用诸如iptables之类控制来自其他主机的访问。(PostgreSQL 服务器当然能够使用pg_hba.conf来接受pgpool-II)
不能保证那些每次查询会返回不同值的数据(比如:随机数、事务ID、OID、SERIAL、序列号、CURRENT_TIMESTAMP)能够正确地在多个后端节点中被复制。
CREATE TEMP TABLE创建的临时表不会在会话(session)结束后删除,这是因为连接池的原因,从后端服务器看起来会话仍然在活动。为避免这一点,必需显式使用
DROP TABLE
删除临时表,或者在事务块中使用
CREATE TEMP TABLE ... ON COMMIT DROP
创建临时表。语句
部分语句不能被pgpool-II处理。(比较多,准备另开篇写)
Over.
写在最后,大家如果有什么好的心得或者翻译文章,请发mail给阿益或者给我,分享知识才能得到更多知识。
我的文章一般都写得很匆忙,难免有些错误和不适当的表达,如果发现请一定指出好让我校正,在blog留言即可。又或者看完以后有些什么建议也请写下来,无论是批评还是建议,都是对我的鼓励。翻译过程也是学习过程,您如果发现有什么关于pgsql比较有趣的东西,也请来信告诉我。
英文技术文档阅读对程序员来讲我认为是基本技能,而我也没有时间去翻译全部细节,所以只写一点我知道的肤浅内容,更多内容请大家自行阅读相关英文,一般我都会给出连接地址。
延伸閱讀(Link):
pgpool官方英文网站
pgpool-II官方英文网站