执行完您的第一个即时恢复(PITR,Point-In-Time-Recovery),我们准备在一个真正的复制设置上工作.在本章,您将学会如何设置异步复制和流.我们的目标是确保您可以实现更高的高可用和更高的数据安全性. 在本章,我们将讨论以下主题: • 配置异步复制 • 理解流 • 合并流和归档 • 管理时间线 在本章的最后,您将很容易地在几分钟内设置流复制. 4.1 设置流复制 在前面章节中,我们已经从简单的16MB XLOG文件做了恢复.从逻辑上讲,重放进程一次只能重放16MB.这在您的复制设…
4.2 配置级联复制 正如您在本章已经看到的,设置流复制真的很容易.只需要设置几个参数,做一个基础备份,并享受您的复制设置. 在许多情况下,这种情况更有一点点微妙.在这个例子中我们假设:我们要使用一个master传送数据到几十台服务器.复制的开销其实很小(通常的说法是一个slave的开销是3%左右),但是您做小的事情是足够了,它仍然可能是一个问题.对100个 slave来说这绝对没有任何益处. 另一个用例是一个地方的master和在 另一个地方的多个slave.一遍又一遍地长距离发送大量的数据是…
4.4 基于流和基于文件的恢复 生活并不总只是黑色或白色:有时也会有一些灰色色调.对于某些情况下,流复制可能恰到好处.在另一些情况下,基于文件复制和PITR是您所需要的.但是也有许多情况下,您既需要流复制,也需要基于文件的复制.一个例子是:当您较长一段时间中断复制,您可能想再次使用归档来重新同步(resync)slave,而不是再次执行完全的基础备份.这也可能是有用的---保留一个归档一段时间以后调查或重放操作.好消息是PostgreSQL允许您混合基于文件和基于流的复制.您没有必要决定基于流的…
4.8 处理时间线 时间线是一个您必须要知道的一个重要的概念,尤其是当您规划一个大型的设置的时候. 那么,什么是时间线呢?事实上,它是XLOG的一个分支.正常情况下,刚设置的一个数据库实例使用的时间线号为1.我们假设,我们开始复制我们的master数据库到一个slave系统.slave也会在1号时间线处操作.有些时候,您的master可能会出现故障,您的 slave将被提升为一个新的master.这是当一个时间线切换发生时的时间.现在新的master将创建它自己的事务日志.从逻辑上讲,我们想确保…
4.7 冲突管理 在PostgreSQL中,流复制数据仅在一个方向流动.XLOG由master提供给几个slave,这些slave消耗事务日志并为您提供一个较好的数据备份.您可能想知道这怎么会导致冲突,这会发生冲突. 考虑一下情形:如您所知,数据复制有很小的延迟.因此,XLOG在由master产生之后结束于slave.这微小的延迟会引起如下图所示的情景: 我们假设一个slave开始读取一个表.它是一个长读操作.与此同时,master收到一个请求,实际地删除那个表.这有一点问题,因为slave仍然…
4.6 有效的清理和恢复结束 最近几年, recovery.conf 已经变得越来越强大了.早在初期(在 PostgreSQL 9.0之前), 仅有 restore_command 和一些 recovery_target_time 相关设置.更多的现代 PostgreSQL 版本提供了更多的东西,让您有机会以一个很好和专业的方式控制您的重放进程. 在本节中,您将学习有什么样的设置,您将怎样轻松地使用这些功能. 4.6.1 取得重启点的控制权 到现在为止,我们已经无限地归档了XLOG.就像在现实生…
4.5 使流复制更健壮 当连接到master时,slave要做的第一件事情是赶上master.但是,这会一直工作吗?我们已经看到,我们可以使用由基于流和基于文件组成的混合设置.这给了我们一些额外的安全性,以防流不工作. 在现实世界的场景中,传送XLOG的两种方法可能过于复杂.在许多情况下,使用流就足够了.问题的关键是:在一个正如已经描述过的正常的设置中,只要不再需要XLOG来修复master,master就可以丢掉XLOG.根据您的检查点配置,XLOG可能存在相当长一段时间,或只有很短的时间.麻…
4.3 slave到master的切换 如果您想扩展读或您想做一个数据备份,一个 slave是件美好的事情.但是,slave可能不会一直是slave.在有些时候,您可能需要把slave转换为master.PostgreSQL提供了一些简单的方法来做到这一点.第一个也是最有可能的最便捷的方法把一个slave转换为一个master是使用pg_ctl: iMac:slavehs$ pg_ctl -D . promote server promoting iMac:slavehs$ psql test…
到目前为止,我们已经处理了基于文件的复制(或日志传送)和简单的基于流复制的设置.在两种情况中,在master上事务被提交之后,数据被提交,由slave接收.在master提交和slave实际上完全地接收到数据这段时间,它仍然会丢失. 在本章中,我们将学习如下主题: • 确保没有任何事务丢失 • 配置PostgreSQL同步复制 • 理解并使用application_name • 同步复制的性能影响 • 复制的速度优化 5.1 设置同步复制 正如前面提到的,同步复制已经被用来尽一切花费来保护您数据…
5.2 理解实际影响和性能 在本章中,我们已经讨论了实际影响以及性能影响.但是,有什么好的理论性的例子吗?让我们做一个简单的基准测试,看看复制是怎么做的.我们做这样的测试来为您显示各种耐久性的级别不只是一个次要的话题,对性能来说它们是关键的. 让我们假设一个简单的测试:在下面的场景中,我们已经连接到两个同样强大的机器(3 GHz, 8 GB RAM) 超过1 Gbit 的网络.两台机器彼此相邻.为了演示同步复制的影响,我们使用 shared_buffers 和所有其他内存参数的默认设置,仅仅把…
5.3 冗余和停止复制 谈到同步复制,有一个现象一定不能被遗漏.想象一下,我们有一个同步复制的双节点集群.如果slave故障会发生什么?答案是master不能容易地区分慢slave和故障slave,因此它将开始等待slave回来. 乍一看,这看起来像废话,但是如果您再深入地想想.您会明白,它实际上是唯一正确的事情.如果有人使用同步复制,系统中的数据一定都是有价值的,所以它决不能有风险.拒绝数据和向终端用户反馈比使数据存储在风险和默默地忽视高耐久性需求要好. 如果您决定使用同步复制,您必须考虑在您…
3.4 重放事务日志 一旦我们创建了一个我们自己的初始基础备份,我们可以收集数据库创建的XLOG.当时间到时,我们可以使用所有这些XLOG 文件并执行我们所期望的恢复进程.这就像本节描述的一样工作. 执行基本恢复 在PostgreSQL中,整个恢复过程有一个称为recover.conf的文件管理,其主要驻留在基础备份的主目录中.在启动的时候被读取,并告诉数据库服务器到哪里可以找到XLOG归档,什么时候终止重放,等等. 为了让您开始恢复,我们决定为执行一个基本的备份过程包含一个简单的recover…
11.5 关于walmgr 的介绍 walmgr 是一个简化基于文件事务日志传输的工具.早在过去的一些日子里(在9.0版本之前),使用walmgr来简化基本备份是很常见的.随着流复制的引入,情况有了一点变化. 设置流复制已经变得如此简单,以至于插件变得不再像以前那样重要了.当然,这是我们的主观观点,这可能不是您在最近的一段时间里观察到的. 为了确保本书的范围不会扩大,我们已经决定不在本章详细介绍walmgr了.欲了解更多信息,我们建议您去查看walmgr源代码的文档目录.它包含了一些易于使用的例…
6.4 处理监控工具 还有几个监控工具可以使您的日常生活更轻松. 其中最流行的监控工具是Nagios.它被广泛地使用,也支持各种软件组件. 要使用 Nagios 来监控您的 PostgreSQL 集群,需要安装一个方面运行复制相关测试的插件.这样的适用于PostgreSQL 的插件可以自由地从 http://bucardo.org/wiki/Check_postgres下载.适用于 Nagios的一个插件Burcardo不仅能够用于测试复制,而且还是一个监控 PostgreSQL 的标准软件组件…
在本书的前几章,您已经学习了各种复制以及如何配额制各种类型的场景.现在是时候通过增加监控来让您的设置更加可靠了. 在本章中,您将学习监控什么以及如恶化实施合理的监控车辆.您将学习: • 检查您的 XLOG 归档 • 检查 pg_stat_replication 系统视图 • 检查操作系统级别复制相关的进程 在本章的最后您应该能够正确地监控任何类型的复制设置. 6.1 检查您的归档 如果您计划使用即时恢复(PITR, Point-In-Time-Recovery)或如果您想使用XLOG归档来帮助您…
6.2 检查pg_stat_replication 检查归档以及 archive_command主要用于即时恢复( PITR,Point-In-Time- Recovery).如果您想监控一个基于流的设置,建议您 注意系统上称作pg_stat_replication的视图.此视图包含以下信息: test=# \d pg_stat_replication View "pg_catalog.pg_stat_replication" Column | Type | Modifiers ---…
6.3 检查操作系统进程 一旦我们检查了归档以及我们的系统视图,我们就准备检查系统 进程.检查系统进程可能看起来有点粗糙,但它被证明非常有效. 在master上,我们可以简单地检查一个名为wal_sender的进程.在slave上我们要检查一个名为 wal_receiver的进程. 让我们首先检查一下我们应该在master上看到什么: 9314 ?? Ss 0:00.00 postgres: wal sender process hs ::1(61498) idle 在Linux上我们可以看到那…
13.3 聪明地扩展与处理集群 建立集群不是您面临的唯一任务.如果所有的事情都做完了并且系统已经运行了,您可能需要到处调整配置. 13.3.1 添加和移动分区 一旦一个集群启动并运行,您可能会发现您的集群太小,而不能处理您的应用产生的负载.现在的问题是:如何采用最明智的方法做到这一点? 您可以做的最好的事情是创建比需要的多的多的分区.所以,如果您开始考虑使用差不多四个节点,我们直接创建十六个,每台服务器上运行四个分区.在这种情况下,扩展您的集群将会很容易: • 复制所有的生产节点 • 重新配置…
13.2 设置 PL/Proxy 简短的理论介绍之后,我们可以继续前进并运行一些简单的PL/Proxy设置.要做到这一点,我们只需安装PL/Proxy并看看这是如何被使用的. 安装PL/Proxy是一件很容易的事.首先,我们要从http://pgfoundry.org/projects/plproxy/下载源代码.当然,如果对您的系统来说,预编译表是可用的话,您也可以安装二进制包.然而,在这一节中,我们将简单地从源代码执行安装,并看看事情如何在一个非常基本的水平工作. 安装过程的第一步是解压ta…
向您介绍了 Slony 之后,我们将介绍另外一种流行的复制工作.Skytools 是一个最初有 Skype 开发的软件包,它有多种用途.Skytools 不只是一个单一的程序,而且是一个工具与服务的集合,您可以用它来提高您的复制设置.在本章中,我们将讨论有关Skytools的如下主题: • 建立 通用队列 • 使用 londiste 复制 • 处理 XLOG 与 walmgr.py 11.1 安装 skytools Skytools 是一个开放源码包,可以从 pgfoundry.org自由下载.…
7.6 PostgreSQL和高可用性 数据库是我们日常数字生活的一部分,并期望它们快速工作. 您浏览网上论坛吗?那个帖子在数据库中.您看医生吗?您的医疗记录在数据库中.您在网上购物吗?那个货物,您的数据和以前购买的东西都在数据库中. 希望所有这些数据在几秒钟内出现.这不仅是您的期望.一个小网店可能同时有成百上千的访客,每个访客都希望网站快速展现.较大的网站可以同时处理几万或者几十万的访问. 这意味着该服务背后的数据库必须一直可用.当我们考虑这样的网站服务于全球的用户时,问题的范围变得很明显.总…
3.3 做基础备份 在上一节中,您已经看到,启用归档只需要几行命令,并提供了极大的灵活性.在本节,我们将看到如何创建一个所谓的基础备份,稍后这可以使用XLOG.一个基本备份是一个最初的数据的拷贝. [请记住,XLOG本身是没有什么价值的.只是在和初始备份联合起来的时候是有用的.] 在PostgreSQL中,有两个主要的选择来创建一个初始的基本备份: • 使用 pg_basebackup • 传统的基于 copy/rsync 的方法 下面两节将详细地介绍如何创建一个基础备份: 使用pg_baseb…
到现在为止,您已经掌握了一定的理论.因为生活不仅由理论组成(它可能同样重要),是时候深入实际的工作了. 本章的目标是让您明白如何恢复数据到一个给定的时间点.当您的系统崩溃或者有人意外地删除了一个表,不重放整个事务日志,而是重放 其中的一小部分,这是非常重要的.即时恢复(PITR,Point-In-Time-Recovery)将是做这种部分事务日志重放的工具. 在本章中,您将学到关于即时恢复(PITR)的所有您需要知道的信息,并且会有实际的例子来引导您.因此,我们将应用所有您已经在第二章所学习的概…
在这里添加一个slave,真的有一个很好的可扩展性的策略,这基本上足以满足大多数现代应用程序.使用一台服务器的情况下,许多应用程序就会完美地运行,您可能想添加以副本以给基础设施增加一些安全,但在许多情况下,这是许多人想要的. 如果您的应用程序变得越来越大,可以在很多情况下,您可以添加slave和向外扩展读:这也不是什么大问题,并可以很容易地完成.如果您要添加更多的slave,您可能需要级联复制您您的基础设施,但对于98%的应用程序来说,目前为止,这就够了. 其余2%的应用程序由PL/Proxy来…
11.3 管理 pgq-queues Skytools 的一个核心组件是pgq.它提供了一个通用排队接口,它可以让您把消息从一个消息提供者传送到一个任意数目的接收者. 现在的问题是:一般来说,一个队列的要点是什么?队列有一些很不错的特征.首先,它可以保证消息的传递.除此之外,它将确保消息被放入队列的顺序会被保留.在复制的情况下,这是非常重要的,因为我们必须确保小不会相互追赶对方. 队列的思想是能够使任何东西从整个生产数据被发送到任何别的参与系统的主机.这不仅适用于复制,使用与很多—您可以把pgq…
11.4 使用 londiste 复制数据 pgq是一个叫做londiste的复制工具的核心.londiste 的核心是有一个比如比Slony 更加简单,容易使用的机制.如果您在一个大的安装中使用Slony,在集群方面的一个问题很容易引起其他方面的问题—在许多年前,但Slony还是相当新的时候,这尤其是如此. 和Slony相比,londiste的主要优势是,在londiste的情况下,每个“程序”复制就会有一个进程.所以,如果您从A复制到B,这个通道将被一个londiste进程管理.如果您从B复…
高可用(HA)是工业长期持续的,不间断的服务.在本章,您将了解高可用软件的历史,概念和实现与PostgreSQL复制和高可用之间的关系. 本章将详细地讲述如下主题: •理解高可用性的目的 •衡量可用性 •高可用性软件的历史 • OpenAIS和Corosync • Linux-HA(Heartbeat)和Pacemaker •术语和概念 •高可用性是所有冗余 • PostgreSQL和高可用性 •高可用性与仲裁 •高可用性与STONTH 7.1 理解高可用性的目的 引用 Murphy定律: "A…
3.2 归档事务日志 看过图片之后,我们可以看看如何使这些东西进入工作状态.当谈到及时归档时,您需要做的第一件事是归档XLOG.PostgreSQL通过postgresql.conf提供了所有与归档相关的选项.让我们一步一步地看,要启动归档需要在postgresql.conf中做什么: 1. 首先,您应该把archive_mode设置为 on. 2. 第二步,您应该配置您的归档命令.归档命令是一个简单的带有两个参数的shell命令: 1. %p: 这是一个表示应该被归档的的XLOG的占位符,包括…
11.2 剖析 skytools Skytools 不只是一个单一的脚本,而是一个提供各种不同服务的工具的集合.一旦我们安装了Skytools,更详细地查一下这些组件的细节是有意义的: • londiste: 在逻辑级别上复制各个表和整个数据库的一个易于使用的工具 • walmgr: 一个用来管理事务日志的工具箱 • pgq:灵活调度和分发数据的的通用排队接口 在本章我们将详细地讨论一下 pgq 和 londiste .…
7.5 高可用性是所有冗余 让我们从一个不同的角度看一下前面的混合超市的例子.为了处理大量顾客无需长排队,无需关闭超市,混合超市雇用更多的出纳员以及安装许多(甚至更多)的收银机. 这样,如果一个收银机故障,出纳可以简单地把它关机,坐在另一个收银台前等待顾客重新到新的收银机前.顾客不需要等待太长时间,出现故障的收银机可以被修理,混合超市正常运行.这与软件和计算机技术没有一点不同,只有事件(客户程序等待数据)在更短的时间内完成. 这个例子说明,设计一个集群的最重要的方面是在每个可能的系统级别保持冗余…