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. php-->mongodb[curd操作]

    <?php /** * PHP操作MongoDB学习笔记 */ //************************* //**   连接MongoDB数据库  **// //********* ...

  2. laravel 自定义函数 使用

    1.创建app/helpers.php 2.注册路径 { ... "autoload": { "files": [ "app/helpers.php& ...

  3. JAVA函数的返回值类型详解以及生成随机数的例题

    函数的四要素:函数名.输入.输出(返回).加工. 函数分为两种:一种是有返回值得函数,一种是没有返回值的函数. 1. 定义:没有返回值的函数:(当我不需要函数的计算结果再拿出来进行运算的时候,我就不需 ...

  4. [转]百度MP3音乐API接口及应用

    当你在百度去搜索一首歌时,你会发现有种更简单的方法,嘿嘿,告诉你个秘密,百度有个不公开的API http://box.zhangmen.baidu.com/x?op=12&count=1&am ...

  5. android Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.

    在当前工程目录中 gradle.properties 添加org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m http://stackoverflow ...

  6. javascript 原生事件综合查询

    click() 对象.click() 使对象被点击. closed 对象.closed 对象窗口是否已关闭true/false clearTimeout(对象) 清除已设置的setTimeout对象 ...

  7. Chart控件,把Y轴设置成百分比

    这次所有属性设置都用代码(就当整理便于以后查询). 在窗体放置一个Chart控件,未做任何设置:然后编写代码: //设置 chart2.Legends[ ].Enabled = false;//不显示 ...

  8. php--sphinx的使用

    sphinx安装,配置,使用,分页 Sphinx简介 SQL   结构化查询语言(是一种标准,所有的关系型数据库Mysql,sqlserver,oracle) sphinx的使用两种方式: 第一种: ...

  9. 怎么用sql语句查询一个数据库有多少张表

    今天在技术群中闲谈时忽然聊到一个问题,那就是当一个数据库中有多张表时怎么快速的获取到表的个数,从而给问询者一个准确的回答. 大家或许会说,这个问题和我们的数据库操作没有太大关系或者不是很挂钩,所以没意 ...

  10. 20145211 《Java程序设计》第4周学习总结——园日涉以成趣

    编程思想DRY和Once and Only Once DRY DRY原则的为"每一个知识都必须在系统内必须是单一的,明确的,权威的,具有代表性.当DRY的原则成功应用,在系统中,任何单一元素 ...