PostgreSQL Replication之第十章 配置Slony(2)
10.2 理解 Slony如何工作
在我们开始复制我们的第一个数据库之前,我们想深入Slony的架构。理解这是如何工作的是非常重要的,否则,将不可能以一种有用的和合理的方法使用这个软件。与事务日志流不同,Slony使用逻辑复制。这意味着它不使用内部二进制数据(比如XLOG),但逻辑数据(在Slony的情况下,这是文本)代替。使用文本数据代替内置的事务日志有一定的优势,但也有些缺点,这将在本章中详细讨论。
10.2.1 处理逻辑复制
首先,我们要讨论的是,逻辑复制的真正含义:每个Slony设置的基础是所谓的更改日志触发器。这意味着只要Slony复制一个表的内容,它将创建一个触发器。然后,这个触发器将存储对表的所有改变到一个日志中。一个被称为slon的进程将检查此更改日志,并把这些更改复制到消费者。让我们可以下基本的算法:
INSERT INTO table (name, tstamp) VALUES ('hans', now());
trigger fires
('hans', '2013-05-08 13:26:02') as well as some bookkeeping
information will be stored in the log table
COMMIT
一段时间以后:
• slon 守护进程将会到来并读取自从上一次提交以后的所有改变。
• 所有的改变都将在slave上重放。
• 一旦做到这一点,日志就可以被删除了。
下图显示了Slony的整体架构:

请记住,传输协议是纯文本。这里主要的优点是,没有必要在集群中所有的节点上运行相同版本的PostgreSQL,因为Slony将抽象版本号。通过事务日志传送,我们不能做到这一点;因为在基于XLOG 复制的集群中的所有节点必须使用相同主版本号的PostgreSQL。
[更改日志是为特定的表而写的—这也意味着我们不必同时复制所有这些表;复制一个节点上那些表的一个子集是可能的。]
因为Slony是独立于PostgreSQL的版本,它可以很好地用于升级的目的。
10.2.2 slon 守护进程
正如我们已经指出的那样,slon守护进程将负责制成的特殊表的改变或者一组表并传送这些变化到所需的目的地。

