PostgreSQL Replication之第九章 与pgpool一起工作(7)
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)的更多相关文章
- PostgreSQL Replication之第九章 与pgpool一起工作(4)
9.4 设置复制和负载均衡 要配置pgpool,我们可以简单地使用一个包含一种典型的配置信息的已经存在的样本文件,将它拷贝到我们的配置目录并修改之: $ cp /usr/local/etc/pgpoo ...
- PostgreSQL Replication之第九章 与pgpool一起工作(6)
9.6 运行pgpool和流复制 pgpool也可以和除了语句级别的复制之外的流复制一起使用.一个完美的方案是使用PostgreSQL的板载复制和仅仅使用pgpool的负载均衡与连接池. 实际上,这样 ...
- PostgreSQL Replication之第九章 与pgpool一起工作(3)
9.3 理解pgpool的架构 一旦我们安装了pgpool,是时候来讨论软件架构了.从一个用户的角度看,pgpool就像一个 正常的数据库服务器,您可以想连接任何其他服务器一样连接到它: pgpool ...
- PostgreSQL Replication之第九章 与pgpool一起工作(1)
在前面的章节中,我们已经能够深入地理解了pgbouncer,同时也学会了如何使用它来尽可能地优化复制设置.在本章我们将了解一个经常被称作与pgbouncer相对应的工具.尽管pgpool的思想与pgb ...
- PostgreSQL Replication之第九章 与pgpool一起工作(2)
9.2 理解pgpool的功能 pgpool提供了如下功能: •连接池 •语句级别的复制 •负载均衡 •限制连接 •内存缓存 •并行查询 [当决定使用那些功能的时候,记住并非所有的功能可以在同一时间使 ...
- PostgreSQL Replication之第九章 与pgpool一起工作(5)
9.5 检查复制 如果所有的节点都处于开机并运行的状态.我们就可以在集群上运行我们的第一个操作了.在我们的例子中,我们将简单地连接到pgpool并创建一个新的数据库.createdb 是一个命令行工具 ...
- PostgreSQL Replication之第一章 理解复制概念(1)
PostgreSQL Replication系列翻译自PostgreSQL Replication一书 在本章中,将会介绍不同的复制概念,您会了解哪些类型的复制对哪一种实用场景是最合适的. 在本章的最 ...
- PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(5)
2.5 XLOG的内部结构 我们将使用事务贯穿本书,并让您在技术层面上更深地洞察事情是如果工作的,我们已经增加了这部分专门处理XLOG的内部工作机制.我们会尽量避免前往下降到C级,因为这将超出本书的范 ...
- PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(4)
2.4 调整检查点和XLOG 目前为止,这一章已经提供深入洞察PostgreSQL如何写入数据,一般来说,XLOG是用来干什么的.考虑到这方面的知识,我们现在可以继续并学习我们能做些什么来使我们的数据 ...
随机推荐
- Bootstrap页面布局16 - BS导航菜单和其响应式布局以及导航中的下拉菜单
代码: <div class='container-fluid'> <h2 class='page-header'>导航</h2> <!-- .navrbar ...
- Support vector machine
https://en.wikipedia.org/wiki/Support_vector_machine In machine learning, support vector machines (S ...
- 搭建C语言开发环境
大学的时候有数据结构这门课,但...终究还是得学.电脑是win8的,根据网上的教程倒是能安装成功vc6.0并且能够打开新建工程,但是一编译运行就提示兼容性问题. 首先安装C语言编译器.下载MinGw ...
- 如何在html中插入视频
如何在html中插入视频 1,插入优酷视频: 在优酷分享界面有个html代码,直接复制放入body中,定义div的align居中即可 2.插入本地视频:用video属性 用mp4格式 <vid ...
- Apache的HBase与cdh的hue集成(不建议不同版本之间的集成)
1.修改hue的配置文件hue.ini [hbase] # Use full hostname with security. hbase_clusters=(Cluster|linux-hadoop3 ...
- 借用layer让弹层不限制在iframe内部
使用方法: 1 除了layer的success,end,cancel回掉函数以外其它的layer参数都可以使用. 2 使用前在layer的js后边把该js引入(可以命名为layerExtend). 3 ...
- Koala编译less
下载地址:http://koala-app.com/index-zh.html 用Koala可以用来编译less,软件也是简单明了,平时开着其他软件编辑less,只要打开Koala,勾选“自动编译”后 ...
- android 2.2 videoView 诡异bug
最近遇到一个问题,在2.2系统上,公司项目中使用VideoView,第一次播放正常,第二次播放黑屏. 由于公司项目使用lua + android 原生,所以试了下原生的android 的VideoVi ...
- 20145211 《Java程序设计》第10周学习总结——昨夜星辰昨夜风
教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. 程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴. 在发送和接收 ...
- [LeetCode]题解(python):059-Spiral Matrix II
题目来源 https://leetcode.com/problems/spiral-matrix-ii/ Given an integer n, generate a square matrix fi ...