Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres 9.0和pgpool复制:单点故障?_Postgresql_Failover_Pgpool - Fatal编程技术网

Postgresql Postgres 9.0和pgpool复制:单点故障?

Postgresql Postgres 9.0和pgpool复制:单点故障?,postgresql,failover,pgpool,Postgresql,Failover,Pgpool,我的应用程序使用Postgresql 9.0,由一个或多个与全局数据库交互的工作站组成:它类似于一个普通的客户机-服务器应用程序,但为了避免任何额外的硬件,所有工作站都包括客户机和服务器:主站升级为同时充当服务器,任何其他工作站都充当它的客户机。这个解决方案允许我具有可扩展性:用户最初可能需要一个站点,但它可以决定在未来扩展到更多站点,而不需要在初始阶段使用无用的单独服务器 我试图避免,如果主站坏了,所有其他人都停止工作;要做到这一点,最好的解决方案可能是将主数据库连续复制到一个或多个站点上未使

我的应用程序使用Postgresql 9.0,由一个或多个与全局数据库交互的工作站组成:它类似于一个普通的客户机-服务器应用程序,但为了避免任何额外的硬件,所有工作站都包括客户机和服务器:主站升级为同时充当服务器,任何其他工作站都充当它的客户机。这个解决方案允许我具有可扩展性:用户最初可能需要一个站点,但它可以决定在未来扩展到更多站点,而不需要在初始阶段使用无用的单独服务器

我试图避免,如果主站坏了,所有其他人都停止工作;要做到这一点,最好的解决方案可能是将主数据库连续复制到一个或多个站点上未使用的数据库

搜索我发现pgpool可以满足我的需要,但从所有示例和教程来看,故障点似乎从主数据库移动到运行pgpool的服务器

我读了一些关于多pgpool和heartbeat工具的文章,但不清楚如何做


考虑到我的体系结构,那里不存在分离和专用的服务器,有人能给我一些提示吗?在故障转移的情况下,似乎PGPUP在自动化中做了所有的事情,我可以考虑在没有管理员干预的情况下由标准用户来处理故障转移情况吗?

< p>对于这些应用程序,我非常喜欢设计。链接旁的文件相当大,但值得一读。事实上,有些应用程序已经实现了这种方法:

也许是其他人,但我不知道。卡桑德拉是从Facebook开始的,而伏地魔是LinkedIn使用的。将内容分散并向数据分发中添加冗余,您将远离传统的主从复制方法

如果您想继续使用PostgreSQL,那么实现这种方法应该没什么大不了的。您需要实现一个额外的层(代理),该层将根据预先配置的选项决定如何检索/保存数据

代理层可以通过以下方式实现:

  • 申请(需要IMHO的大量工作)
  • 数据库
  • 作为一个中间件
您可以在中间件层上使用源于Skype的项目。它与PostgreSQL进行了深入集成,因此我认为它是选项2和选项3的组合。PL/Proxy将要求您使用函数对数据库进行各种查询。 如果遇到性能问题,可以使用

最后一点注意:无论您决定走哪条路,都需要已知的开发量

编辑:

这完全取决于你所说的“失败”和你认为系统处于中断状态。< /P> 让我们看看这些功能

  • 连接池PostgreSQL在每个会话中使用单个进程(fork)。显然,如果你有一个非常繁忙的网站,你会达到操作系统的极限。为了克服这个问题,使用了连接池。它们还允许您均匀地使用资源,因此通常最好在数据库之前使用pooler。
    如果pgpool中断,您将面临大量无法访问数据库的客户端。如果您将它们直接指向数据库,避免使用pooler,您将面临性能问题

  • 复制所有查询都将自动复制到从属实例。这对DML和DDL查询有意义。
    在pgpool中断的情况下,您的复制将停止,从机将无法跟上主机,因为在pgpool之外没有进行更改跟踪(据我所知)

  • 负载平衡您的只读查询将分布在多个实例上,实现良好的响应时间,允许您在系统上增加带宽。
    如果pgpool中断,您的查询将突然运行得慢得多,如果系统能够处理这样的负载。在这种情况下,主数据库将被捕获,而不是失败的pgpool

  • 限制超出连接数pgpool将对无法立即处理的连接进行排队。
    在pgpool中断的情况下,所有此类连接都将中止,这可能会中断DB/应用程序协议,即应用程序设计为永远不会中断连接

  • 并行查询在多个节点上执行单个查询,以减少响应时间。
    在pgpool中断的情况下,将无法执行此类查询,从而导致更长的处理时间

  • 如果你能很好地面对这些情况,并且不把它们视为失败,那么pgpool可以很好地为你服务。如果5分钟的停机将使您的公司损失数千美元,那么您应该寻求更为可靠的解决方案

    停机的成本越高,故障切换系统就应该进行越精细的调整。 通常,它不仅仅是用于实现故障切换自动化的单一工具。 在每次失败中,您必须调整:

    • DNS,除非您需要所有客户端的重新配置
    • 重新初始化备份和故障切换过程
    • 确保老主人不会试图争夺它的角色,以防它回来()
    • 根据我的经验,我们是来自DBA、系统管理员、架构师和运营部门的人员,他们决定正确的战略
    最后,在我看来,pgpool是一个很好的工具,我确实使用它。但它不是作为一个完整的故障切换解决方案设计的,也不是没有额外的思考、采取的措施和编写的脚本。因此,我提供了到分布式数据库的链接,它们提供了更高级别的可用性


    PostgreSQL的可扩展性非常好,因此只需稍加努力即可实现分布式。

    首先,我建议签出而不是pgpool。接下来,您试图达到什么级别的缩放?你可以选择t