主备切换异常一例 "Contrecord is requested by 10E/92000020"

公司一套 Hot-Standby 环境主库需要内存扩容,为了尽可能减少停业务时间,常规的操作是做下 switch role ,即主备切换,将业务切换到备库,那么主库就有宽松的停机时间进行内存扩容,但今天有步操作不对,导致出现上面错误, 首先看下正确的步骤参考如下:

环境信息

PostgreSQL: 9.1.1
系统: Red Hat Enterprise Linux Server release 5.6

主备切换

停主库VIP

1
/sbin/ifdown eth0:1

备注:主库上开了 eth0:1 这个IP权且称为 VIP,加入这个IP的目的是主备切换后不需要更改应用IP。

关闭主库 ( On Primary )

1
pg_ctl stop -m fast -D $PGDATA

备注:关闭主库,这步操作重要,为接下来激活备库做准备。

激活备库到主库状态 ( on slave )

1
touch $PGDATA/postgresql.trigger.1921

备注:激活备库很简单,只需要创建一个文件即可,执行上述操作后,recovery.conf 文件应该变成 recovery.done ,说明备库已经激活,接下来准备更改原主库角色。

修改原主库文件名 ( 重要 )

1
recovery.done --> recovery.conf

备注: 这步很重要,在做主备切换时,PG 是根据 recovery 文件来区分的,简单的说

  1. 当备库准备激活成主库时: $PGDATA 目录下应该有 recovery.conf 文件,当备库成功激活时,recovery.conf 文件应该变成 recovery.done。

  2. 当备库激活后,需要将原主库变更成备库角色,此时目录 $PGDATA 下文件应该为 recovery.conf ,否则启动原来主库时,会产生冲突,即报以下ERROR,今天就是因为这么操作没有做,结果原主库不能 switch role 到备库,之后就是重做备库,COPY 200 多G 的数据库啊。。。。花了两小时重做 standby。

error

1
2
2012-02-29 09:24:13.878 CST,,,4714,,4f4d7c99.126a,88,,2012-02-29 09:17:13 CST,,0,LOG,00000,"contrecord is requested by 10E/92000020",,,,,,,,,""  
2012-02-29 09:24:18.878 CST,,,4714,,4f4d7c99.126a,89,,2012-02-29 09:17:13 CST,,0,LOG,00000,"contrecord is requested by 10E/92000020",,,,,,,,,""

激活原来的主库,让其转变成从库 (在原来的主库上执行)

1
nohup $PGHOME/bin/postgres -D $PGDATA -p $PGPORT 2>/var/applog/pg_log/start_err_1921.log 2>&1 &

启动备库 VIP

1
/sbin/ifup eth0:1

修改主库和备库 /etc/rc.d/rc.local 启动文件

通知业务检查应用是否正常。

备注:主备切换总共步骤就这些,上面步骤仅供参考。

异常检查

在主备切换时如遇通信问题,可检查主库备库文件 ~/.pgpass, pg_hba.conf 文件 。

参考

关于主备切换更详细的信息可参考以前写的 BLOG: PostgreSQL HOT-Standby 的主备切换

最后推荐和张文升共同编写的《PostgreSQL实战》,本书基于PostgreSQL 10 编写,共18章,重点介绍SQL高级特性、并行查询、分区表、物理复制、逻辑复制、备份恢复、高可用、性能优化、PostGIS等,涵盖大量实战用例!

购买链接:https://item.jd.com/12405774.html

PostgreSQL实战
感谢支持!
0%