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

时间:2021-02-08 23:41:14

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. C#异步批量下载文件

    C#异步批量下载文件 实现原理:采用WebClient进行批量下载任务,简单的模拟迅雷下载效果! 废话不多说,先看掩饰效果: 具体实现步骤如下: 1.新建项目:WinBatchDownload 2.先 ...

  2. Swift 必备开发库 (高级篇)

    1.CryptoSwift swift加密库, 支持md5,sha1,sha224,sha256... github地址: https://github.com/krzyzanowskim/Crypt ...

  3. git的0基础使用

    1.申请一个git帐号 2.项目开发者将你增加这个项目 3.在终端随意一个目录克隆 该项目地址 git clone 该项目地址 4.进nginx配置 5.更新的时候进入项目目录 git pull

  4. doT js模板入门

    doT.js github地址: doT.js 官方站点 实例1:简单 <!DOCTYPE html> <html lang="en"> <head& ...

  5. CkEditor批量上传图片&lpar;java&rpar;

    CKEditor上传视频CKEditor批量上传图片flvplayer.swf播放器CKEditor整合包(v4.6.1) ------------------------------------ 最 ...

  6. centos6&period;8安装JDK

    1.检测当前系统安装jdk信息       rpm -qa | grep jdk 2.如果检查到有安装信息,则用sudo yum remove XXX(XXX代表上面查到的结果) 3.下载rpm包,安 ...

  7. &lpar;转&rpar;Linux开启路由转发功能

    原文:https://www.linuxidc.com/Linux/2016-12/138661.htm 标记一下,今天想让一台Red Hat Enterprise Linux 7开通iptables ...

  8. 劣质代码评析——《写给大家看的C语言书&lpar;第2版&rpar;》附录B之21点程序(八)

    [重构](续) 牌的表示: 一副牌有52张,可用一整数数组描述.但是由于在游戏过程中牌数在不断减少,所以用一表示剩余张数的整数和一整数数组共同描述.C99支持一种变量长度数组,但用在这里并没有什么特别 ...

  9. Java Redis的Pipeline管道,批量操作,节省大量网络往返时间 &amp&semi; Redis批量读写(hmset&amp&semi;hgetall) 使用Pipeline

    一般情况下,大家使用redis去put/get都是先拿到一个jedis实例,然后操作,然后释放连接:这种模式是 请求-响应,请求-响应 这种模式,下一次请求必须得等第一次请求响应回来之后才可以,因为r ...

  10. Mysql Explain的简单使用

    Mysql Explain 主要重要的字段有上面红色方框圈出来的那几个. type: 连接类型,一个好的SQL语句至少要达到range级别,杜绝出现all级别. key: 使用到的索引名,如果没有选择 ...