流复制浅析 —— 主备切换

来源:这里教程网 时间:2026-03-14 20:16:59 作者:

作者:瀚高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

相关推荐