当前位置: 首页 > news >正文

【PG】PostgreSQL13主从流复制部署(详细可用)

目录

版本

部署主从注意点

1 主库上创建复制用户

2 主库上修改pg_hba.conf文件

3 修改文件后重新加载配置使其生效

4 主库上修改配置文件

5 重启主库pg使参数生效

6 部署从库

7 备份主库数据至从库

停止从库 

备份从库的数据库目录

新建数据库数据目录data

创建和主库相同表空间目录

进行备份

8 修改从库参数

9 查看主从状态

1 通过查看服务器进程

2 主库插入数据 验证在从库是否同步

3 查看状态表

主库查看pg_stat_replication表

从库查看pg_stat_wal_receiver

从库 pg_is_in_recovery()

参数解释 

相关表的字段注释


版本

数据库:PostgreSQL 13.12

服务器 :CentOS 7 

部署主从注意点

  • 表空间的挂载路径相同;与表空间相关的路径名将被未经修改地传递,因此如果该特性被使用主、备服务器必须对表空间具有完全相同的挂载路径,记住如果CREATE TABLESPACE在主服务器上被执行,在命令被执行前,它所需要的任何新挂载点必须在主服务器和所有后备服务器上先创建好
  • 硬件不需要完全相同;但是经验显示,在应用和系统的生命期内维护两个相同的系统比维护两个不相似的系统更容易
  • 操作系统位数相同;在任何情况下硬件架构必须相同 — 从一个 32 位系统传送到一个 64 位系统将不会工作。
  • PG主版本相同;不能在两个运行着不同主版本PostgreSQL的服务器之间传送日志

1 主库上创建复制用户

在主库上创建复制用的账号 ,需要有属性 replication 才能进行复制

CREATE ROLE repl login replication password 'repl';

2 主库上修改pg_hba.conf文件

允许从库IP可以通过repl用户连接主库

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# 网络段 10.79.21.0
host    replication     repl            10.79.21.0/24            trust

3 修改文件后重新加载配置使其生效

pg_ctl -D /home/storage/pgsql/data -l /home/storage/pgsql/data/server.log reload

4 主库上修改配置文件

listen_addresses = '*' # 允许所有IP访问
wal_level = replica # 可选值 minimal ,replica ,logical。要支持复制和归档,必须设置为replica 或logical
archive_mode = on # 开启归档模式,配合archive_command参数将WAL发送到归档目录 
archive_command = 'cp %p /home/storage/pgsql/archive/%f' # 将WAL日志拷贝到归档目录
max_wal_senders = 10  # 指定来自后备服务器或流式基础备份客户端的并发连接的最大数量

5 重启主库pg使参数生效

# 停止
pg_ctl -D /home/storage/pgsql/data -l /home/storage/pgsql/data/server.log stop# 启动
pg_ctl -D /home/storage/pgsql/data -l /home/storage/pgsql/data/server.log start

6 部署从库

参考我的博客 【PG】PostgreSQL单机部署(简洁命令版)-CSDN博客

7 备份主库数据至从库

停止从库 

pg_ctl stop -D /home/storage/pgsql/data

备份从库的数据库目录

mv data data_bak

新建数据库数据目录data

使用root 

mkdir data

chown postgres:postgres /home/storage/pgsql/data

创建和主库相同表空间目录

mkdir mytablespace

chown postgres:postgres mytablespace

进行备份

备份时注意要添加以下参数

-R 或者 --write-recovery-conf

创建一个standby.signal文件,并将连接设置附加到目标目录postgresql.auto.conf文件中。 这样可以简化使用备份结果设置备用服务器的过程。

postgresql.auto.conf文件将记录连接设置(如果有)以及pg_basebackup所使用的复制槽,这样流复制后面就会使用相同的设置。

pg_basebackup -h 10.79.21.30 -p 5432 -U repl -D /home/storage/pgsql/data -P --wal-method=stream -R

 备份之后的目录

8 修改从库参数

listen_addresses = '*' # 允许所有IP访问
hot_standby = on
primary_conninfo = 'host=10.79.21.30 port=5432 user=repl password=repl application_name=standby2129'

9 查看主从状态

1 通过查看服务器进程

主库多了 进程 postgres: walsender repl 10.79.21.29(32704) streaming 0/B000060

从库多了进程 postgres: walreceiver streaming 0/B000148

2 主库插入数据 验证在从库是否同步

INSERT INTO weather (date, city, temp_hi, temp_lo)VALUES ('2023-11-08', 'BeiJing', 54, 37);

3 查看状态表

