PostgreSQL实战之物理复制和逻辑复制(六)

news2024/12/26 14:29:44

目录

PostgreSQL实战之物理复制和逻辑复制(六)

6 延迟备库

6.1 延迟备库的意义

6.2 延迟备库部署

6.3 recovery_min_apply_delay参数对同步复制的影响


PostgreSQL实战之物理复制和逻辑复制(六)

6 延迟备库

        延迟备库是指可以配置备库和主库的延迟时间,这样备库始终和主库保持指定时间的延迟,例如设置备库和主库之间的延迟时间为1小时,理论上备库和主库的延时始终保持在一小时左右。

6.1 延迟备库的意义

        PostgreSQL流复制环境下,如果主库不是很忙并且备库硬件资源充分,通常备库和主库的延时能在毫秒级别。如果主库上由于误操作删除了表数据或删除表时,从库上的这些数据也瞬间被删除了,这时,即使对数据库做了备份,要恢复到删除前的状态也是有难度的,比如,如果使用pg_dump做了逻辑备份,通常是按天、按周、按月进行逻辑备份等,也只能恢复到最近逻辑备份时刻的数据,除非是做了基准备份并且开了归档,这时可以利用全量备份和归档恢复到删除前的状态,从而找回被删除的数据,当然这种方法维护成本较高。在这一场景下,延迟的备库在一定程度上缓解了这一问题,因为在设置的延迟时间范围内,备库上的数据还没被删除,可以在备库上找回这些数据,这节将详细介绍延迟备库的配置和使用,当然,如果超过了已设置的主备延迟时间才发现主库上的数据被删除了,这些数据在备库也找不回来了。

6.2 延迟备库部署

        测试环境依然为一主一备异步流复制,pghost1为主库,pghost2为备库,延迟备库的配置非常简单,只需要配置recovery_min_apply_delay参数,此参数位于recovery.conf配置文件,语法如下:

recovery_min_apply_delay (integer)

此参数单位默认为毫秒,目前支持的时间单位如下:
ms(毫秒,默认单位)
s (秒)
min (分钟)
h (小时)
d (天)
大家知道流复制主库提交事务后,主库会将此事务的WAL日志流发送给备库,备库接收WAL日志流后进行重做,这个操作通常瞬间完成,延迟的备库实际上是设置备库延迟重做WAL的时间,而备库依然及时接收主库发送的WAL日志流,只是不是一接收到WAL后就立即重做,而是等待设置的时间再重做,假如设置此参数为一分钟,流复制备库接收到主库发送WAL日志流后需等待一分钟才重做。
我们将pghost2上备库的此参数设置成1分钟,如下所示:

recovery_min_apply_delay = 1min

以上代码将主库和备库的延迟时间设置为1分钟,之后重启备库使配置生效,如下所示:

[postgresepghost2 pg_root]$ pg_ctl restart

之后在主库上创建test_delay测试表,如下所示:

postgres=# CREATE TABLE test_delay(id int4,create_time timestamp(0) without time zone) ;
CREATE TABLE

这时备库上等了大概一分钟才看到这张表,接着在主库上插人一条数据,如下所示:
postgres=# INSERT INTO test_delay(id,create_time) VALOES (1,now()) ;
INSERT 0 1
在备库查询表test_delay数据,一开始返回为空,反复执行以下SQL直到返回以下数据:

postgres=# SELECT now() , create_time FROM test_delay;
-[ RECORD 1 ]------------------------------
now            | 2017-09-10 16:18:50.414074+08
create_time | 2017-09-10 16:17:50

从以上时间看出正好相差一分钟,也就是说主库插入这条数据后,过了一分钟左右备库才能查询到这条数据。
接着模拟数据误删场景,假如由于误操作误删了这张表,是否能在备库找回数据?主库上删除这张表,如下所示:

postgres=# DROP TABLE test_delay ;
DROP TABLE

尽管主库删除了此表,但从库上这张表依然存在,并且数据也存在,如下所示:

postgres=# SELECT * FROM test_delay;
id  |    create_time
----+------------------
1   | 2017-09-10 16:17:50
(1 row)

这样,可以在延迟时间窗口内将表test_delay的表结构和数据进行备份,再导入到主库,从而找回误删除的表。

6.3 recovery_min_apply_delay参数对同步复制的影响

        recovery_min_apply_delay参数对同步复制影响如何?大家知道同步复制synchronous_commit参数需配置成on或者remote_apply,on选项意思是主库上提交的事务后会等待备库接收WAL日志流并写入WAL日志文件后再向客户端返回成功,remote_apply则更进一步,主库上提交的事务后会等待备库接收WAL日志流并写入WAL日志文件同时应用完成WAL日志流后再向客户端返回成功。
