公司一套 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 文件来区分的,简单的说
-
当备库准备激活成主库时: $PGDATA 目录下应该有 recovery.conf 文件,当备库成功激活时,recovery.conf 文件应该变成 recovery.done。
-
当备库激活后,需要将原主库变更成备库角色,此时目录 $PGDATA 下文件应该为 recovery.conf ,否则启动原来主库时,会产生冲突,即报以下ERROR,今天就是因为这么操作没有做,结果原主库不能 switch role 到备库,之后就是重做备库,COPY 200 多G 的数据库啊。。。。花了两小时重做 standby。
error
1 |
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",,,,,,,,,"" |
激活原来的主库,让其转变成从库 (在原来的主库上执行)
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 的主备切换
原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/tech/database/237830.html