9.6 运行pgpool和流复制

pgpool也可以和除了语句级别的复制之外的流复制一起使用。一个完美的方案是使用PostgreSQL的板载复制和仅仅使用pgpool的负载均衡与连接池。

实际上,这样做是非常有好处的,因为您没有必要担心函数的副作用或潜在的其他问题。PostgreSQL的事务日志总是正确的,并且它被认为是终极法则。

在流复制没引入到PostgreSQL内核之前,pgpool的语句级的复制是一个复制数据的很好的功能。

除此之外,这对只有一个master来说也是非常有益的。原因很简单。如果您只有一个master,面临不一致是很困难的。此外,pgpool将创建完整的副本,以便无论如何都要使数据被复制。如果数据必须最终在两个服务器上,这绝对没有完成--在这种情况下,写到两个节点将不会使事情有任何较好的扩展。

在没有复制的情况下,您如何运行pgpool?这个过程基本上是相当的简单:

• 设置 PostgreSQL 流复制 (同步或异步)。

• 把连接池配置中的replication_mode设置为 off。

• 设置 master_slave 为 on.

• 设置 master_slave_sub_mode 为 stream.

• 按本章的描述启动 pgpool 。

在基本的设置中,pgpool将假设节点号为0的节点为master。所以,您必须确保您的两个节点在配置中按正确的顺序被列出。

对于一个基本的设置,这些配置的小的改变是相当完美的。

9.6.1 为master/slave模式优化pgpool配置

pgpool为您的需要提供了一系列的参数来调整配置。我们必须要考虑的最重要的事情之一是PostgreSQL支持同步和异步复制。为什么这是相关的呢?好,让我们假设一个简单的场景。有人想注册一个网站:

• 一个写请求出现。pgpool将调度您到0号节点,因为我们面临一个写操作。

• 用户点击“保存”按钮。

• 用户将到达下一个页面;一个读请求将被发出

° 如果我们最终在0号节点上,我们就没有问题—数据预期将在那里。

° 如果我们最终在1号节点上,我们可能看不到数据在这个节点上,如果我们正在使用异步复制。如果在本例中,您在使用同步复制,理论上也会有一个小窗口。

这会导致客户端奇怪的行为。一个典型的奇怪案例行为将是:一个用户创建一个个人资料。在这种情况下,写一行数据。在下一刻,用户想要访问他或她的个人资料,并检查数据。如果他或她碰巧从副本中读,数据可能还没有在那里。如果您是在写一个网络应用程序,您必须把这件事保存在您的脑海里。

为了展开这个问题,您有两个选择:

• 同步复制,它是很昂贵的

• 在连接池配置中设置 delay_threshold

delay_threshold定义了slave能够接收读请求所允许的最大延迟时间。该设置在XLOG内部采用变化的字节来定义。因此,如果您把设置为1024,slave只允许滞后master1KB 的XLOG。否则,它将不会接收到请求。

当然,除非这被设置为0,slave返回太老的数据,使它完全不可能是是很难的,但是一个合理的设置可以使它非常不可能。在许多实际的应用中,这可能是足够的。

pgpool如何知道slave滞后多久?答案是,这很容易配置:

• sr_check_period: 这个变量定义了,系统应该多久检查一次哪些XLOG位置,以弄清楚是否是延迟太高或太低。

• sr_check_user: 通过流连接到primary来检查当前XLOG的位置的用户名。

• sr_check_password: 此用户的密码。

[如果您真的想确保负载均衡会为您提供最新的数据,使用同步复制是必要的,尽管它是昂贵。]