主库查看pg_stat_replication表
postgres-# \x
Expanded display is on.
postgres=#  select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 161877
usesysid         | 16528
usename          | repl
application_name | walreceiver
client_addr      | 10.79.21.29
client_hostname  |
client_port      | 32704
backend_start    | 2023-11-08 10:38:46.379612+08
backend_xmin     |
state            | streaming
sent_lsn         | 0/B0003B8
write_lsn        | 0/B0003B8
flush_lsn        | 0/B0003B8
replay_lsn       | 0/B0003B8
write_lag        |
flush_lag        |
replay_lag       |
sync_priority    | 0
sync_state       | async
reply_time       | 2023-11-08 11:00:51.902209+08
从库查看pg_stat_wal_receiver
postgres=# select * from pg_stat_wal_receiver;
-[ RECORD 1 ]---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pid                   | 54324
status                | streaming
receive_start_lsn     | 0/B000000
receive_start_tli     | 1
written_lsn           | 0/B0003B8
flushed_lsn           | 0/B0003B8
received_tli          | 1
last_msg_send_time    | 2023-11-08 11:03:42.159233+08
last_msg_receipt_time | 2023-11-08 11:03:42.159264+08
latest_end_lsn        | 0/B0003B8
latest_end_time       | 2023-11-08 10:52:11.163215+08
slot_name             |
sender_host           | 10.79.21.30
sender_port           | 5432
conninfo              | user=repl passfile=/home/postgres/.pgpass channel_binding=disable dbname=replication host=10.79.21.30 port=5432 fallback_application_name=walreceiver sslmode=disable sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres target_session_attrs=any
从库 pg_is_in_recovery()

select pg_is_in_recovery();

postgres=# select pg_is_in_recovery();pg_is_in_recovery
-------------------t
(1 row)

参数解释 

listen_addresses (string)

指定服务器在哪些 TCP/IP 地址上监听客户端连接。值的形式是一个逗号分隔的主机名和/或数字 IP 地址列表。

  • 特殊项*对应所有可用 IP 接口。
  • 0.0.0.0允许监听所有 IPv4 地址并且::允许监听所有 IPv6 地址。
  • 如果列表为空,服务器将根本不会监听任何 IP 接口,在这种情况中只能使用 Unix 域套接字来连接它。
  • 默认值是localhost,它只允许建立本地 TCP/IP “环回”连接。
  • 虽然客户端认证允许细粒度地控制谁能访问服务器,listen_addresses控制哪些接口接受连接尝试,这能帮助在不安全网络接口上阻止重复的恶意连接请求。这个参数只能在服务器启动时设置。

wal_level (enum)

wal_level决定多少信息写入到 WAL 中。默认值是replica,它会写入足够的数据以支持WAL归档和复制,包括在后备服务器上运行只读查询。minimal会去掉除从崩溃或者立即关机中进行恢复所需的信息之外的所有记录。最后,logical会增加支持逻辑解码所需的信息。每个层次包括所有更低层次记录的信息。这个参数只能在服务器启动时设置。

archive_mode (enum)

当启用archive_mode时,可以通过设置 archive_command命令将完成的 WAL 段发送到 归档存储。除用于禁用的off之外,还有两种模式: onalways。在普通操作期间,这两种模式之间 没有区别,但是当设置为always时,WAL 归档器在归档恢复 或者后备模式下也会被启用。在always模式下,所有从归档恢复 的或者用流复制传来的文件将被(再次)归档。

archive_modearchive_command是独立的变量,这样可以在不影响归档模式的前提下修改archive_command。这个参数只能在服务器启动时设置。wal_level被设置为minimal时,archive_mode不能被启用。

archive_command (string)

本地 shell 命令被执行来归档一个完成的 WAL 文件段。字符串中的任何%p被替换成要被归档的文件的路径名, 而%f只被文件名替换(路径名是相对于服务器的工作目录, 即集簇的数据目录)。如果要在命令里嵌入一个真正的%字符,可以使用%%。有一点很重要,该命令只在成功时返回一个零作为退出状态。

这个参数只能在postgresql.conf文件中或在服务器命令行上设置。除非服务器启动时启用了archive_mode,否则它会被忽略。如果archive_mode被启用时,archive_command是一个空字符串(默认),WAL 归档会被临时禁用,但服务器仍会继续累计 WAL 段文件,期待着一个命令被提供。将archive_command设置为一个只返回真但不做任何事的命令(例如/bin/true或 Windows 上的REM)实际上会禁用归档,也会打破归档恢复所需的 WAL 文件链,因此只有在极少数情况下才能用。

max_wal_senders (integer)

