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)的更多相关文章

  1. PostgreSQL Replication之第十章 配置Slony(1)

    在PostgreSQL领域中,Slony是最广泛的复制解决方案之一.它不仅是最老的复制方案实现的一个,但也是有最多的外部工具支持的一个,例如PgAdmin3等. 在本章中,我们将深入探究Slony并学 ...

  2. PostgreSQL Replication之第十章 配置Slony(6)

    10.6 执行故障切换 一旦您学会了如何复制表并将它们添加到集合中,是时候学习故障转移了.基本上,我们可以在两个两种类型的故障转移之间做出区分: • 计划内故障转移 • 计划外故障转移和崩溃 在本节, ...

  3. PostgreSQL Replication之第十章 配置Slony(5)

    10.5 给复制添加表和管理的问题 一旦我们增加了此表到系统中,我们可以将它添加到复制设置.这样做有点复杂.首先,我们必须创建我们自己的新表集合并把这个和我们已经有的表合并.因此,过一段时间,我们将有 ...

  4. PostgreSQL Replication之第十章 配置Slony(4)

    10.4 部署DDLs 对于生产性的应用程序来说,仅仅复制一个表明显是不够的.此外,通过没有办法保证数据从来不会发生改变.在某些时候,部署变化的数据结构(所谓的DDLs)是必要的. 现在的问题是,Sl ...

  5. PostgreSQL Replication之第十章 配置Slony(3)

    10.3 复制您的第一个数据库 这个小小的介绍之后,我们可以继续前进并复制我们的第一个数据库.要做到这一点,我们可以在一个数据库实例上创建两个数据库.我们想简单地在这两个数据库之间进行复制. [ 您在 ...

  6. [转]PostgreSQL Replication之扩展与BDR

    原文:https://www.cnblogs.com/xmzzp/p/6284300.html postgres 实现master, slave ,且master是多主. -------------- ...

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

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

  8. 安装Postgresql之后,创建用户 配置rails

    登录 sudo su - postgres psql 1 创建Postgresql新用户,devpg是用户名,密码也是devpg, 不是超级管理员,拥有创建数据库权限,登录权限,继承拥有角色权限 cr ...

  9. PostgreSQL Replication之第四章 设置异步复制(4)

    4.4 基于流和基于文件的恢复 生活并不总只是黑色或白色:有时也会有一些灰色色调.对于某些情况下,流复制可能恰到好处.在另一些情况下,基于文件复制和PITR是您所需要的.但是也有许多情况下,您既需要流 ...

随机推荐

  1. Bootstrap插件1--tooltip

    在引入bootstrap.js之前我们需要引入jquery的js文件 既然是bootstrap的插件,那么自然需要引用bootstrap.js和bootstrap.css这2个核心文件了 这里了主要介 ...

  2. EFDC主控文件efdc.inp文件的xml格式化处理——转载http://blog.sina.com.cn/s/articlelist_1584892573_0_1.html

    在对EFDC模型进行系统集成时,虽然可以通过一行一行读来进行解析处理,但那将是一个繁琐的工作.我们经过xml格式化处理后,再经xsd转成Dataset类对象,那么整个主控文件就是一个数据库表集合,对其 ...

  3. 【转】Unity3D的输入(Input)——键盘和鼠标

    http://blog.csdn.net/lingyun_blog/article/details/41451565 Unity3D使用input类控制用户的输入,输入包括了用户键盘,鼠标,触摸,重力 ...

  4. 区分总结innerHeight与clientHeight、innerWidth与clientWidth、scrollLeft与pageXOffset等属性

    window对象: (1)innerHeight属性:窗口中文档显示区域的高度,不包括菜单栏.工具栏等部分.该属性可读可写. IE不支持该属性,IE中body元素的clientHeight属性与该属性 ...

  5. 后半部分样式和JS前半部分脚本语言

    样式 剩余样式: 1.<div style=display:"none"></div>:nono 是隐藏该元素内容,block是显示该元素内容 2.< ...

  6. FW docker使用问题总结,解决国内不能访问gcr.io的问题

    docker使用问题总结 解决国内不能访问gcr.io的问题 国内可以通过https://dashboard.daocloud.io来下载. 比如?gcr.io/google_containers/p ...

  7. 下载大图的demo by apple,值得研究和参考

    https://developer.apple.com/library/content/samplecode/LargeImageDownsizing/Introduction/Intro.html ...

  8. C#程序中从数据库取数据时需注意数据类型之间的对应,int16\int32\int64

    private void btn2_Click(object sender, RoutedEventArgs e)         {             using (SqlConnection ...

  9. css3 loading效果

    file:///E:/zhangqiangWork/2014/SPDbank/index.html 参考该网站 http://tobiasahlin.com/spinkit/ 查看源代码把里面的dom ...

  10. 通过css3实现开关选择按钮

      通过css属性实现如图所示按钮 要点:通过checkbox选中与否的状态与兄弟选择器实现相关功能 1.设置开关大小并设置定位方式为relative .swift-btn {     positio ...