[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
相关推荐
秉承初心10 天前
PostgreSQL 数据性能瓶颈突破实战
数据库·postgresql·oracle
IvorySQL10 天前
PostgreSQL 技术日报 (6月15日)|PG19 性能优化推进,POSETTE 大会倒计时 2 天
数据库·人工智能·postgresql·开源
IvorySQL11 天前
PostgreSQL 技术日报 (6月16日)|Neon 自动化再进一步,逻辑复制冲突日志迎来 v50 更新
数据库·postgresql·自动化
倒流时光三十年11 天前
PostgreSQL 聊一下索引和排序规则
postgresql
睡不醒男孩03082311 天前
PostgreSQL 数据库运维转型:从传统模式到 CLup 平台的 25 个核心 FAQ
运维·数据库·postgresql
JOJO数据科学11 天前
pgAdmin4 Electron 鸿蒙 PC 适配全记录:从白屏到连接 PostgreSQL
postgresql·electron·harmonyos
日取其半万世不竭11 天前
PostgreSQL 跑在 Docker 里怎么备份?恢复成功才算备份成功
数据库·docker·postgresql
倒流时光三十年11 天前
PostgreSQL LEAST 表达式函数详解
数据库·postgresql
Rain50912 天前
2.4. PostgreSQL 数据库连接与实战指南
前端·数据库·人工智能·后端·postgresql·数据分析
倒流时光三十年12 天前
PostgreSQL CASE 条件表达式详解
数据库·postgresql