指定来自后备服务器或流式基础备份客户端的并发连接的最大数量(即同时运行 WAL 发送进程的最大数)。 默认值是10。值0意味着禁用复制。

相关表的字段注释

pid: WAL发送进程的进程号。
usename: WAL发送进程的数据库用户名。
application_name:连接WAL发送进程的应用别名,此参数显示值为备库
recovery.conf配置文件中primary_conninfo参数application_name选项的值。
client_addr:连接到WAL发送进程的客户端IP地址,也就是备库的IP。
backend start: WAL发送进程的启动时间。
state:显示WAL发送进程的状态,startup表示WAL进程在启动过程中;catchup表示备库正在追赶主库;streaming表示备库已经追赶上了主库,并且主库向备库发送WAL日志流,这个状态是流复制的常规状态;backup表示通过pg_basebackup正在进行备份;stopping表示WAL发送进程正在关闭。
sentlsn: WAL发送进程最近发送的WAL日志位置。
write lsn:备库最近写人的WAL日志位置,这时WAL日志流还在操作系统缓存中,还没写人备库WAL日志文件。
flush lsn:备库最近写人的WAL日志位置,这时WAL日志流已写入备库WAL日志文件。
replay lsn:备库最近应用的WAL日志位置。
write_lag:主库上WAL日志落盘后等待备库接收WAL日志(这时WAL日志流还没写人备库WAL日志文件,还在操作系统缓存中)并返回确认信息的时间。
flush_lag:主库上WAL日志落盘后等待备库接收WAL日志(这时WAL日志流已写人备库WAL日志文件,但还没有应用WAL日志)井返回确认信息的时间。
replay_lag:主库上WAL日志落盘后等待备库接收WAL日志(这时WAL日志流已写入备库WAL日志文件,并且己应用WAL日志)并返回确认信息的时间。
sync _priority:基于优先级的模式中备库被选中成为同步备库的优先级,对于基于quorum的选举模式此字段则无影响。
sync_state:同步状态,有以下状态值,async表示备库为异步同步模式;potential表示备库当前为异步同步模式,如果当前的同步备库岩机,
异步备库可升级成为同步备库;sync表示当前备库为同步模式;quorum表示备库为quorumstandbys的候选,
其中write_lag、flush一lag、replay_lag三个字段为PostgreSQL10版本新特性,是衡量主备延迟的重要指标

相关文章:

【PG】PostgreSQL13主从流复制部署(详细可用)

目录 版本 部署主从注意点 1 主库上创建复制用户 2 主库上修改pg_hba.conf文件 3 修改文件后重新加载配置使其生效 4 主库上修改配置文件 5 重启主库pg使参数生效 6 部署从库 7 备份主库数据至从库 停止从库 备份从库的数据库目录 新建数据库数据目录data 创建和…...

学习pytorch15 优化器

优化器 官网如何构造一个优化器优化器的step方法coderunning log出现下面问题如何做反向优化? 官网 https://pytorch.org/docs/stable/optim.html 提问:优化器是什么 要优化什么 优化能干什么 优化是为了解决什么问题 优化模型参数 如何构造一个优化器…...

[算法日志]图论刷题 沉岛思想的运用

[算法日志]图论刷题: 沉岛思想的运用 leetcode 695 岛屿最大面积 给你一个大小为 m x n 的二进制矩阵 grid . 岛屿 是由一些相邻的 1 (代表土地) 构成的组合, 这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻. 你可以假设 grid 的四个边缘都被 0&#xff08…...

Web服务器的搭建

网站需求: 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个网站目录分别显示学生信息,教学资料和缴费网站,基于www.openlab.com/student 网站访问学生信息,www.openlab.com/data网站访问教…...

如何使用 GTX750 或 1050 显卡安装 CUDA11+

前言 由于兼容性问题,使得我们若想用较新版本的 PyTorch,通过 GPU 方式训练模型,也得更换较新版本得 CUDA 工具包。然而 CUDA 的版本又与电脑显卡的驱动程序版本关联,如果是低版本的显卡驱动程序安装 CUDA11 及以上肯定会失败。 比…...

跟着森老师学React Hooks(1)——使用Vite构建React项目

Vite是一款构建工具,对ts有很好的支持,最近也是在前端越来越流行。 以往的React项目的初始化方式大多是通过脚手架create-react-app(本质是webpack),其实比起Vite来构建,启动会慢一些。 所以这次跟着B站的一个教程,使用…...

强力解决使用node版本管理工具 NVM 出现的问题(找不到 node,或者找不到 npm)