PostgreSQL Replication之第九章 与pgpool一起工作(6)的更多相关文章

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

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

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

    9.4 设置复制和负载均衡 要配置pgpool,我们可以简单地使用一个包含一种典型的配置信息的已经存在的样本文件,将它拷贝到我们的配置目录并修改之: $ cp /usr/local/etc/pgpoo ...

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

    9.3 理解pgpool的架构 一旦我们安装了pgpool,是时候来讨论软件架构了.从一个用户的角度看,pgpool就像一个 正常的数据库服务器,您可以想连接任何其他服务器一样连接到它: pgpool ...

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

    在前面的章节中,我们已经能够深入地理解了pgbouncer,同时也学会了如何使用它来尽可能地优化复制设置.在本章我们将了解一个经常被称作与pgbouncer相对应的工具.尽管pgpool的思想与pgb ...

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

    9.2 理解pgpool的功能 pgpool提供了如下功能: •连接池 •语句级别的复制 •负载均衡 •限制连接 •内存缓存 •并行查询 [当决定使用那些功能的时候,记住并非所有的功能可以在同一时间使 ...

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

    9.5 检查复制 如果所有的节点都处于开机并运行的状态.我们就可以在集群上运行我们的第一个操作了.在我们的例子中,我们将简单地连接到pgpool并创建一个新的数据库.createdb 是一个命令行工具 ...

  7. PostgreSQL Replication之第一章 理解复制概念(1)

    PostgreSQL Replication系列翻译自PostgreSQL Replication一书 在本章中,将会介绍不同的复制概念,您会了解哪些类型的复制对哪一种实用场景是最合适的. 在本章的最 ...

  8. PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(5)

    2.5 XLOG的内部结构 我们将使用事务贯穿本书,并让您在技术层面上更深地洞察事情是如果工作的,我们已经增加了这部分专门处理XLOG的内部工作机制.我们会尽量避免前往下降到C级,因为这将超出本书的范 ...

  9. PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(4)

    2.4 调整检查点和XLOG 目前为止,这一章已经提供深入洞察PostgreSQL如何写入数据,一般来说,XLOG是用来干什么的.考虑到这方面的知识,我们现在可以继续并学习我们能做些什么来使我们的数据 ...

随机推荐

  1. JqueryMobile 跳转问题

    解决办法: 禁止ajxa跳转有两种情况: 1.禁止局部ajax跳转 2.禁止全局ajax跳转    对于#1只需要在a标签中添加下面的属性: data-ajax=“false” 有时我们要用正常的ht ...

  2. 使用微信JS-SDK 实现 自定义 分享 功能

    微信PC端点击页面,转发给朋友.

  3. SecureCRT SSH VMware Ubuntu

    Ubuntu 10.4 装完后网络OK. NAT模式下, 可以上网. 宿主机和客户机可以彼此ping通. 主要是检查SSH服务, 和防火墙是否关闭(UBUNTU 默认没有安装SSH, 默认启动了防火墙 ...

  4. c语言学习感想

    接触c语言已经2个多月了,在这段期间按时的完成了作业,上课能够较好的听讲,因此我获得了老师奖励的小黄衫. 同时,希望自己能够学好c语言! 学习感受与心得 因为兴趣,选择了计算机这专业,我从遥远的南方来 ...

  5. BLE GATT规范中关于UUID与属性的详细解析

    1. 角色 除了GAP定义了角色之外,BLE还定义了另外2种角色:GATT服务器和GATT客户端,它们完全独立于GAP的角色.提供数据的设备称为GATT服务器,访问GATT服务器而获得数据的设备称为G ...

  6. java用spring实现文件下载

    今天是我第一博客文章,希望写出来的东西能让大家看明白,欢迎大家给我留言. html页面: <a href="#" onclick="downLoad()" ...

  7. Android笔记:java 中的数组

    在与嵌入式设备通讯的过程中使用的socket通讯 获取的字节流,通常转换为字节数组,需要根据协议将字节数组拆分.对于有规律的重复拆分可以使用,由于java中不能像c中直接进行内存操作例如使用struc ...

  8. shell 统计GMT0 时区的数据

    和某个供应商核对数据,对方是GMT+0时区,我方报表默认北京时间,无法修改为GMT0, 对excel中按照小时级别的数据导出到excel处理,然后转为文本文件,shell转为GMT0进行统计: 前期处 ...

  9. 输出Java的GC信息

    -verbose:gc -XX:+printGC 可以打印GC的简要信息 [GC 4790K->374K(15872K), 0.0001606 secs] [GC 4790K->374K( ...

  10. Ext中解析字符串

    Ext.encode()将json转为json字符串Ext.decode()将json字符串转为json