9.7 处理故障转移和高可用

可以使用pgpool来解决的一些明显的问题是高可用性和故障转移。一般来讲,有使用pgpool或者不使用pgpool可以用来处理这些问题的各种方法。

9.7.1 使用PostgreSQL流和Linux HA

使用pgpool解决高可用性的最简单的方法是和Linux HA一起使用PostgreSQL的板载工具。在这种情况下,在我们的世界中,最好的方法是不使用语句级别的复制运行pgpool和使用PostgreSQL的流复制来同步数据。

pgpool可以被配置来做负载均衡,并自动发送写请求到第一个节点,发送读请求到第二个节点。

在故障转移时会发生什么情况呢?让我们假设master会崩溃。在这种情况下,Linux HA 会触发故障转移,并移动master的IP地址到slave。然后,slave可以被Linux HA提升为新的master(如果这是需要的话)。然后,pgpool将只会面对一个故障的数据库连接并重新开始并重新连接。

当然,我们也可以使用londiste或一些其它技术,例如Slony复制数据。然而,对于典型的案例,流复制就够了。

[ 在您的pgpool设置中,如果您想使用一个较新版本的PostgreSQL更新所有的节点,Slony 和 skytools 是完美的工具。您可以建立Slony或londiste 副本,然后只是暂停简单的操作(保持同步)并切换您的IP地址到运行新版本的主机。]

时间经验表明,使用PostgreSQL板载和操作系统级别的工具是一个简单,重要,可靠的处理故障转移的好方法。

9.7.2 pgpool的高可用和故障转移的机制

除了流复制和Linux HA,您也可以使用pgpool 提供的机制来处理故障转移。本节将使用pgpool提供的这些方法。

您必须要做的第一件事情是把故障转移命令添加到您的池配置中。下面是一个例子:

failover_command = '/usr/local/bin/pgpool_failover_streaming.sh %d %H

每当pgpool检查到一个节点故障,它将执行我们在池配置中的脚本,并根据我们的规定作出反应。理论上讲,这个故障转移脚本将写一个触发文件—这个触发问题然后可以在slave系统上被看到,并把它转化为master。

在slave上的recovery.conf 文件可能看起来是这样的:

standby_mode = 'on'

primary_conninfo = 'host=master_host user=postgres'

trigger_file = '/tmp/trigger_file0'

该trigger_file 每隔5秒被检查一次。一旦发生了故障转移,pgpool会把第二个服务器作为新的master。

在故障转移之后合乎逻辑的下一步是将一个新的服务器一引入到系统中。

最简单,最可靠的方法是:

• 设置流复制

• 等待服务器重新同步

• 简单地中断写入

• 使用 pcp_attach_node 添加新的节点

• 恢复写入

总体而言,这将只需要几秒钟的服务终端。

[ 理论上,在pgool的世界里,服务中断不是必须的,确保不存在一丝引起不一致的的方法,关闭写入操作几秒钟可能是值得的。在绝大多数情况下,这会是可以忍受的。]

9.8 总结

pgpool是一个已经被广泛使用于复制和故障转移的工具。它提供了许多的功能,包括负载均衡,连接池,和复制。pgpool在语句级别复制数据,并和PostgreSQL板载的工具例如,流复制 整合在一起。

在下一章中,我们将深入Slony并学习逻辑复制。我们将讨论软件体系架构并看看在一个大的服务器集群中如何使用Slony来复制数据。

