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. Java中共享设计

    Java中的共享设计的思路是在Java中形成一个对象池,在这个对象池中保存多个对象, 新实例化的对象如果已经在池中定义了,则不再重复新定义,而从池中直接取出继续使用. 例如,对于字符串来说,Java ...

  2. quanpailie quanbianli

    #include<stdio.h>char data[5]={'a','b','c','d','e'};int vist[5]={0};char step[5]={0};char bu[5 ...

  3. Java:按值传递还是按引用传递详细解说

    前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,但是有个问题感觉还是很模糊,就是Java中到底是否只存在值传递,因为在查阅资料时,经常看到有 ...

  4. php + ajax + html 简单跨域问题

    XMLHttpRequest cannot load http://localhost:8080/abc/index.php. No 'Access-Control-Allow-Origin' hea ...

  5. ubuntu cpus 共享打印

    下载工具 axel 打印机 hp-setup http://blog.x1986.com/t/18.think lsusb wkhtmltopdf/0.12.2.1 ubuntu 14.01 x64下 ...

  6. Linux QtCreator设置mingw编译器生成windows程序

    Qt跨平台,那必须在Linux平台编译一个可以在windows下运行的Qt程序才行,当然还得和QtCreator环境弄在一起才行. 工作环境:Centos 7 yum install qt5-qt* ...

  7. Ubuntu 更改默认apt-get源

    原文转自:http://zhoushijun.iteye.com/blog/1942475 方法: 1.修改源地址:cp /etc/apt/sources.list /etc/apt/sources. ...

  8. oracle常用的SQL语句

    一些常用的SQL语句: --建表 create table adolph (id number(10,0),              name varchar2(20),              ...

  9. Solr搜索基础

    本例我们使用类库和代码均来自: http://www.cnblogs.com/TerryLiang/archive/2011/04/17/2018962.html 使用C#来模拟搜索.索引建立.删除. ...

  10. Wordpress制作sidebar.php

    调用 在主页以下方法可以调用模板中sidebar.php的内容 <?php get_sidebar(); ?> 判断是否自定义sidebar侧边栏: <?php if ( !func ...