【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版本新特性,是衡量主备延迟的重要指标

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

客户服务质量提升的三种思路

客户服务质量是企业在市场竞争中立于不败之地的重要因素之一,优秀的客户服务不仅可以提高客户满意度,还可以提高客户黏度和回头率。随着经济的发展,客户服务行业也在不断发展壮大。在这个竞争激烈的行业中,企业如何提高客户服务质…

送水服务预约小程序内容该如何做

无论小区还是办公楼等场景,送水服务往往有较高需求,同时该服务属于长期稳定性的,因此对品牌来说,如何打造品牌获取更多用户及转化非常重要,然而在实际订水过程中,又会面临着一些难题: 1、品牌传…

基于SSM的学院就业信息网设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

【FPGA】正确处理设计优先级--或许能帮你节省50%的资源

概述 假如现在有一种方法–可以在不怎么需要修改已有设计的情况下,就可以帮您节省50%的设计资源,那你会试试看吗? 当前市场环境下,更低廉的成本却可获得同等性能无疑是极具诱惑的。本文将介绍一种FPGA设计技术,该技术…

docker创建并访问本地前端

docker创建并访问本地前端,直接上命令: 安装nginx镜像: docker pull nginx 查看已安装的nginx: docker images 创建DockerFile文件,直接在当前文件夹种创建 touch Dockerfile 在Dockerfile写入内容: F…

ISP算法——UVNR

ISP算法——UVNR 概念简介 UVNR也就是经过CSC只有在YUV域对UV两个色域进行降噪,在有些方案里也叫CNR(chroma noise reduction)。主要就是在YUV域针对彩燥进行特殊处理的一系列算法。 关于噪声产生的原因在前面关于降噪的文章和视频中已经做…

Redis系列-Redis性能优化与安全【9】

目录 Redis系列-Redis性能优化与安全【9】Redis性能优化策略Redis安全设置与防护措施Redis监控与诊断工具介绍 七、Redis应用案例与实战八、Redis未来发展与趋势 个人主页: 【⭐️个人主页】 需要您的【💖 点赞关注】支持 💯 Redis系列-Redis性能优化与安…

基于Springboot的智慧食堂设计与实现(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的智慧食堂设计与实现(有报告)。Javaee项目,springboot项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项…

数据结构: unordered_map与unordered_set

目录 1.框架 2.结构 unordered_map unordered_set 3.对HashTable的修改 更改模板参数 4.增加迭代器 a.结构 b.运算符重载 c.HashTable封装迭代器 d.unordered_map与unordered_set的迭代器 1.框架 1.复用HashTable ~~> 增加模板参数KeyOfT 来获取 Key值 unorder…

『Nacos』 入门教程

前言 本文为 Nacos 平台快速入门教程,本文将会使用通俗易懂的语言手把手带您了解、使用 Nacos 平台,适合未接触过 Nacos 的初学者 官方手册:Nacos | Nacos 官方仓库:alibaba/nacos 版本:2.X 本文示例代码仓库&#xf…

Ansible自动化运维工具(常用模块与命令)

ansible基于Python开发,实现了批量系统配置,批量程序部署,批量运行命令等功能 ansible特点 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;默认使用ssh协议对设备进行管理;有大…

更改 npm的默认缓存地址

npm的默认缓存一般在C:\Users\用户名\AppData\Roaming路径下的npm和npm_cache,而c盘往往空间不大。 1、在其他盘新建两个文件夹,如D盘,node_cache和node_global。如下图所示。 2、在cmd中执行npm config set prefix “node_cache的路径”&a…

InSAR数据处理、地形三维重建、形变信息提取、监测丨GMTSAR合成孔径雷达干涉测量丨GNSS、北斗高精度数据处理

目录 ①合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测等应用 ②基于GMTSAR合成孔径雷达干涉测量InSAR数据处理、形变信息提取与分析 ③GNSS、北斗高精度数据处理暨新版GAMITGLOBK软件应用 更多应用 ①合成孔径雷达干涉测量InSAR数据处理、地形三维…

网络层+数据链路层+物理层

一)网络层协议: 一)IP协议报头介绍: 咱们的IP协议能够在两点之间规划处一条合适的路径,什么叫做合适?那就得看咱们的TOS是怎么进行选的,比如说选择最大吞吐量,咱们就需要进行选择一个最大的带宽路径; 16位总长度:IP数据…

json字符串转为开闭区间

1.需求背景 1.1 前端页面展示 1.2 前后端约定交互json 按照页面每一行的从左到右 * 示例 [{"leftSymbol":">","leftNum":100,"relation":"无","rightSymbol":null,"rightNum":0}, {"left…

用于强化学习的置换不变神经网络

一、介绍 如果强化学习代理提供的输入在训练中未明确定义,则通常表现不佳。一种新方法使 RL 代理能够正常运行,即使受到损坏、不完整或混乱的输入的影响也是如此。 “大脑能够使用来自皮肤的信息,就好像它来自眼睛一样。我们不是用眼睛看&…

笔记本电脑的麦克风没有声音

笔记本电脑的麦克风没有声音是一个常见的问题,可能是由于以下几个原因导致的: 第一,麦克风没有启用或者被禁用了。在Windows系统中,右键单击任务栏上的音量图标,选择“录音设备”,在弹出窗口中找到麦克风&a…

Webpack--动态 import 原理及源码分析

前言 在平时的开发中,我们经常使用 import()实现代码分割和懒加载。在低版本的浏览器中并不支持动态 import(),那 webpack 是如何实现 import() polyfill 的? 原理分析 我们先来看看下面的 demo function component() {const btn docume…

JavaScript_Node节点属性_nodeName

nodeName属性:返回节点的名称 节点的类型有七种 Document:整个文档树的顶层节点 DocumentType:doctype标签 Element:网页的各种HTML标签 Attribute:网页元素的属性 Text:标签之间或标签包含的文本 C…

box-shadow用法详解

1、box-shadow概述 用来实现对元素产生阴影效果 1.1、box-shadow常用属性 box-shadow: h-shading v-shading blur spread color inset; box-shadow: X轴偏移量 Y轴偏移量 阴影模糊半径 阴影扩展半径 阴影颜色 投影方式…