PostgreSQL数据库主备切换(switchover和failover)

一.Switchover

对于Oracle来说,切换主备的过程叫switchover,命令比较复杂,PostgreSQL数据库切换的操作比较简单
• 先停主库,再停备库
• 在原主库的数据目录中见文件 “standby.signal”(如果是PostgreSQL12之前的版本是recover.conf),并配置连接新主库的流复制参数。
• 把源备库数据目录下的文件“standby.signal”重命名或者删除
• 启动原备库,这时变成了新主库
• 启动原主库,这时变成了新备库

演示切换过程
主库停库

pg_ctl stop

备库停库

pg_ctl stop

主库上建文件standby.signal

touch $PGDATA/standby.signal

主库在 postgresql.conf中添加如下内容 这里ip写新主库的ip

primary_conninfo = 'user=postgres password=postgres host=192.168.1.218 port=5432 sslmode=prefer sslcompression=0'

如果是PostgreSQL12之前的版本,需要创建 recovery.conf 文件,内容如下

standby_mode = 'on'
primary_conninfo = 'user=postgres password=postgres host=192.168.1.218 port=5432 sslmode=disable sslcompression=1'

把备库的 standby.signal 重命名或删除(这里进行了重命名,方面后续切换回去)

mv standby.signal bak.standby.signal

新主库启动数据库

pg_ctl start

查看该数据库是否是主库 f是主库 t是备库

select pg_is_in_recovery();

在这里插入图片描述

重新查看视图,查看新备库过来的连接

select client_addr,state,sync_state from pg_stat_replication;

在这里插入图片描述

二.Failover

通常故障切换成为 Failover。异步复制时,如果主库出现了问题,可以激活备库作为主库提供服务。在9.1版本之前是在 recovery.conf 中配置一个trigger文件,当备库检测到该文件时,就自动把自己激活成主库,9.1版本之后提供了命令 pg_ctl promote来激活备库,所以现在很少有人配置trigger文件的方式激活备库了

原主库出现问题后,通常这些故障并没有导致数据丢失,如宕机、机器重启的故障。当故障解决之后,通常我们会把原主库转换成新主库的Standby备库,该转换一般来说需要重新搭建备库。这是因为原主库的一些数据没有同步过去就把备库激活了,备库相当于丢失了一些数据。而重新搭建备库的话,如果数据库很大,基础备份会执行很长时间,为了解决这个问题,从PostgreSQL9.5版本开始提供pg_rewind命令,不需要复制太多的数据就可以把原主库转换成新主库的备库。该命令相当于把原主库的数据“回滚”到新主库激活时的状态,当然这里所说的“回滚”不是真的“回滚”,只是为了让我们更好地理解pg_rewind的作用。
使用pgrewind命令要求主库必须把参数“wal_log_hints”设置成“on”或主库在建数据库实例时打开了checksum,这样配置的主库在出现故障时才能使用pg_rewind命令。当然这样做之后,数据库会产生更多的WAL日志,所以数据库默认是没有打开checksum参数的,数据库实例打开checksum参数的方法是,在用initdb命令初始化数据库实例时使用“k”“–data-checksums”参数。
如果我们没有把参数“wal log hints”或“checksum”打开,运行pg rewind时会报错

接下来演示pg_rewind的使用方法。
现在是主库是 192.168.1.218 备库是192.168.1.217
模拟主库宕机,直接关机。现在激活备库 在217上面执行命令

pg_ctl promote

在这里插入图片描述

现在217已经变成了主库,然后把原主库开机,在218上面执行pg_rewind命令

pg_rewind -D $PGDATA --source-server='host=192.168.1.217 user=postgres password=postgres'

在这里插入图片描述

pg_rewind执行完成后,手动建文件 standby.signal

touch $PGDATA/standby.signal

在 postgresql.conf中添加以下内容

primary_conninfo = 'user=postgres password=postgres host=192.168.1.217 port=5432 sslmode=prefer sslcompression=0'

启动数据库

pg_ctl start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值