postgresql灾备切换

演示pg_rewind的使用方法。
主库在10.0.3.101上,备库在10.0.3.102上。
这时主库出问题了,如机器宕机了(我们用强制关机来模拟),我
们现在激活备库,即在10.0.3.102上执行如下命令:
[postgres@pg02 ~]$ pg_ctl promote
server promoting
现在10.0.3.102库变成了主库。
然后把原主库开机,即在10.0.3.101上执行pg_rewind命令:
[postgres@pg01 ~]$ pg_rewind -D $PGDATA --source-server='host=10.0.3.102 user=postgres password=postgres'
pg_rewind: fatal: target server must be shut down cleanly
我们发现pg_rewind报错,这时就需要把这个库启动一下,然后再
正常关闭。
[postgres@pg01 ~]$ pg_ctl start
pg_ctl: another server might be running; trying to start server anyway
waiting for server to start....
done
server started
[postgres@pg01 ~]$ pg_ctl stop
waiting for server to shut down.... done
server stopped
然后再执行pg_rewind:
[postgres@pg01 ~]$ pg_rewind -D $PGDATA --source-server='host=10.0.3.102 user=postgres password=postgres'
pg_rewind: servers diverged at WAL location 0/18DCD08 on timeline 1
pg_rewind: rewinding from last common checkpoint at 0/18C1DE0 on timeline 1
pg_rewind: Done!
注意,上面的“-D”参数指向本地的目录。
pg_rewind执行完之后,需要手动建文件“standby.signal”:
touch $PGDATA/standby.signal
并在postgresql.conf中添加如下内容:
primary_conninfo = 'user=postgres password=XXXXXX host=10.0.3.102 port=5432 sslmode=prefer sslcompression=0'
这样原主库才能变成新主库的备库。
如果是PostgreSQL 12版本之前的数据库,需要手动创建
recovery.conf文件,内容如下:
standby_mode = 'on'
recovery_target_timeline = 'latest'
primary_conninfo = 'user=osdba password=XXXXXX host=10.0.3.102 port=5432 sslmode=disable sslcompression=1'
注意,上面的命令中比之前多了一
行“recovery_target_timeline='latest'”,这时因为新主库的时间线与原主库
的不一样了,加上这一行命令才能让原主库切换到新主库的时间线上。
这时再在10.0.3.101上启动数据库,原主库就变成了新主库的备
库:
[postgres@pg01 ~]$ pg_ctl start
waiting for server to start....
done
server started
注意上面的操作,一定要先建好standby.signal(或是
recovery.conf),再启动数据库,否则启动了数据库就会进入主库模
式。如果这样做了,需要把数据库停下来,重新运行pg_rewind命令。

 
技术链接
原文地址:https://www.cnblogs.com/liujiacai/p/14643544.html