PG学习笔记(1)—— 主从复制:流复制

本文详细介绍了PostgreSQL的主从复制——流复制,包括其背景、架构、启动过程、同步策略以及从库故障检测。流复制通过walsender、walreceiver和startup进程实现,能实时同步主库数据,确保高可用性。
摘要由CSDN通过智能技术生成

PG学习笔记(1)—— 主从复制:流复制

闲云野鹤,乡夫俗子,不过一隅静土。

背景

PostgreSQL 9.1之前,主从复制传输以WAL日志文件为单位,主库写完WAL日志后再传输给从库,导致主从延迟较大。基于这种情况,PostgreSQL 9.1引入主从流复制,以WAL日志的record为传输单位,从库及时同步主库数据,并且应用每个WAL record,因此能做到同步复制。另外实现了Hot Standby,从库在应用WAL record的同事能够提供制度服务。

架构

PG主从流复制的核心有三个进程构成:

  • walsender:用于主库发送WAL日志记录到从库;
  • walreceiver:用于从库接收主库的WAL日志记录;
  • startup:用于从库apply日志。

流复制的启动

1.启动过程

  1. 启动主从服务器;
  2. 从库节点启动startup进程;
  3. 从库节点启动walreceiver进程;
  4. walreceiver进程向主库节点发送连接请求,如果主库尚未启动,walreceiver会定期重发该请求;
  5. 当主节点收到连接请求时,将启动walsender进程,并建立walsender和walreceiver之间的TCP连接;
  6. walreceiver发送从库节点最新的LSN;
  7. 如果从库最新的LSN小于主库最新LSN,即落后。walsender会将前一个LSN到后一个LSN之间的wal数据发送到walreceiver;
  8. 流复制开始工作。

2.walsender状态

通过pg_stat_replication试图可以查看所有运行的walsender状态

walsender进程可能的状态如下

  • start-up
  • catch-up
  • streaming
  • backup

3。从库节点长期停机启动

  • PostgreSQL 9.4之前,如果从库节点请求的WAL段在主库节点已经被覆盖,那么备份节点将无法追上主节点。暂时没有解决方案,需要把wal_keep_segments参数调大;
  • PostgreSQL 9.4之后,使用复制槽(replication)来预防——通过暂停walreceiver进程,将含有未发送wal段的pg_xlog保存在复制槽中。复制槽可以提供wal数据发送的灵活性,主要用于逻辑复制。

流复制过程

流复制包括两个方面:日志传输和数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值