PostgreSQL 13 同步流复制+failover(#2.6)-202104

本文档详细介绍了在RedHat8.3环境下,使用PostgreSQL13进行同步流复制和故障切换(failover)的步骤。首先配置了流复制,然后模拟主库关闭,通过pg_promote()函数激活备库完成故障切换,期间观察了数据库状态和进程变化。
摘要由CSDN通过智能技术生成

PostgreSQL 13 同步流复制+failover(#2.6)-202104

导语:PostgreSQL 同步流复制+failover场景可以对应Oracle Active DataGuard(物理)+failover场景去理解。

Postgresql 流复制:流复制协议,且锁会被复制并应用。所以主库产生大量锁的同时,要考虑备库的状况。

Oracle DataGuard:block to block 且锁不会被复制

 

 

PostgreSQL 13 同步流复制+failover(#2.6)配置

环境:

OS:RedHat 8.3

DB:PostgreSQL 13.1

Master:192.168.108.129

Replica:192.168.108.128

 

1.同步流复制

# 参考:PostgreSQL 13 同步流复制(#2.4)-202104

 

2.模拟failover切换

2.1 主库(192.168.108.129)关闭或是已经关闭【确保checkpoint】

pg_ctl -D $PGDATA status

pg_ctl -D $PGDATA stop -m fast

# 主库模拟关闭cluster databases

pg13@pgdb02-> pg_ctl -D $PGDATA status

pg_ctl: no server running

 

2.2 激活备库(192.168.108.128)进行failover切换

2.2.1 激活failover前,观察备库(192.168.108.128)standby.signal 文件

pg13@pgdb01-> cat standby.signal

2.2.2 激活failover前,查看备库(192.168.108.128)database cluster和postgres进程状态

pg13@pgdb01-> pg_controldata | grep cluster

Database cluster state:               in archive recovery

pg13@pgdb01-> ps -ef | grep postgres

pg13       25711   25245  0 19:06 pts/1    00:00:00 psql -d postgres -p 5432

pg13       26530       1  0 20:02 ?        00:00:00 /db/pg13/soft/bin/postgres -D /db/pg13/data

pg13       26531   26530  0 20:02 ?        00:00:00 postgres: startup recovering 000000020000000000000008

pg13       26532   26530  0 20:02 ?        00:00:00 postgres: checkpointer 

pg13       26533   26530  0 20:02 ?        00:00:00 postgres: background writer 

pg13       26534   26530  0 20:02 ?        00:00:00 postgres: stats collector 

pg13       26661   26297  0 20:08 pts/2    00:00:00 grep --color=auto postgres

 

2.2.3 激活failover

# pg12开始新增了一个pg_promote()函数,让我们可以通过SQL命令激活备库

postgres=# select pg_promote(true,60);

-[ RECORD 1 ]-

pg_promote | t

# 两个参数:

# wait: 表示是否等待备库的 promotion 完成或者 wait_seconds 秒之后返回成功,默认值为 true

# wait_seconds: 等待时间,单位秒,默认 60

 

2.2.4 激活failover后,观察新主库(192.168.108.128)standby.signal文件

# 旧备库激活成主库后,standby.signal文件被自动删除。本身该文件就是标注集群中备库的激活文件,现备库已成主库,自然这个standby.signal文件就会删除

pg13@pgdb01-> ls -l standby.signal

ls: cannot access 'standby.signal': No such file or directory

 

2.2.5 激活failover后,新主库(192.168.108.128)database cluster和postgres进程状态

# 由旧备库in archive recovery状态变为新主库的in production状态

pg13@pgdb01-> pg_controldata | grep cluster

Database cluster state:               in production

# 旧备库的 startup recovering进程消失,因不需要恢复wal日志流,所以startup recovering进程消失。

pg13@pgdb01-> ps -ef | grep postgres

pg13       25711   25245  0 19:06 pts/1    00:00:00 psql -d postgres -p 5432

pg13       26530       1  0 20:02 ?        00:00:00 /db/pg13/soft/bin/postgres -D /db/pg13/data

pg13       26532   26530  0 20:02 ?        00:00:00 postgres: checkpointer 

pg13       26533   26530  0 20:02 ?        00:00:00 postgres: background writer 

pg13       26534   26530  0 20:02 ?        00:00:00 postgres: stats collector 

pg13       26694   26530  0 20:10 ?        00:00:00 postgres: walwriter 

pg13       26695   26530  0 20:10 ?        00:00:00 postgres: autovacuum launcher 

pg13       26696   26530  0 20:10 ?        00:00:00 postgres: logical replication launcher 

pg13       26714   26297  0 20:11 pts/2    00:00:00 grep --color=auto postgres

 

# 至此已完成PostgreSQL 13 同步流复制+failover切换

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值