PostgreSQL 逻辑复制搭建测试

news2024/11/28 13:41:15

一、 准备工作

1. Publication(发布)节点

  • postgersql.conf
wal_level = logical
max_replication_slots = 8 	#每个订阅需要消耗一个slot
max_wal_senders = 10		#每个订阅需要使用一个wal sender
max_worker_processes=128	#必须 >=max_wal_senders加并行计算进程,或者其他插件需要fork的进程数。	
  • pg_hba.conf
host replication  repuser   192.0.0.0/8    md5

2. Subscription(订阅)节点

  • 初始化环境
initdb -D $PGDATA -E UTF8 --locale=en_US.utf8
pg_ctl –D $PGDATA start
  • postgersql.conf
max_replication_slots = 8
max_logical_replication_workers = 8	# 保证不低于该实例总共需要创建的订阅数
max_worker_processes=128		    # 大于等于max_logical_replication_workers + 1 + CPU并行计算 + 其他插件需要fork的进程数.

二、 发布与订阅

1. 创建测试表并设置replica identity

create table test(id int primary key, info text, crt_time timestamp);  
\d test
alter table test replica identity using index test_pkey;
\d test

2. 发布表

create publication pub1 for table test;

select * from pg_publication;

3. 订阅端创建订阅

注意整句基本都是要改的

create subscription sub_from_pub1 connection 'host=192.168.0.108 port=5432 user=postgres password=postgres' publication pub1;

4. 发布端插入数据

insert into test select generate_series(1, 10), 'test', now();

5. 订阅端查询

select * from test;

三、 相关视图

1. 发布端信息 pg_publication

PostgreSQL: Documentation: 14: 52.39. pg_publication

postgres=# select * from pg_publication;
-[ RECORD 1 ]+------
oid          | 16559
pubname      | pub1
pubowner     | 10
puballtables | f
pubinsert    | t
pubupdate    | t
pubdelete    | t
pubtruncate  | t
pubviaroot   | f

2. 订阅端信息pg_subscription

PostgreSQL: Documentation: 14: 52.52. pg_subscription

postgres=# select * from pg_subscription;
-[ RECORD 1 ]---+-------------------------------------------------------------
oid             | 16392
subdbid         | 13893
subname         | sub_from_pub1
subowner        | 10
subenabled      | t
subbinary       | f
substream       | f
subconninfo     | host=192.168.0.108 port=5432 user=postgres password=postgres
subslotname     | sub_from_pub1
subsynccommit   | off
subpublications | {pub1}

3. 复制状态 pg_stat_replication

postgres=# select * from pg_stat_replication ;
-[ RECORD 1 ]----+------------------------------
pid              | 19998
usesysid         | 10
usename          | postgres
application_name | sub_from_pub1
client_addr      | 192.168.0.109
client_hostname  | 
client_port      | 40421
backend_start    | 2023-01-26 12:56:22.065934+08
backend_xmin     | 
state            | streaming
sent_lsn         | 0/3002D928
write_lsn        | 0/3002D928
flush_lsn        | 0/3002D928
replay_lsn       | 0/3002D928
write_lag        | 
flush_lag        | 
replay_lag       | 
sync_priority    | 0
sync_state       | async
reply_time       | 2023-01-26 12:57:14.031458+08

查询逻辑复制延迟

select state,
backend_start, 
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_insert_lsn(), sent_lsn)) send_gap, 
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_insert_lsn(), replay_lsn)) apply_gap, 
sent_lsn, 
write_lsn, 
flush_lsn, 
replay_lsn, 
sync_state, 
reply_time 
from pg_stat_replication;

-[ RECORD 1 ]-+------------------------------
state         | streaming
backend_start | 2023-01-26 12:56:22.065934+08
send_gap      | 0 bytes
apply_gap     | 0 bytes
sent_lsn      | 0/3002E178
write_lsn     | 0/3002E178
flush_lsn     | 0/3002E178
replay_lsn    | 0/3002E178
sync_state    | async
reply_time    | 2023-01-26 13:48:59.898499+08

4. 复制槽信息 pg_replication_slots

postgres=# select * from pg_replication_slots;
-[ RECORD 1 ]-------+--------------
slot_name           | sub_from_pub1
plugin              | pgoutput
slot_type           | logical
datoid              | 13893
database            | postgres
temporary           | f
active              | t
active_pid          | 19998
xmin                | 
catalog_xmin        | 870
restart_lsn         | 0/3002D8F0
confirmed_flush_lsn | 0/3002D928
wal_status          | reserved
safe_wal_size       | 
two_phase           | f

