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

news/2024/7/9 22:02:26 标签: postgresql, 数据库

目录

版本

部署主从注意点

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.niftyadmin.cn/n/5161989.html

相关文章

c++ 信奥赛编程 2049:【例5.19】字符串判等

#include <iostream> using namespace std; string strlwr(string s) { for(int i0;i<s.size();i){if(s[i]>A && s[i]<Z)s[i]s[i]-Aa;}return s; } int main() {string str1,str2; //定义两个字符串变量 getline(cin,str1); //通过函数输入字符串 getl…

​轻量应用服务器是什么?和云服务器的区别有哪些

在当今快速发展的应用开发和网站建设领域&#xff0c;选择合适的服务器配置是一个相当重要的事。作为当前最优质的海外服务器服务商&#xff0c;现在也受到了越来越多用户的欢迎&#xff0c;而在近几年的服务器领域&#xff0c;轻量应用服务器是一个备受关注的服务器类型&#…

Microsoft Edge浏览器不兼容解决办法

找到 Edge 的安装位置&#xff0c;一般在 C:\Program Files (x86)Microsoft Edge\Application\ 这个目录&#xff0c;把 edge.exe 或msedge.exe 修改为 chrome.exe 再重启电脑。

python自动化测试(3)- 自动化框架及工具

1、概述 手续的关于测试的方法论&#xff0c;都是建立在之前的文章里面提到的观点&#xff1a; 功能测试不建议做自动化接口测试性价比最高接口测试可以做自动化 后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍。 本系列选择的测试语言是 python 脚本语言。由于其官…

【通信原理】第三章 随机过程——例题

一、随机过程 1. 数学特征 ① 随机信号&#xff08;三角函数表达式&#xff09; ② 随机信号&#xff08;求和表达式&#xff09; 2. 功率谱密度 ① 相位确定&#xff0c;求功率谱密度 ② 已知相位分布&#xff0c;求功率谱密度 ③ 信号为两信号之和&#xff0c;求功率谱密度…

AtCoder abc148

C题 求GCD D题 顺序遍历 E题 trailing zero只与5的个数有关&#xff0c;因此算一下5/25/125…的倍数 # -*- coding: utf-8 -*- # time : 2023/6/2 13:30 # file : atcoder.py # software : PyCharmimport bisect import copy import sys from itertools import perm…

PHP 在线学习平台系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 在线学习平台系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 PHP 在线学习平台系统1 代码 https://download.csdn.net/download/qq_41…

力扣:152. 乘积最大子数组(Python3)

题目&#xff1a; 给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的非空连续子数组&#xff08;该子数组中至少包含一个数字&#xff09;&#xff0c;并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 子数组 是数组的连续子序列。 来源&#xff1…