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

news/2024/7/9 20:48:19 标签: postgresql, 数据库

目录

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

8 级联复制

8.1 级联复制物理架构

8.2 级联复制部署


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

8 级联复制

实际上PostgreSQL支持备库既可接收主库发送的将WAL,也支持WAL发送给其他备库,这一特性称为级联复制(Cascading Replication),本章介绍级联复制的物理架构和部署。

8.1 级联复制物理架构

介绍级联复制物理架构之前,先看下一主两备流复制物理架构,如图所示。

上图中 Master为主库,两个备库分别为Save1、Slave2,Save1和 Slave2都通过流复制直连Master,三个数据库主机都位于机房A。
级联复制物理架构图如下所示。 

 第二张图的级联复制架构与第一张图中架构的主要区别在于Slave2备库不是直连Master主库,而是连接到Slave1备库,Slave1备库一方面接收来自Master发送的WAL日志,另一方面将WAL日志发送给Slave2备库,将既接收WAL同时又发送WAL的备库称为级联备库( cascading standby),这里Slave1就是级联备库,另外,将直连到主库的备库称为上游节点,连接到上游节点的其他备库称为下游节点。

级联复制主要作用在于:

  1. 小幅降低主库CPU压力。
  2. 减少主库带宽压力。
  3. 异地建立多个备库时,由于只需要一个备库进行跨机房流复制部署,其他备库可连接到这个级联备库,这种部署方案将大幅降低跨机房网络流量。

级联复制一个典型应用场景为一主两备,其中一个备库和主库同机房部署以实现本地高可用,另一备库跨机房部署以实现异地容灾,如下图所示。

 上图中 Slave1和Master为同机房,之间通过流复制实现本地高可用,Slave2为异地机房,通过级联复制实现异地容灾。

8.2 级联复制部署

这一节将演示级联复制的部署

物理部署图详见下图
 

 

 计划部署Slave1为级联复制节点,Slave2为备节点并上联到Slave1o
首先部署Slavel,使用异步流复制方式,Slave1的recovery.conf配置如下所示:

recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=192.168.28.74 port=1921 user=repuser application_name=slavel'

Slave1部署完成后,检查流复制状态,如果一切正常接着部署Slave2,重做Slave2备库,如下所示:

[postgres@pghost3 pg10]$ pg_basebackup -D /database/pg10/pg_root -Fp -Xs -v -p -h
192.168.28.74 -p 1921 -U repuser
pg_basebackup: initiating base backup,waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 4/4E000028 on timeline 7
pg_basebackup: starting background wAL receiver
9424317/9424317 kB (100%), 3/3 tablespaces
pg_basebackup: write-ahead log end point: 4/4E004AA8
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: base backup completed

配置Slave2的recovery.conf配置文件,如下所示:

recovery_target_timeline = 'latest '
standby_mode = on
primary_conninfo = 'host=192.168.28.75 port=1921 user-repuser application_name=slave2'

之后启动Slave2,如下所示:
检查Slave2日志,如果有报错则根据错误信息排错,以上是级联复制部署的所有步骤。在Master查询pg_stat_replication视图,如下所示:

postgres=#SBLECT pid, usename, application_name,client_addr, state,sync_state,sync_priority
FROM pg_stat_replication ;
pid    |  usename  | application_name |  client_addr  |    state   | sync_ state  | 
-------------------+------------------+--—------------+-----------------------------
25041  |  repuser  |       slave1     | 192.168.28.75 |  streaming |    async     |


sync priority
-------------
     0 

(1 row)

以上显示了一条记录,为Master到 Slave1的 WAL发送进程。在Slave1查询pg_stat_replication视图,如下所示:

postgres=# SELECT pid,usename, application_name,client_addr,state,sync_state, sync priority
FROM pg_stat_replication;
pid   |  usename  | application_name | client_addr |   state  | sync_state | sync_priority
------+-----------+------------------+-------------+----------+------------+---------------
5002  |  repuser  | slave2           |192.168.28.76| streaming|   async    |      0

(1 row)

以上显示了Slave1到Slave2的WAL发送进程,可见Slave1上也有了WAL发送进程。接着做个数据测试,在 Master 上创建一张表,并插入数据,如下所示:

[postgrespghost1 ~]$ psql postgres postgres
postgres=# CREATE table t_sr6(id int4);
CREATE TABLE

postgres=# INSERT INTO t_sr6 VALUES (1);
INSERT 0 1

在Slave1上验证数据,如下所示:

[postgres@pghost2 pg_root]$ psql postgres postgres
postgres=# SELECT * FROM t_sr6;
id
----
1
(1 row)

Slave1上有了表t_sr6,在 Slave2上验证数据,如下所示:

[postgres@pghost3 pg_root]$ psql postgres postgres
postgres=# SELECT * FROM t_sr6;
id
-----
1
(1 row)

Slave2上也有了数据。


http://www.niftyadmin.cn/n/348246.html

相关文章

NEEPU Sec 2023公开赛Reverse题目复现

文章目录 一.Base二.How to use python1.程序逻辑分析2.爆破flag[11]~flag[14]3.爆破sha14.sha256掩码爆破 三.IKUN检查器1.查看程序信息2.分析程序逻辑3.button1_conClick函数4.check1函数5.check2函数6.check3函数7.check4函数8.check5函数 四.junk code1.使用32位动态调试工…

vTESTstudio概述

vTESTstudio支持的测试用例编写方式 项目层级结构 从用例编写到测试执行及生成报告的整个流程 vTESTsutido 开发,CANoe执行测试 界面简介 CANoe 创建的测试用例用Test Modules执行,vTESTstudio 创建的测试用例用Test Units执行 先在vTESTstudio里创建pr…

网络安全是一个好专业吗

前言 网络安全作为一个专业领域,在当今数字时代正变得越发重要和关键。无论是企业还是个人,面对着越来越频繁的网络威胁和攻击,网络安全领域的专业人员扮演着至关重要的角色。那么,从一个资深网安工程师的角度来看,网…

通过Docker安装PostgreSQL12+Postgis3

下载PostgreSQL镜像: docker pull postgres:12.4 启动: docker run --name postgres \--restartalways \-e POSTGRES_PASSWORD123456 \-p 5432:5432 \-v /data/postgresql:/var/lib/postgresql/data \-d postgres:12.4 查看PostgreSQL容器&#xff1a…

好用又便宜的平替苹果笔有哪些?平价的平板触控笔推荐

苹果的Pencil在最近一直都受到市场的追捧,而苹果原装的那款电容笔,除了性能好,还有就是价格贵了点。当然,你也可以使用这款Apple Pencil,但是,如果你不愿意花费太多的钱,可以选择一个平替的电容…

LeetCode:26. 删除有序数组中的重复项

26. 删除有序数组中的重复项 1)题目2)代码3)结果 1)题目 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应…

香港VPS服务器如何屏蔽指定访客ip?

​  如果你是一个香港VPS服务器的管理员,你可能会遇到一些不良用户或者恶意攻击者,这些人会尝试通过不断的访问和攻击你的网站来破坏你的网站的运行。如何保护你的网站,你需要使用一些方法来屏蔽这些指定的访客IP。 首先,你需要…

springboot项目使用redis、springSecurity、jwt实现单点登录的小demo

1、jwt原理 JWT(JSON Web Token)是一种用于身份验证和授权的开放标准(RFC 7519)。它是一种轻量级的令牌格式,用于在网络应用间传输声明(claims)。JWT使用JSON对象来编码声明,并使用…