5. 查看订阅端状态 pg_stat_subscription

其中最主要的是订阅端接收的lsn信息

PostgreSQL: Documentation: 14: 28.2. The Statistics Collector

select postgres-# pg_size_pretty(pg_wal_lsn_diff(received_lsn, latest_end_lsn)), 
* from pg_stat_subscription;

-[ RECORD 1 ]---------+------------------------------
pg_size_pretty        | 0 bytes
subid                 | 16392
subname               | sub_from_pub1
pid                   | 8553
relid                 | 
received_lsn          | 0/3002DA10
last_msg_send_time    | 2023-01-26 12:59:36.582129+08
last_msg_receipt_time | 2023-01-26 12:59:38.393401+08
latest_end_lsn        | 0/3002DA10
latest_end_time       | 2023-01-26 12:59:36.582129+08

6. 查看订阅端replay进度 pg_replication_origin_status

  • remote_lsn:已复制到订阅端的发布端 lsn

  • local_lsn:本地已持久化(写入事务日志文件)的lsn,只有在此之前的脏页才能刷入磁盘

PostgreSQL: Documentation: 14: 52.80. pg_replication_origin_status

postgres=# select * from pg_replication_origin_status;
 local_id | external_id | remote_lsn | local_lsn 
----------+-------------+------------+-----------
        1 | pg_16392    | 0/3002E058 | 0/170E998

四、 设置全部发布

1. 发布端

postgres=# drop publication pub1 ;
DROP PUBLICATION
postgres=# create publication pub1 for all tables ;
CREATE PUBLICATION

发布all table的情况下,测试新建一个表并插入数据,看订阅端能否识别

postgres=# create table test5(id int, crt_time timestamp);
CREATE TABLE
postgres=# insert into test5 values(1, now());
INSERT 0 1

2. 订阅端

可以看到数据没有自动同步

postgres=# create table test5(id int, crt_time timestamp);
CREATE TABLE

postgres=# select * from test5;
 id | crt_time 
----+----------
(0 rows)

刷新订阅端

alter subscription sub_from_pub1 refresh publication;

 发布了所有表订阅端需要先创建对应表,或者把发布端无用表删除,否则会报错。

 再次查询

参考

PGCA课程《第46-47讲PostgreSQL 逻辑复制》

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

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

相关文章

BIO NIO AIO IO多路复用的区别

