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. StartSSL免费证书申请笔记

    第一步:申请startssl账号 填写相应信息后,你所填写的邮箱会收到邮件 里面有一个用来验证的验证码 输入得到的.... 注册成功后会安装数字证书(注意:注册过程中没有叫输入账号密码,这也是通过证认 ...

  2. getWindow().setFlags

    //设置窗体全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams ...

  3. Super不要在Super构造器中调用覆盖方法

    import java.util.Date; public class Super{ public Super(){ System."); overrideMe(); System.&quo ...

  4. Python中布尔类型

    我们已经了解了Python支持布尔类型的数据,布尔类型只有True和False两种值,但是布尔类型有以下几种运算:与运算:只有两个布尔值都为 True 时,计算结果才为 True.True and T ...

  5. 图片放大方法、、菜单栏的位置随滚轮移动固定方法、、<a></a>去外层虚线方法:a:focus { outline:none; -moz-outline:none;};

    图片放大方法一: <style type="text/css">.xt{ width:230px; height:230px;}.tp{ width:230px; he ...

  6. duplicate symbol _OBJC_CLASS 错误处理方法

    错误: ld: duplicate symbol _OBJC_CLASS_$_************ in **************** 一种可能性是你的项目的不同group里有着相同名称的类 ...

  7. Charles辅助调试接口

    http://blog.sina.com.cn/s/blog_6ae8b50d0102w7tw.html

  8. C/C++获取系统时间

    C/C++获取系统时间需要使用Windows API,包含头文件"windows.h". 系统时间的数据类型为SYSTEMTIME,可以在winbase.h中查询到如下定义: ty ...

  9. There has been an error processing your request magento

    如果使用magento的过程中,出现以下页面: 说明出现了错误,但是亲,不用紧张,请根据"Error record number:xxxxxxxxx"的数字在网站根目录下的var/ ...

  10. Barricade---hdu5889(最短路+网络流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5889 题意:有n个点m条边,每条边的长度相同,我们可以默认为1,构成一个无向图:现在起点为1,终点为n ...