[postgres]配置主从异步流复制

前言

环境信息

IP 角色 操作系统 PostgreSQL版本
192.168.1.112 主库 Debian 12 15.3
192.168.1.113 从库 Debian 12 15.3

配置主从

  1. 修改主库的postgresql.conf文件。修改此配置文件需重启数据库服务。归档脚本内容见"附录-clean_archivelog"

    listen_addresses = '*'
    archive_mode = on
    archive_command = 'bash /home/postgres/scripts/clean_archivelog.sh %f %p'

  2. 主库创建用户

sql 复制代码
create user replicator replication password '1234qwer';
  1. 修改主库pg_hba.conf

    host replication replicator 192.168.1.113/24 scram-sha-256

  2. 重载pg_hba.conf的配置

bash 复制代码
pg_ctl reload -D /home/postgres/apps/pgsql/data/
  1. 删除从库的数据目录,备份主库的数据
bash 复制代码
rm -rf /home/postgres/apps/pgsql/data
mkdir /home/postgres/apps/pgsql/data
chmod -R 700 /home/postgres/apps/pgsql/data

pg_basebackup -h 192.168.1.112 -p 5432 -U replicator -D /home/postgres/apps/pgsql/data/ -P -v -R -X stream -C -S slot1
  1. 备份完成后,从库的data目录下自动生成postgresql.auto.confstandby.signal文件。
    1. postgresql.auto.conf包含主库节点的相关连接信息
    2. standby.signal用于标识当前节点为从库节点
  2. 启动从库。PS:因为从库的配置皆从主库复制而来,因此归档脚本也要在从库服务器存在。
bash 复制代码
pg_ctl start -D /home/postgres/apps/pgsql/data -l ~/logfile

测试

  1. 主库建库建表添数,之后查看从库是否同步数据
bash 复制代码
create database reptest;
\c reptest
create table t1(id int, time timestamp);
insert into t1 values (1, now());
  1. 主库psql查看从库的相关信息
sql 复制代码
-- 启用扩展输出
\x
-- 检查复制状态
select * from pg_stat_replication;

-[ RECORD 1 ]----+------------------------------
pid              | 3794
usesysid         | 16388
usename          | replicator
application_name | walreceiver
client_addr      | 192.168.1.113
client_hostname  | 
client_port      | 41708
backend_start    | 2024-01-27 18:44:08.326476+08
backend_xmin     | 
state            | streaming
sent_lsn         | 0/33FF750
write_lsn        | 0/33FF750
flush_lsn        | 0/33FF750
replay_lsn       | 0/33FF750
write_lag        | 
flush_lag        | 
replay_lag       | 
sync_priority    | 0
sync_state       | async
reply_time       | 2024-01-27 18:54:58.764699+08
  1. 查看主库进程,会有walsender进程
bash 复制代码
$ ps -ef | grep postgres:

postgres    3794    3739  0 18:44 ?        00:00:00 postgres: walsender replicator 192.168.1.113(41708) streaming 0/33FF750
  1. 查看从库进程,会有walreceiver进程
bash 复制代码
$ ps -ef | grep postgres:

postgres    1309    1305  0 18:44 ?        00:00:01 postgres: walreceiver streaming 0/33FF838

附录

clean_archive

bash 复制代码
#!/bin/bash

set -u

log_dt=$(date +%F)
archivelog_dir="/home/postgres/archivelog/${log_dt}"

if [ ! -d "${archivelog_dir}/$1" ]; then
    mkdir -p "${archivelog_dir}/$1"
fi

cp --preserve=timestamps $2 ${archivelog_dir}/$1

find ${archivelog_dir}/* -type f -mtime +7 | xargs rm -f
相关推荐
总有刁民想爱朕ha17 小时前
银河麒麟v10服务器版Docker部署PostgreSQL 14教程
docker·postgresql·容器·银河麒麟服务器版v10
【上下求索】17 小时前
学习笔记096——Windows postgreSQL-18.1[压缩包版本]
windows·笔记·学习·postgresql
jingyucsdn17 小时前
将postgresql结构和数据备份成sql语句
数据库·sql·postgresql
ChristXlx18 小时前
Linux安装MongoDB(虚拟机适用)
linux·mongodb·postgresql
yfs102418 小时前
PostgreSQL 16 + pgvector 完整安装和内网访问指南(Ubuntu 20.04)
数据库·ubuntu·postgresql
Howie Zphile19 小时前
在 WSL Ubuntu 上从零到数据迁移:通过 pgloader 将 SQL Server 转 PostgreSQL 实战笔记
笔记·ubuntu·postgresql
暴躁的菜鸡1 天前
postgresql16.8二进制包编译
ubuntu·postgresql
2301_800256111 天前
第十一章 PostgreSQL 服务器编程知识点梳理(1)
服务器·数据库·postgresql
暴躁的菜鸡2 天前
Ubuntu22.04安装postgresql16.8
ubuntu·postgresql
WayserKON2 天前
pg 窗口函数
数据库·postgresql