1、基础概念 1.1、阻塞非阻塞和同步异步的结合 下面通过例子来具体说明: 同步阻塞: 小明一直盯着下载进度条,到100%的时候完成。 同步体现在:小明关注下载进度条并等待完成通知。(可以看成同步是我主动关注任务完成的…

进度管理(上)

规划进度管理 定义:规划进度管理是为实施项目进度管理制定计划的过程。 输入: 1、项目管理计划 2、项目章程(包含里程碑,这个和规划进度有直接干系) 3、组织过程资产 4、事业环境因素。 输出:进度管…

2 线性回归demo数据-参数配置|训练回归模型|常见的tensor格式|Hub模块简介|气温数据集与任务介绍

文章目录线性回归demo数据-参数配置线性回归demo数据-训练回归模型常见的tensor格式scalarvectormatrix线性回归demo数据-参数配置 # 先传入数据,可以是手动定义,也可以导入,这边就直接拿一条直线y2x1,来进行模拟了。 # 构造x和y…

一篇五分生信临床模型预测文章代码复现——Figure 7 外部数据集验证模型

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

python爬虫学习笔记-SQL学习

Sql概述 先来看一个例子:小王第一次使用数据库,然后跟数据库来了个隔空对话 其实,我们想一想,mysql是一个软件,它有它自己一套的管理规则,我们想要跟它打交道,就必须遵守它的规则,如…

【stl -- 常用算法】

目录:前言一、遍历算法for_each、transform二、查找、统计算法find、find_ifadjacent_findbinary_searchcount、count_if三、排序算法sortrandom_shufflemergereverse拷贝、替换算法copyreplace、replace_ifswap算数生成算法accumulatefill集合算法set_intersection…

Day10 @Import整合第三方框架原理

1 前言Spring与MyBatis注解方式整合有个重要的技术点就是lmport,第三方框架与Spring整合xml方式很多是凭借自定义标签完成的,而第三方框架与Spring整合注解方式很多是靠import注解完成的。然后Import可以导入如下三种类:普通的配置类&#xf…

【蓝桥杯】历届真题 画廊(决赛)Java

【资源限制】 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 【问题描述】 小蓝办了一个画展,在一个画廊左右两边陈列了他自己的作品。为了使画展更有意思,小…

英语学习打卡day6

2023.1.26 1.promiscuous adj.混杂的;杂乱的;滥交的 pro(往前)misc(mix):在混乱上勇往直前 2.susceptible adj.易受影响(或伤害等);敏感;过敏;感情丰富的;善感的 accept(抓)接受 be susceptible to对…敏感 She isn…

【数据结构】7.3 树表的查找

文章目录7.3.1 二叉排序树1. 二叉排序树的定义2. 二叉排序树的查找二叉排序树算法二叉排序树算法分析3. 二叉排序树的插入4. 二叉排序树的生成5. 二叉排序树的删除7.3.2 平衡二叉树1. 平衡二叉树的定义2. 平衡二叉树的平衡调整方法LL型调整RR型调整LR型调整RL型调整3. 构造平衡…

C#手动操作DataGridView之------使用各种数据源填充表格实例

C#中的表格控件只有一个,那就是datagridview,不像QT中可以用QTableview,QTableWidget。新手拿到datagridview的第一个问题就是数据从哪里来?难道从设计器中一个个手动输入,到时候要变怎办?所以,…

Python3 PIL处理任意尺寸图片为1920*1080 图片模糊 虚化 图片合并居中叠加

各位好,我是宋哈哈,很久没更新文章了,其实这篇代码是我在年前已经写好了。代码呢,也比较冷门适合人很少。仅仅对会AE , PR 视频剪辑, 又要会 python 的人,而且在公司领导又要你来做相册视频,在公…

MSBuild 命令行编译Delphi

为了构建项目,IDE现在使用MSBuild而不是以前的内部生成系统。IDE中的build、compile和make命令调用Microsoft的新生成引擎:MSBuild,它提供了全面的依赖性检查。MSBuild项目文件基于XML,包含描述项目的特定项、属性、任务和目标的部…

[GWCTF 2019]枯燥的抽奖

目录 信息收集 知识回顾 解题思路 信息收集 查看源码&#xff0c;发现check.php <?php #这不是抽奖程序的源代码&#xff01;不许看&#xff01; header("Content-Type: text/html;charsetutf-8"); session_start(); if(!isset($_SESSION[seed])){ $_SESSIO…

html表格

1.基本标签 标签名说明table表示整体&#xff0c;用于包裹多个trtr表格每行&#xff0c;用于包裹tdtd表格单元格&#xff0c;用于包裹内容 注意点&#xff1a; 表格嵌套关系&#xff1a;table>tr>td 表格table的常见属性&#xff1a; 修饰table属性的标签 需要写道tab…

【FA-GAN:超分辨率MRI图像】

FA-GAN: Fused attentive generative adversarial networks for MRI image super-resolution &#xff08;FA-GAN&#xff1a;融合注意生成对抗网络的MRI图像超分辨率&#xff09; 高分辨率磁共振图像可以提供细粒度的解剖信息&#xff0c;但是获取这样的数据需要长的扫描时间…

UVA11426 - GCD - Extreme (II)(数论,欧拉函数)

题目链接&#xff1a;GCD - Extreme (II) - UVA 11426 - Virtual Judge (vjudge.net)​​​​​ 题意 给一个数N&#xff0c;求&#xff1a; ​​​​​​​ 其中&#xff0c;多组输入&#xff0c;输入以0结束&#xff0c;保证答案在long long范围内。 思路 很好的一道题…

移动web主轴设置和flex总结

移动web主轴设置和flex总结设置主轴方向修改主轴经常的使用场景&#xff1a;弹性盒子换行设置侧轴对齐方式flex 总结梳理主轴排列方式侧轴对齐方式-单行对齐侧轴对齐方式-多行弹性盒子换行设置主轴方向伸缩比设置主轴方向 主轴默认是水平方向, 侧轴默认是垂直方向 修改主轴方…

Linux常用命令——semanage命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) semanage 默认目录的安全上下文查询与修改 补充说明 semanage命令是用来查询与修改SELinux默认目录的安全上下文。SELinux的策略与规则管理相关命令&#xff1a;seinfo命令、sesearch命令、getsebool命令、set…

天地图矢量注记图坑

http://lbs.tianditu.gov.cn/server/MapService.html瓦片图案例见下文&#xff0c;注意其中的LAYER:&#xff0c;记住口诀&#xff0c;地址里用什么&#xff0c;这个layer就用什么。比如影像注记里&#xff0c;地址用了cia_w&#xff0c;那么这个layer后面必须是cia_w&#xff…