PostgreSQL Replication之第九章 与pgpool一起工作(7)的更多相关文章

  1. PostgreSQL Replication之第九章 与pgpool一起工作(4)

    9.4 设置复制和负载均衡 要配置pgpool,我们可以简单地使用一个包含一种典型的配置信息的已经存在的样本文件,将它拷贝到我们的配置目录并修改之: $ cp /usr/local/etc/pgpoo ...

  2. PostgreSQL Replication之第九章 与pgpool一起工作(6)

    9.6 运行pgpool和流复制 pgpool也可以和除了语句级别的复制之外的流复制一起使用.一个完美的方案是使用PostgreSQL的板载复制和仅仅使用pgpool的负载均衡与连接池. 实际上,这样 ...

  3. PostgreSQL Replication之第九章 与pgpool一起工作(3)

    9.3 理解pgpool的架构 一旦我们安装了pgpool,是时候来讨论软件架构了.从一个用户的角度看,pgpool就像一个 正常的数据库服务器,您可以想连接任何其他服务器一样连接到它: pgpool ...

  4. PostgreSQL Replication之第九章 与pgpool一起工作(1)

    在前面的章节中,我们已经能够深入地理解了pgbouncer,同时也学会了如何使用它来尽可能地优化复制设置.在本章我们将了解一个经常被称作与pgbouncer相对应的工具.尽管pgpool的思想与pgb ...

  5. PostgreSQL Replication之第九章 与pgpool一起工作(2)

    9.2 理解pgpool的功能 pgpool提供了如下功能: •连接池 •语句级别的复制 •负载均衡 •限制连接 •内存缓存 •并行查询 [当决定使用那些功能的时候,记住并非所有的功能可以在同一时间使 ...

  6. PostgreSQL Replication之第九章 与pgpool一起工作(5)

    9.5 检查复制 如果所有的节点都处于开机并运行的状态.我们就可以在集群上运行我们的第一个操作了.在我们的例子中,我们将简单地连接到pgpool并创建一个新的数据库.createdb 是一个命令行工具 ...

  7. PostgreSQL Replication之第一章 理解复制概念(1)

    PostgreSQL Replication系列翻译自PostgreSQL Replication一书 在本章中,将会介绍不同的复制概念,您会了解哪些类型的复制对哪一种实用场景是最合适的. 在本章的最 ...

  8. PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(5)

    2.5 XLOG的内部结构 我们将使用事务贯穿本书,并让您在技术层面上更深地洞察事情是如果工作的,我们已经增加了这部分专门处理XLOG的内部工作机制.我们会尽量避免前往下降到C级,因为这将超出本书的范 ...

  9. PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(4)

    2.4 调整检查点和XLOG 目前为止,这一章已经提供深入洞察PostgreSQL如何写入数据,一般来说,XLOG是用来干什么的.考虑到这方面的知识,我们现在可以继续并学习我们能做些什么来使我们的数据 ...

随机推荐

  1. Scrapy入门教程

    关键字:scrapy 入门教程 爬虫 Spider作者:http://www.cnblogs.com/txw1958/出处:http://www.cnblogs.com/txw1958/archive ...

  2. Apache Kafka源码分析 - kafka controller

    前面已经分析过kafka server的启动过程,以及server所能处理的所有的request,即KafkaApis 剩下的,其实关键就是controller,以及partition和replica ...

  3. Inno Setup入门(十)——操作注册表 & 自启程序

    http://379910987.blog.163.com/blog/static/3352379720110259414788/ 有些程序需要随系统启动,或者需要建立某些文件关联等问题,这些都是通过 ...

  4. Java实验报告二:Java面向对象程序设计

    Java实验报告二:Java面向对象程序设计                                                                               ...

  5. Qt使用一个事件队列对所有发出的事件进行维护(QObject的event()函数相当于dispatch函数),用EventLabel 继承QLabel作为例子(简单明了) good

    事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等:另一些事 ...

  6. ArcGIS API for Silverlight实现地图测距功能

    原文:ArcGIS API for Silverlight实现地图测距功能 问题:如何实现地图测距功能? 地图工具栏 <Grid x:Name="gToolMenu" Hei ...

  7. CentOS 6.3下PostgreSQL 的安装与配置

    一.简介 PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统.有些特性甚至连商业数据库都不具备.这个起源于伯克 ...

  8. MAGENTO程序结构图

    Magento程序结构图(Program Structure Diagram): /app – 程序根目录 /app/etc – 全局配置文件目录 /app/code – 所有模块安装其模型和控制器的 ...

  9. [LeetCode]题解(python):030-Substring with Concatenation of All Words

    题目来源 https://leetcode.com/problems/substring-with-concatenation-of-all-words/ You are given a string ...

  10. 【Algorithm】堆排,C++实现

    对一个数组中的元素按照顺序构建二叉树,就形成了一个(二叉)堆.(二叉树是虚拟的,并不是真的建立二叉树) 表示堆的数组A有两个重要属性:A.heapSize,表示堆里面有多少元素,数组里有多少元素在堆里 ...