强力解决使用node版本管理工具 NVM 出现的问题(找不到 node,或者找不到 npm) node与npm版本对应关系 nvm是好用的Nodejs版本管理工具, 通过它可以方便地在本地调换Node版本。 2020-05-28 Node当前长期稳定版12.17.0,…...

Docker指定容器使用内存

Docker指定容器使用内存 作者:铁乐与猫 如果是还没有生成的容器,你可以从指定镜像生成容器时特意加上 run -m 256m 或 --memory-swap512m来限制。 -m操作指定的是物理内存,还有虚拟交换分区默认也会生成同样的大小,而–memory-…...

做什么数据表格啊,要做就做数据可视化

是一堆数字更易懂,还是图表更易懂?很明显是图表,特别是数据可视化图表。数据可视化是一种将大量数据转化为视觉形式的过程,通过图形、图表、图像等方式呈现数据,以便更直观地理解和分析。 数据可视化更加生动、形象地…...

CSS特效003:太阳、地球、月球的旋转

GPT能够很好的应用到我们的代码开发中,能够提高开发速度。你可以利用其代码,做出一定的更改,然后实现效能。 css实战中,这种球体间的旋转,主要通过rotate()旋转函数来实现。实际上,蓝色的地球和黑色的月球…...

云计算的大模型之争,亚马逊云科技落后了?

文丨智能相对论 作者丨沈浪 “OpenAI使用了Azure的智能云服务”——在过去的半年,这几乎成为了微软智能云最好的广告词。 正所谓“水涨船高”,凭借OpenAI旗下的ChatGPT在全球范围内爆发,微软趁势拉了一波自家的云计算业务。2023年二季度&a…...

【form校验】3.0项目多层list嵌套

const { required, phoneOrMobile } CjmForm.rules; export default function detail() {const { query } getRouterInfo(location);const formRef useRef(null);const [crumbList, setCrumbList] useState([{url: "/wenling/Reviewer",name: "审核人员&quo…...

公共功能测试用例

1、UI测试 布局是否合理,输入框、按钮是否对齐 行列间距是否保持一致弹出窗口垂直居中对其界面的设计风格是否与UI的设计风格一致 系统是否使用统一风格的控件界面的文字是否简洁易懂,是否有错别字 兼容性测试:不同浏览器、版本、分辨率下&a…...

【电路笔记】-并联RLC电路分析

并联RLC电路分析 文章目录 并联RLC电路分析1、概述2、AC的行为3、替代配置3.1 带阻滤波器3.2 带通滤波器 4、总结 电子器件三个基本元件的串联行为已在我们之前的文章系列 RLC 电路分析中详细介绍。 在本文中,介绍了另一种称为并联 RLC 电路的关联。 在第一部分中&a…...

ros1 client

Client(客户端):发布海龟生成请求 [类似Publisher] Serve(服务端):海龟仿真器,接收请求 [类似于Subscriber] Service(服务):生成海龟的具体内容,其中服务类型…...

射频功率放大器应用中GaN HEMT的表面电势模型

标题:A surface-potential based model for GaN HEMTs in RF power amplifier applications 来源:IEEE IEDM 2010 本文中的任何第一人称都为论文的直译 摘要:我们提出了第一个基于表面电位的射频GaN HEMTs紧凑模型,并将我们的工…...

CSP(Common Spatial Patterns)——EEG特征提取方法详解

基于CSP的运动想象 EEG 特征提取和可视化参考前文:https://blog.csdn.net/qq_43811536/article/details/134273470?spm1001.2014.3001.5501 目录 1. CSP是什么?1.1 CSP的含义1.2 CSP算法1.3 CSP特征的特点 2. CSP特征在EEG信号分类任务中的应用2.1 任务…...

【Git】Git 学习笔记_操作本地仓库

1. 安装与初始化配置 1.1 安装 下载地址 在文件夹里右键点击 git bash here 即可打开命令行面板。 git -v // 查看版本1.2 配置 git config --global user.name "heo" git config --global user.email xxxgmail.com git config --global credential.helper stor…...

杂记(3):在Pytorch中如何操作将数据集分为训练集和测试集?

在Pytorch中如何操作将数据集分为训练集和测试集? 0. 前言1. 手动切分2. train_test_split方法3. Pytorch自带方法4. 总结 0. 前言 数据集需要分为训练集和测试集! 其中,训练集单纯用来训练,优化模型参数;测试集单纯用…...

【MySQL篇】数据库角色

前言 数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。因此,可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。 CREATE ROLE:创建一个角色 GRANT:给角色授…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

【单片机期末】单片机系统设计

主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...