PG-流复制

1. 流复制介绍

在9.0版本开始支持流复制(物理复制)。通过流复制技术,从实例级复制出一个和主库一样的从库。

2. 异步复制模式配置

2.1 软件部署和数据库初始化


2.2 参数配置(复制参数保持一致)

1)postgresql.conf文件

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
grep -Ev '^[[:space:]]|^#|^$' ${PGDATA}/postgresql.conf
# 备份配置文件
cp ${PGDATA}/postgresql.conf{,_$(date +%Y%m%d)}
 
# 添加复制参数配置
cat >> ${PGDATA}/postgresql.conf <<EOF
 
wal_level = replica
archive_mode = on
archive_command = '/usr/bin/lz4 -q -z %p /ups/data/pgdata/12/archive_wals/%f.lz4'
recovery_target_timeline='latest'
max_wal_senders = 10
wal_keep_segments = 64
hot_standby = on
hot_standby_feedback = on
full_page_writes = on
wal_log_hits = on
EOF
# 检查确认配置
grep -Ev '^[[:space:]]|^#|^$' ${PGDATA}/postgresql.conf


2) pg_hba.conf文件(客户端认证连接)

01
02
03
04
05
06
cp ${PGDATA}/pg_hba.conf ${PGDATA}/pg_hba.conf_$(date +%Y%m%d)
cat >> ${PGDATA}/pg_hba.conf <<EOF
# 同步账号
host    replication     sync             192.168.10.181/24            md5
host    replication     sync             192.168.10.182/24            md5
EOF


2.3 创建复制账号

01
02
03
04
05
06
07
CREATE USER sync
REPLICATION
LOGIN
CONNECTION LIMIT 5
ENCRYPTED PASSWORD 'sync12345';
 
GRANT EXECUTE ON FUNCTION pg_read_binary_file(text) TO sync;


3.创建备库

1)拷贝文件方式

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
-- pg_start_backup() 函数在主库上发起一个在线备份,命令执行成功后,将数据文件拷贝到备节点
SELECT pg_start_backup('francs_bkl');
 
--拷贝数据文件
cd /ups/data/pgdata/11/
tar czvf pgdata.tgz pg_* --exclude=pg_root/pg_wal
 
scp pgdata.tgz postgres@192.168.10.182:/ups/data/pgdata/11
 
-- 备库解压
tar -xf pgdata.tgz
mkdir -p /ups/data/pgdata/11/pg_root/pg_wal/archive_status
chown -R postgres:postgres /ups/data/pgdata/11/pg_root/pg_wal
chmod -R 700 /ups/data/pgdata/11/pg_root/pg_wal
 
-- 文件拷贝到备节点后,在主库上执行以下命令
SELECT pg_stop_backup();


2)pg_basebackup 方式部署流复制

01
pg_basebackup -D /ups/data/pgdata/11/pg_root -Fp -Xs -v -P -h 192.168.10.181 -p 1921 -U sync

3.2 备库参数配置

1)recovery.conf文件配置

01
02
03
04
05
06
07
08
09
10
11
12
13
# 备库配置( 注意:12版本已经 将recovery.conf 配置文件中的参数合并到 postgresql.conf)
# 备份
cp $PGHOME/share/recovery.conf.sample $PGDATA/recovery.conf
 
grep -Ev '^[[:space:]]|^#|^$' ${PGDATA}/recovery.conf
# 添加参数
cat >> ${PGDATA}/recovery.conf <<EOF
 
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=192.168.10.181 port=1921 user=sync application_name=s1'
trigger_file = '/ups/data/pgdata/11/pg_root/.postgresql.trigger.1921'
EOF


2)账号密码文件

01
02
03
04
05
06
touch ~/.pgpass
chmod 0600 ~/.pgpass
cat >> ~/.pgpass <<EOF
192.168.10.181:1921:replication:sync:sync12345
192.168.10.182:1921:replication:sync:sync12345
EOF


4. 启动备库

01
02
systemctl start postgresql-11.service
systemctl status postgresql-11.service


5. 检查状态

01
02
03
04
05
06
# 主库检查复制状态:
SELECT usename , application_name , client_addr, sync_state FROM pg_stat_replication ;
 
 
# 结果是f则为主库,t为备库
select pg_is_in_recovery();


clipboard


6. 问题

6.1 同步主备库一致时间点(故障切换时运用)

01
pg_rewind --target-pgdata=/ups/data/pgdata/11/pg_root  --source-server='host=192.168.10.181 port=1921 user=sync dbname=postgres password=sync12345'
posted @   KuBee  阅读(545)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示

目录导航