作者:瀚高PG实验室(Highgo PG Lab)-天蝎座
流复制切换方式两种:
通过创建触发文件方式触发主备切换
通过pg_ctl promot命令手动触发主备切换
判断主备角色的五种方法:
-
查看操作系统WAL进程 ps -ef |grep wal |grep -v grep
wal sender process 表示该库为主库。wal receiver process 表示该库为备库。 查看数据库WAL进程 select pid,usename,application_name,client_addr,state,sync_state from pg_stat_replication;
-
通过系统函数查看 select pg_is_in_recovery();
f表示主库,t表示备库。 -
查看数据库控制信息 pg_controldata |grep "Database cluster state"
in production 表示主库。 in archive recovery 表示备库。 -
通过recovery.conf配置文件查看 检查$PGDATA目录下是否存在recovery.conf
存在recovery.conf文件为备库。
触发器文件主备切换步骤:
配置备库revocery.conf文件 trigger_file参数,设置激活备库的触发文件路径和名称
关闭主库,建议使用-m fast模式关闭
在备库上创建触发文件激活备库,如果recovery.conf变成recovery.done表示备库已经切换成主库
将原主库切换为备库,启动数据库,检查进程
备库recovery.conf
recovery_target_timeline='latest' standby_mode=on primary_conninfo='host=192.168.80.126 port=5432 user=postgres' trigger_file='/data/pg10/.postgres.trigger.5432'
pg_ctl promot主备切换步骤:
pg_ctl promot -D datadir
pg_rewind是流复制维护时一个非常好的数据同步工具,用于在未关闭原主库便将备库提升为主库的情况下,将原主库恢复为备库。
pg_rewind并非全量从主库同步数据,只是复制变化的数据。
使用pg_rewind的前提条件为以下之一:
wal_log_hints参数设置为on
数据库initdb时使用了 --data-checksums选项,打开这个选项开启后会在数据块上进行检测以发现I/O错误,开启后性能有损失。
具体步骤:
激活备库: pg_ctl promote
将主库关闭,使用pg_rewind工具增量同步原备库上的数据到原主库:
pg_rewind --target-pgdata $PGDATA --source-server='host=102.168.80.127 port=5432 user=postgres dbname=postgres' -P
将recovery.done重命名为recovery.conf
启动数据库pg_ctl start