这里对延迟备库场景下synchronous_commit配置为on和remote_apply的差异进行测试。
场景一:synchronous_commit配置为on,同时recovery_min_apply_delay配置成1分钟。
synchronous_commit参数调整完后需要执行pg_ctl reload重新载入配置使参数生效,同时recovery_min_apply_delay 配置调整后需要重启备库使配置生效。
测试前先在主库上清空表test_delay数据,之后在主库上插入一条数据,如下所示:

postgres=# INSERT INTO test_delay(id,create_time)VALUES(1,now());
INSERT 0 1

之后在备库上查询这条记录,依然需要一分钟之后这条数据才能查询到,如下所示:

postgres=# SELECT now ( ) ,create_time FROM test_delay;
-[ RECORD 1 ]-------------------------------
now         | 2017-09-10 16:58:22.526087+08
create_time | 2017-09-10 16:57:22

也就是说延迟备库场景,synchronous_commit配置为on时和异步流复制一致。
场景二:synchronous_commit配置为remote_apply,同时recovery_min_apply_delay配置成1分钟。
主库上执行以下SQL,向test_delay表中插入一条数据,如下所示:
postgres=# INSERT INTo test_delay(id,create_time) VALUES(2,now()) ;--注意这条命令被阻塞
这时发现SQL处于阻塞状态,我们把SQL计时器打开,看看等了多久,主库上再插入一条数据,如下所示:

postgres=# \timing
Timing is on.
postgres=# INSERT INTO test_delay(id,create_time)VALUES (3,now()) ;
INSERT 0 1
Time: 60008.295 ms (01:00.008)

以上看出,SQL执行时间为60秒,一条普通的INSERT语句需要执行60秒的原因,根据synchronous_commit参见remote_apply选项的解释,因为主库提交INSERT语句后,会等待同步备库接收这条INSERT语句的WAL日志流并且写入备库WAL日志文件,同时备库完成应用WAL使得这条记录在备库可见后主库才向客户端返回成功,而此时同步备库又设置了WAL应用延迟一分钟,了解了这些原理之后,对于以上两个测试场景的差异就很好理解了。
根据以上测试,对于延迟备库场景,synchronous_commit配置为on时和异步流复制一致,synchronous_commit配置为remote_apply时,主库上所有的写操作将被阻塞一定时间,被阻塞的时间正好是同步备库recovery_min_apply_delay参数配置值,因此synchronous_commit参数配置为remote_apply 的同步流复制环境应避免使用延迟备库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flink官方例子解析:Flink源码子项目flink-examples

1. 简介 很多朋友在学习Flink的时候都希望能有个demo代码来参考实践,于是在百度或者Google一顿搜索,虽然能找到很多demo代码,但是这些demo要么版本比较旧,要么代码不全,根本跑不通。 其实,Flink官网就提供…

10、矩阵分析

目录 一、向量和矩阵的范数运算 二、矩阵的秩 三、矩阵的行列式 四、矩阵的迹 五、矩阵的化零矩阵 六、矩阵的正交空间 七、矩阵的约化行阶梯形式 八、矩阵空间之间的夹角 MATLAB 提供的矩阵分析函数: 一、向量和矩阵的范数运算 (1)在MATLAB中,…

不平衡数据集的建模的技巧和策略

不平衡数据集是指一个类中的示例数量与另一类中的示例数量显著不同的情况。 例如在一个二元分类问题中,一个类只占总样本的一小部分,这被称为不平衡数据集。类不平衡会在构建机器学习模型时导致很多问题。 不平衡数据集的主要问题之一是模型可能会偏向多…

笔记本怎么录制屏幕?笔记本录屏有这一款就够了

为了携带方便,很多小伙伴都选择笔记本电脑作为自己学习和办公的工具。在使用笔记本时,我们有时需要对它进行屏幕录制,那你知道笔记本怎么录制屏幕吗?怎样才能又快又好地录制屏幕?今天小编就给大家带来一款能高效录制笔…

DBCO-SS-NH2,二苯并环辛炔-二硫键-氨基,DBCO-SS-amine

DBCO-SS-NH2,二苯并环辛炔-二硫键-氨基,DBCO-SS-amine 英文名称:DBCO-SS-NH2、DBCO-SS-amine 中文名称:二苯并环辛炔-二硫键-氨基 外 观: 浅黄色或白色固体 分子式: C23H25N3O2S2 分子量: 439.59 存储环境:尽可能储存在-20℃环境下&…

网络原理(TCP/IP)(5)

2.IP协议的核心功能:能够在两点之间规划出来一条合适的路径 1)地址管理:通过一系列的规则,可以把网络上设备的地址给描述出来 2)路由地址:根据当下的源IP和目的地址,规划成一条合适的路径,啥叫合适?关键是看…

