一文读懂流复制(postgresql流复制详解)


一文读懂流复制(postgresql流复制详解)

  • 流复制是postgresql的一种数据复制方式,用于两个postgresql数据库节点之间的数据备份或者数据同步。

  • postgresql使用wal日志保存数据操作记录,再通过操作wal日志对数据操作后将数据写入磁盘。

  • postgresql采用tcp协议来传输wal日志,对wal日志的传输控制及确认采用自定义协议。

  • 流复制从流程上来讲,是一个postgresql数据库节点将本地wal日志数据通过网络发送到另外一个数据库节点的过程。

  • postgresql采用多进程模式设计,每个功能都通过创建一个进程来实现。在流复制中,对于发送端来说是walsender进程,对于接收端来说是walreceiver进程。

要理解流复制,需要弄清楚如下几个概念:

  • wal日志
  • 数据发送机制(walsender)
  • 数据接收机制(walreceiver)
  • 数据确认机制(自定义协议)
  • tcp配置参数(心跳等)
  • 数据恢复机制(如何将wal日志变成数据)
  • 进度跟踪机制(状态、进度等)

wal日志

PostgreSQL在执行数据修改操作时,修改的数据在写入磁盘之前首先要将修改的内容写入wal日志文件,这样就不必时时的将共享缓存中的数据文件刷新到磁盘中,当数据库发生崩溃我们可以从wal日志获取共享缓存中未写入到磁盘的数据。这样做的目的是以顺序写入的wal代替随机的数据写入,以获取更高的执行效率。

目前的高性能磁盘,顺序写速度可以达到600MB/s, 超过了一般网卡的传输速度。但是磁盘随机写的速度只有大概100KB/s,和顺序写的性能相差6000倍。

数据发送机制(walsender)

数据接收机制(walreceiver)

数据确认机制(自定义协议)

tcp配置参数(心跳)

数据恢复机制

进度跟踪机制

reference

  1. https://zhuanlan.zhihu.com/p/163245243
  2. https://blog.51cto.com/u_15076236/4148373

文章作者: growdu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 growdu !
评论
  目录