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

news2024/11/26 12:25:09

目录

版本

部署主从注意点

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

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

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

相关文章

干货 | 接口自动化测试分层设计与实践总结

接口测试三要素: 参数构造 发起请求,获取响应 校验结果 一、原始状态 当我们的用例没有进行分层设计的时候,只能算是一个“苗条式”的脚本。以一个后台创建商品活动的场景为例,大概流程是这样的(默认已经是登录状态下)&#…

Python--快速入门三

Python--快速入门三 1.Python列表 列表是Python用于储存一系列数据的容器(特点是可以存放不同类型的数据) python_list ["键盘",True,66,88.8] 列表是可变数据类型,可以直接对列表中的元素进行更改而不需要赋值给本身 列表方法: 1.appen…

纯干货:赝势的选择 | VASP计算入门教程,真的超级有用

VASP软件是基于贋势和平面波基组的第一性原理密度泛函计算程序。VASP使用的是平面波基组,电子与原子核之间的相互作用使用投影缀加波贋势(Projector Augmented Wave,PAW)方法描述,从而进行量子力学计算。VASP采用PAW贋…

成绩公布方式,这样操作更方便

老师们!又到了期中,是不是又在为如何安全、高效的公布学生成绩而烦恼呢?别担心,今天我就给大家分享几种超实用的成绩公布方式,不仅减轻了你的工作负担,还能让学生和家长们也方便! 1 Excel表格&a…

【Android Studio】Android Studio修改代码编辑区(工作区)背景色

Android Studio 字体大小及背景色的设置 1、 打开File—>Settings 或者 Android Studio—>CtrlAlts 2、 在setting对话框中选中“Editor->Colors&Fonts->Font , 点击Save as,自定义一个主题,选择字体,size和行间距,保存。 3…

Flink -- 状态与容错

1、Stateful Operations 有状态算子: 有状态计算,使用到前面的数据,常见的有状态的算子:例如sum、reduce,因为它们在计算的时候都是用到了前面的计算的结果 总结来说,有状态计算并不是独立存在的&#xf…

C++学习---异常处理机制

文章目录 前言abort()函数 and 返回错误码的异常方式C异常处理机制异常的类别what()函数 前言 abort()函数 and 返回错误码的异常方式 在说C异常处理机制之前,了解一下abort()函数和返回错误码的异常处理。 Abort( )函数的原型位于头文件cstdlib(或std…

CSS关于默认宽度

所谓的默认宽度&#xff0c;就是不设置width属性时&#xff0c;元素所呈现出来的宽度 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title><style>* {margin: 0;padding: 0;}.box {/…

git 生成公钥

1、通过命令 ssh-keygen 生成 SSH Key&#xff1a; ssh-keygen -t ed25519 -C "Gitee SSH Key" 三次回车 2、查看生成的 SSH 公钥和私钥&#xff1a; ls ~/.ssh/ 3、把公钥设置到git id_ed25519.pub 4、测试 ssh -T gitgitee.com 成功&#xff01;&#xff01;&…

基于减法平均算法的无人机航迹规划-附代码

基于减法平均算法的无人机航迹规划 文章目录 基于减法平均算法的无人机航迹规划1.减法平均搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用减法平均算法来优化无人机航迹规划。 …

朋友圈延迟评论,你用过吗?

在社交媒体时代&#xff0c;朋友圈已经成为人们交流和互动的重要平台。然而&#xff0c;在发表评论时&#xff0c;我们往往会被情绪冲昏头脑&#xff0c;或者因为时间紧迫而没有充分思考。这可能会导致一些不恰当的言论&#xff0c;或者错过一些更精准的表达方式。朋友圈延迟评…

摄像头内参准确性验证方法

前言 摄像头内参标定出来后&#xff0c;标定结果是否准确&#xff1f;有些内参准确性的验证方案需要很大的场地&#xff0c;且有很多误差源不好控制&#xff08;特别是对视野比较大的摄像头&#xff09;&#xff0c;惠州市华阳数码特电子有限公司发明了一种占用场地小测试精度…

uniapp u-tabs表单如何默认选中

首先先了解该组件&#xff1b;该组件&#xff0c;是一个tabs标签组件&#xff0c;在标签多的时候&#xff0c;可以配置为左右滑动&#xff0c;标签少的时候&#xff0c;可以禁止滑动。 该组件的一个特点是配置为滚动模式时&#xff0c;激活的tab会自动移动到组件的中间位置。 …

【Java初阶习题】 -- 类和对象

目录 1.局部变量必须先初始化才能使用2. this的两种用法3. import语句不能导入一个指定的包4.代码块的执行顺序5.静态变量的调用6 . 现有一个Data类&#xff0c;内部定义了属性x和y&#xff0c;在main方法中实例化了Data类&#xff0c;并计算了data对象中x和y的和。 1.局部变量…

11月第1周榜单丨飞瓜数据B站UP主排行榜榜单(B站平台)发布!

飞瓜轻数发布2023年10月30日-11月5日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营…

【分布式事务】深入探索 Seata 的四种分布式事务解决方案的原理,优缺点以及在微服务中的实现

文章目录 前言一、XA 模式1.1 XA 模式原理1.2 XA 模式的优缺点及应用场景1.3 Seata XA 模式在微服务中的实现 二、AT 模式2.1 Seata AT 模式原理2.2 AT 模式的脏写问题和写隔离3.3 AT 模式的优缺点3.4 Seata AT 模式在微服务中的实现 三、TCC 模式3.1 TCC 模式原理3.2 Seata 的…

洛谷 P1020 [NOIP1999 普及组] 导弹拦截【一题掌握三种方法:动态规划+贪心+二分】最长上升子序列LIS解法详解

P1020 [NOIP1999 普及组] 导弹拦截 前言题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题目分析注意事项 代码动态规划&#xff08;NOIP要求&#xff1a;时间复杂度O(n^2^)&#xff09;贪心二分&#xff08;O(nlgn)&#xff09; 后话额外测试用例样例输入 #1…

数据结构:Map和Set(2):相关OJ题目

目录 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 771. 宝石与石头 - 力扣&#xff08;LeetCode&#xff09; 旧键盘 (20)__牛客网 (nowcoder.com) 138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 692. 前K个高频单词 - 力扣&#xff08…

“百人专家团”背书 袋鼠妈妈“双十一”蓄势待发

从万千商家的角度来看,“双十一”实际上就是一场没有硝烟的“战争”,只有用心做产品的品牌才能成为常胜将军,要想在双十一脱颖而出在同品类榜单上占据有利位置,品牌力和产品力二者缺一不可。而专注母婴护肤10年的袋鼠妈妈品牌便是如此,从品牌诞生以来,始终专注母婴用户需求,打造…

STM32MPU6050角度的读取(STM32驱动MPU6050)

注&#xff1a;文末附STM32驱动MPU6050代码工程链接&#xff0c;需要的读者请自取。 一、MPU6050介绍 MPU6050是一款集成了三轴陀螺仪和三轴加速度计的传感器芯片&#xff0c;由英国飞利浦半导体&#xff08;现为恩智浦半导体&#xff09;公司生产。它通过电子接口&#xff08…