IT 邦德

挺好看的一位实习生,PG主流从搭建的如此666

作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验
擅长主流数据Oracle、MySQL、PG、openGauss运维
备份恢复,安装迁移,性能优化、故障应急处理等

可提供技术业务:
1.DB故障处理/疑难杂症远程支援
2.Mysql/PG/Oracle/openGauss
数据库部署及数仓搭建

•••
微信:jem_db
QQ交流群:587159446
公众号:IT邦德

@

  • 1.主从流复制介绍

  • 2.主库白名单设置

  • 3.主库开归档

  • 4.主库创建复制用户

  • 5.从库对主库备份

  • 6.还原从库

  • 7.主从状态

  • 8.主从复制同步测试

    • 8.1 主库插入

    • 8.2 从库验证

  • 9.总结

前言

❝

PostgreSQL在9.x之后引入了主从的流复制机制,流复制同步方式有同步、异步两种

1.主从流复制介绍

在流复制中,三种类型的进程协同工作:
1.主服务器上的walsender进程将WAL(预写日志)数据发送到备用服务器。
2.备用服务器上的walreceiver进程接收并重放WAL数据。
3.备用服务器上的启动进程启动walreceiver进程。

walsender和walreceiver使用单个TCP连接进行通信。

Image

2.主库白名单设置

su - postgres

cat > $PGDATA/pg_hba.conf << EOF
# TYPE  DATABASE    USER    ADDRESS       METHOD
local     all       all                    trust
host      all       all   127.0.0.1/32     trust
host      all       all    0.0.0.0/0      md5
host   replication  all    0.0.0.0/0      md5
local  replication  all                    trust
EOF

3.主库开归档

[root@primary ~]# mkdir -p /var/lib/pgsql/archive
[root@primary ~]# chown -R postgres.postgres /var/lib/pgsql/archive

su - postgres

cat >> $PGDATA/postgresql.conf <<"EOF"
wal_level='replica'
archive_mode='on'
archive_command='test ! -f /var/lib/pgsql/archive/%f && cp %p /var/lib/pgsql/archive/%f'
restore_command='cp /var/lib/pgsql/archive/%f %p'
max_wal_senders=10
EOF

Image

4.主库创建复制用户

create role repladm login encrypted 
password 'replica' replication;
Image

5.从库对主库备份

mkdir -p /backup
chown postgres:postgres /backup

su - postgres
pg_basebackup -h 192.168.6.20 -p 5432 -U repladm -l bk20240411 -F p -P -R -D /backup

执行完成后,从库会产生文件standby.signal,如下:

Image

6.还原从库

关闭从库,删除从库的数据文件,并且将备份文件覆盖从库的数据文件

[postgres@standby01 ~]$echo $PGDATA
/pgccc/pgdata
[postgres@standby01 ~]$ rm -rf /pgccc/pgdata/*
[postgres@standby01 ~]$ cp -r /backup/* /pgccc/pgdata/*


修改从库primary_conninfo参数
cat >> $PGDATA/postgresql.conf <<"EOF"
primary_conninfo = 'host=192.168.6.20 port=5432 user=repladm password=replica'
EOF

重启备库
[postgres@standby01 ~]$ pg_ctl start

Image

7.主从状态

--主库查看wal日志发送状态
select * from pg_stat_replication;
Image
--从库查看wal日志接收状态
select * from pg_stat_wal_receiver;
Image

8.主从复制同步测试

8.1 主库插入

postgres=# create table test(id int,info text);
postgres=# insert into test select n,'test' 
from generate_series(1,2000) as n;
Image

8.2 从库验证

Image

9.总结

❝

本文详细介绍了物理复制(流复制)的搭建,可以从实例级复制出一个与主库一模一样的实例级的从库