为了使这工作,我们必须在我们的集群中的每个数据库都运行一个slon守护进程。
[请注意,我们所讨论的每个数据库一个slon守护进程—不是每个实例。当实际设置时,这是要考虑的重要事情。]
由于每个数据库都会有自己的slon守护进程,这些进程将相互通信以交换和调度数据。独立的slon守护进程也可以有中继功能和简单的数据传送功能。如果您想通过B数据库从A数据库复制数据到C数据库,这是很重要的。这个思想和您可以用流复制和级联复制实现的功能相似。
关于Slony的一件重要的事情是,没有必要复制整个实例或者整个数据库—复制总是和一个表或 一组表相关。尽可能多的数据库期望作为slave为这组特定的表提供服务时,一个数据库将作为master服务为每个表(或对于每一组表)。
可能会发生这种情况:一个数据库是表A与表B的master,另一个数据库将是表C与表D的数据库。换句话说,Slony允许数据来回复制。哪个数据从哪里流向何处将由slon守护进程管理。
slon 守护进程本身由多个服务于不同目的的线程组成,例如清理,时间监听,或者服务器上的应用改变。除此之外,它将会执行同步相关的任务。
要与slon守护进程进行交互,您可以使用一个叫做slonik的命令行工具。它将能够解释脚本并与直接与Slony进行对话。
PostgreSQL Replication之第十章 配置Slony(2)的更多相关文章
- PostgreSQL Replication之第十章 配置Slony(1)
在PostgreSQL领域中,Slony是最广泛的复制解决方案之一.它不仅是最老的复制方案实现的一个,但也是有最多的外部工具支持的一个,例如PgAdmin3等. 在本章中,我们将深入探究Slony并学 ...
- PostgreSQL Replication之第十章 配置Slony(6)
10.6 执行故障切换 一旦您学会了如何复制表并将它们添加到集合中,是时候学习故障转移了.基本上,我们可以在两个两种类型的故障转移之间做出区分: • 计划内故障转移 • 计划外故障转移和崩溃 在本节, ...
- PostgreSQL Replication之第十章 配置Slony(5)
10.5 给复制添加表和管理的问题 一旦我们增加了此表到系统中,我们可以将它添加到复制设置.这样做有点复杂.首先,我们必须创建我们自己的新表集合并把这个和我们已经有的表合并.因此,过一段时间,我们将有 ...
- PostgreSQL Replication之第十章 配置Slony(4)
10.4 部署DDLs 对于生产性的应用程序来说,仅仅复制一个表明显是不够的.此外,通过没有办法保证数据从来不会发生改变.在某些时候,部署变化的数据结构(所谓的DDLs)是必要的. 现在的问题是,Sl ...
- PostgreSQL Replication之第十章 配置Slony(3)
10.3 复制您的第一个数据库 这个小小的介绍之后,我们可以继续前进并复制我们的第一个数据库.要做到这一点,我们可以在一个数据库实例上创建两个数据库.我们想简单地在这两个数据库之间进行复制. [ 您在 ...
- [转]PostgreSQL Replication之扩展与BDR
原文:https://www.cnblogs.com/xmzzp/p/6284300.html postgres 实现master, slave ,且master是多主. -------------- ...
- PostgreSQL Replication之第九章 与pgpool一起工作(7)
9.7 处理故障转移和高可用 可以使用pgpool来解决的一些明显的问题是高可用性和故障转移.一般来讲,有使用pgpool或者不使用pgpool可以用来处理这些问题的各种方法. 9.7.1 使用Pos ...
- 安装Postgresql之后,创建用户 配置rails
登录 sudo su - postgres psql 1 创建Postgresql新用户,devpg是用户名,密码也是devpg, 不是超级管理员,拥有创建数据库权限,登录权限,继承拥有角色权限 cr ...
- PostgreSQL Replication之第四章 设置异步复制(4)
4.4 基于流和基于文件的恢复 生活并不总只是黑色或白色:有时也会有一些灰色色调.对于某些情况下,流复制可能恰到好处.在另一些情况下,基于文件复制和PITR是您所需要的.但是也有许多情况下,您既需要流 ...
随机推荐
- PHP MongoDB 扩展安装配置
近日对MongoDB比较感兴趣,在linux下部署了一套LAMP,想把MongoDB加进来,下面进入正题: 1.确保安装好LAMP环境,假设php安装目录:/usr/local/php5 2.下载ht ...
- MP20 MBO issue summary
MP3 MBO经验,教训 改名字HGA003_PTOT_01,发现居然闪现进度条,正常情况是不会闪现进度条的,只是改个名字而已,怀疑之前用过这个名字,所以我后来改成HGA003_PTOT_03了. 先 ...
- ArcGIS Server 缓存服务增加新比例尺缓存
win10 + Server 10.4 + ArcMap 10.4 操作简单说明: ①窗口上方Customize栏→Toolbars→ Customize→ 搜索到 manege map serv ...
- OpenMP for Fortran
OpenMP for Fortran OpenMP Directive Syntax of OpenMP compiler directive for Fortran: !$OMP Directive ...
- MyEclipse8.5 以debug模式启动tomcat6.0服务器 报错cannot connect to vm。
打开MyEclipse8.5 想以debug模式启动tomcat6.0服务器,报 a configuration error occurred during startup.please verif ...
- Bluetooth HFP介绍
目录 1. 介绍 1.1 目的 1.2 使用场景 1.3 依赖关系 1.4 协议栈 1.5 角色 2. 应用层 3. 空白章节 4. 互操作性要求 4.1 介绍 4.2 Service Level C ...
- BLE-NRF51822教程17-DFU使用手机升级
演示的工程是 [application] nRF51_SDK_10.0.0_dc26b5e\examples\ble_peripheral\ble_app_hrs\pca10028\s110_w ...
- Qt调用dll中的功能函数
声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll),C版接口的.并且用我前两篇有关DLL文章里面的方法,从dll中导出了导入库(.lib)文件,dll中有两个函数,原型如下: ...
- wpf前端设计
http://www.cnblogs.com/w-wanglei/archive/2016/03/14/5274298.html#_nav_0
- handler机制的原理
andriod提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange). 1)Loo ...