【IoT】项目管理:做好敏捷管理,从敏捷看板开始

随着移动互联网、软件即服务(SaaS)和基于云计算的快速发展,你需要加快你的产品开发周期,将重点工作放在定义核心功能集的前端。 你可以从敏捷软件开发思想中借鉴一些最佳实践,并将这些实践应用于团队管理中。 敏捷思想…

React+eggjs+mysql实现多文件上传

文章目录一、开发环境二、数据库准备files表【视项目需求不同可略过,一般小项目可忽略】1.数据库准备files表的目的2.表结构三、后端接口准备1.配置config2.router.ts中配置路由3.创建controller4.创建service①为什么做这步②创建service/common文件③service/comm…

IronWebScraper for .NET 2023.1 Crack

用于从 HTML Web 应用程序中提取干净的结构化数据的 C# 框架。 IronWebScraper for .NET 2023 :Adds support for Microsoft .NET 6 and .NET 7.January 27, 2023 - 17:25 New Version ::: Added support for Microsoft .NET 6 an…

【Java】SpringCloud使用

SpringCloud使用 发起远程调用 根据订单id查询订单的同时,把订单所属的用户信息一起返回,但订单信息和用户信息分属两个不同的模块。 本质上是订单模块向用户模块发起请求,在spring中使用resttemplate发起。 MapperScan("cn.itcast.o…

电脑配置怎么看?这3种方法就可以轻松查看

在我们的日常生活和工作中,我们越来越离不开计算机。对于一台好的电脑,首先,我们需要了解它的配置,以便更好地选择它。电脑配置怎么看?可能还有很多人不知道。别担心,本篇文章就是来教会你如何查看电脑的配…

Android studio集成flutter

1.获取Flutter SDK 视窗安装|扑动 (flutter.dev) 2.配置环境变量 3.Android Studio安装Flutter插件 4.打开管理窗口cmd,输入flutter doctor。 5.因为第二步是感叹号(如下图),需要run: flutter doctor --android-licenses&#xf…

基础课程7:多线程与Pad可获得性

目标 GStreamer自动处理多线程,但在某些情况下,您可能需要手动解耦线程。本教程展示了如何做到这一点,此外,还完成了关于Pad可用性的阐述。更准确地说,本文档解释了: 如何为管道的某些部分创建新的执行线程Pad的可用…

SpringCloud之消息总线

spring CloudBus 将分布式的节点和轻量的消息代理连接起来。这可以用于广播配置文件的更改或者其他的管理工作。一个关键的思想就是,消息总线可以为微服务做监控,也可以作为应用程序之间相互通讯。 一、准备工作 本文还是基于上一篇文章来实现。按照官…

MySQL运维(二)MySQL分库分表概念及实战、读取分离详解

MySQL运维(二)MySQL分库分表详解、读取分离详解 1、MySQL分库分表相关概念 1.1 分库分表概念 1.1.1 分库的原因 分库:就是一个数据库分成多个数据库,部署到不同机器。 如果业务量剧增,数据库可能会出现性能瓶颈,这时候我们就需…

盘点那些免费好用的高清录屏软件,7款宝藏软件(2023年新版)

有不少的小伙伴私信小编,希望小编能够分享一些好用的高清录屏软件。那么今天,小编就给大家盘点一下那些免费好用的高清录屏软件吧!这些都是小编亲自体验过的,有需要的小伙伴赶紧码住收藏,这些宝藏软件错过就难找了&…

即时通讯开发之详解TCP/IP中的ICMP 协议、ping 和 Traceroute

前面讲到了,IP 协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完 成。其中一个重要的模块就是 ICMP(网络控制报文)协议。当传送 IP 数据包发生错误--比如主机不可达,路由不可达等等,ICMP 协议将会把错误信息封包,然后传送回给…

拉伯证券|兔年资本市场三大重点

近来,承受《证券日报》采访的多位专家展望兔年资本商场,称深化推动股票发行注册制变革、稳步扩展准则型敞开以及防备化解严重危险是三大重点工作。 申万宏源证券首席经济学家杨生长对记者表明,本年是我国经济康复到常态性增加的要害一年&…

硬件系列(1)-电阻、电容、电感三大件

下面是目录电阻电阻参数(1)**SIZE 尺寸**(2)**TOLERANCE 误差**(3)PACKAGING TYPE 外包装(4)TEMPERATURE COEFFICIENT OF RESISTANCE 温度(5)**TAPING REEL & POWER 功率**(6)**RESISTANCE VALUE 电阻值**三位的四位的查表的(7) DEFAULT CODE 缺省编码电阻的分类碳膜电阻金…

leetcode63 不同路径二

题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 现在考虑网格中有障碍物。那么从左上…