Skip to content

Latest commit

 

History

History
102 lines (60 loc) · 5.27 KB

20210712_01.md

File metadata and controls

102 lines (60 loc) · 5.27 KB

重新发现PostgreSQL之美 - 43 快速破镜重圆

作者

digoal

日期

2021-07-12

标签

PostgreSQL , 脑裂 , 时间线修复


背景

视频回放: https://www.bilibili.com/video/BV1zL411H7Z9/

场景:

  • standby 临时开启读写后继续成为standby.
  • standby 激活时老主库没有完全同步, 希望老的primary可以变成新主库的standby.

挑战:

  • 传统方式, 需要重新拷贝整个数据库, 重建standby. 速度慢, 对当前主库的IO、网络冲击很大.
  • 采用rsync的方式, 需要比对所有的数据文件, 找到变化的文件, 即使只是少量的字节变化也需要同步整个文件. 速度慢, 对当前主库的IO冲击很大.

PG解决方案:

  • pg_rewind, 支持在线修复分裂, 只需解析并同步自分裂点以来老库的变化blocks. 速度快、对当前主库的IO、网络影响小.

例子

1、source, 配置checksum or wal_log_hints, 开启fpw
2、source, checkpoint
3、source, 创建user, 赋予权限,例子

CREATE USER rewind_user LOGIN;
GRANT EXECUTE ON function pg_catalog.pg_ls_dir(text, boolean, boolean) TO rewind_user;
GRANT EXECUTE ON function pg_catalog.pg_stat_file(text, boolean) TO rewind_user;
GRANT EXECUTE ON function pg_catalog.pg_read_binary_file(text) TO rewind_user;
GRANT EXECUTE ON function pg_catalog.pg_read_binary_file(text, bigint, bigint, boolean) TO rewind_user;

4、target, 准备好从时间线分裂点之前最后一次完整的checkpoint开始, target产生的所有wal, 让restore_command可以拷贝
5、target, 执行pg_rewind, 原理如下:

  • 解析自分裂点之前最后一次完整的checkpoint开始, target的wal涉及到的所有data block id
  • 从source拉取对应的data block
  • 从source拉取自分裂点之前最后一次完整的checkpoint开始, source 新增的数据文件, WAL segments, pg_xact, and configuration files
  • 在target创建backup_label, 配置pg_control给定恢复位点LSN

6、target, 修改配置文件(recovery.conf, postgresql.conf, recovery.signal)
7、target, 启动, 开始进入recovery.

相关文档

https://www.postgresql.org/docs/14/app-pgrewind.html

《PostgreSQL 14 preview - 允许hot standby 作为pg_rewind的源库》

《PostgreSQL pg_rewind,时间线修复,脑裂修复,flashback - 从库开启读写后,回退为只读从库。异步主从发生角色切换后,主库rewind为新主库的从库》

《PostgreSQL primary-standby failback tools : pg_rewind》

《PostgreSQL 9.5 new feature - pg_rewind fast sync Split Brain Primary & Standby》

《PostgreSQL 9.5 add pg_rewind for Fast align for PostgreSQL unaligned primary & standby》

其他

《如何创建RDS PG 的秒级 flashback闪回实例, 实时容灾实例 - zfs - snapshot - clone - standby - compress》

《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)验证 - recovery test script for zfs snapshot clone + postgresql stream replication + archive》

《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)双机HA与块级备份部署》

《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)单个数据库采用多个zfs卷(如表空间)时如何一致性备份》

《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)备份集有效性自动校验》

《PostgreSQL 最佳实践 - 块级增量备份(ZFS篇)方案与实战》

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

digoal's wechat