开发者社区 > 数据库 > 关系型数据库 > 正文

这个pg_rewind过程是polardb直接把主库的wal日志传到备库然后进行一个物理备份还原吗?

这个pg_rewind算是啥过程啊,是polardb直接把主库的wal日志传到备库然后进行一个物理备份还原吗?

展开
收起
三分钟热度的鱼 2024-02-01 16:15:51 27 0
3 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    pg_rewind是一个用于同步PostgreSQL数据库集群的工具,它主要用于在主备库之间的时间线出现分叉时进行数据同步

    详细来说,pg_rewind的工作流程如下:

    1. 数据同步:pg_rewind会将主库的数据目录同步到备库的数据目录。它会复制主库中更改的数据块,而其他未更改的文件则会完整复制,包括配置文件等。
    2. 性能优势:相比使用pg_basebackup或rsync这类工具,pg_rewind的一个主要优势在于它不需要读取数据库中未更改的数据块。这意味着在大型数据库中,当只有小部分数据块发生变化时,pg_rewind能够提供更快的同步速度。
    3. 使用条件:要使用pg_rewind,目标服务器需要在postgresql.conf中启用wal_log_hints设置,或者在初始化集群时启用checksums和full_page_writes设置。
    4. 场景应用:一个典型的应用场景是在故障转移后,旧的主服务器需要重新上线,同时有一个备机已经跟随新的主服务器运行了一段时间。在这种情况下,pg_rewind可以用来同步这两个实例,使得旧的主服务器的数据目录与新的主服务器保持一致。
    5. 时间线分叉:当两个PostgreSQL实例的时间线出现分叉时,例如主库在运行过程中备库进行了failover并运行了一段时间,这时主备之间的时间线就会产生分叉。pg_rewind可以处理这种情况,确保两个实例之间的数据保持一致。

    综上所述,pg_rewind是一个高效的数据库同步工具,它通过复制主库中已更改的数据块来同步数据,而不是简单地复制整个数据库,这样不仅可以提高同步效率,还能确保数据的一致性。在使用pg_rewind之前,需要确保满足其使用条件,以便能够顺利地进行数据同步。

    2024-02-01 17:01:27
    赞同 展开评论 打赏
  • 参考https://github.com/digoal/blog/blob/master/201503/20150325_02.md 此回答整理自钉群“PG|POLARDB技术进阶”

    2024-02-01 16:40:50
    赞同 展开评论 打赏
  • 不是的,pg_rewind 并不是一个简单的 WAL 日志传输和物理备份还原过程。pg_rewind 是 PostgreSQL 及其衍生数据库系统(如阿里云 PolarDB)中用于在主从集群之间进行特殊场景下的同步工具。

    当一个旧的主库在发生故障转移后重新联机,并且希望它成为新主库的从库时,通常由于时间线的分歧,直接应用新的 WAL 日志是不行的,因为这样会导致数据不一致。pg_rewind 的作用是在这种情况下,通过分析主库和备库的 WAL 日志及检查点信息来找到它们分叉的时间点,然后在备库上执行逆向操作以达到与主库相同的状态,但不会丢弃分叉之后备库上的任何事务。

    具体来说,pg_rewind 不是简单地将主库的 WAL 应用到备库,而是通过回滚备库上独有的事务并重放主库分叉后的 WAL 来快速恢复备库的数据一致性,使其能够安全地追加后续的 WAL 记录并继续作为从库服务。

    PolarDB 作为基于 PostgreSQL 构建的关系型数据库,在保持兼容的同时可能对 pg_rewind 进行了优化或调整以适应分布式架构的需求,但基本原理类似。

    2024-02-01 16:31:51
    赞同 展开评论 打赏

相关产品

  • 云原生数据库 PolarDB
  • 相关电子书

    更多
    PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
    Kubernetes下日志实时采集、存储与计算实践 立即下载
    日志数据采集与分析对接 立即下载