流复制浅析 —— 主备切换

作者:瀚高PG实验室(Highgo PG Lab)-天蝎座


流复制切换方式两种:

通过创建触发文件方式触发主备切换

通过pg_ctl promot命令手动触发主备切换


判断主备角色的五种方法:

  1. 查看操作系统WAL进程                  ps -ef |grep wal |grep -v grep      

    wal sender process      表示该库为主库。wal receiver process   表示该库为备库。
  2. 查看数据库WAL进程                     select pid,usename,application_name,client_addr,state,sync_state from pg_stat_replication;

  3. 通过系统函数查看                          select pg_is_in_recovery();

     f表示主库,t表示备库。
  4. 查看数据库控制信息                       pg_controldata  |grep "Database cluster state"    

    in production   表示主库。   in archive recovery  表示备库。
  5. 通过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


上一篇:jquery获取点击标签内的子标签内容和值实例


下一篇:Microsoft Visual Studio 2013 Update 5 direct download link for full ISO