pg_auto_failover异步复制

pg_auto_failover异步复制

异步复制的内容文档描述的不清晰,很多内容需要通过查看代码才能确定,便书写出来供大家参考。

同步复制 VS 异步复制

pg_auto_over默认采用同步模式,准确来讲是半同步模式,以达到数据安全和业务的连续性的综合需求,但是降低了数据库数据处理的性能。

异步复制通过降低数据的安全性来提高数据处理的性能,当主节点发生异常时可能会丢失最近的部分数据,在某些对数据一致性要求不高但对性能要求较高的场景中会应用到。

配置异步模式

pg_auto_failover的异步模式配置,仅需配置synchronous_commit = ‘local’到postgresql.conf中即可以。执行pg_ctl relaod $PGDATA使其生效

异步模式切换规则

默认情况

当备节点的数据落后主节点小于1个wal日志(默认16MB),主节点发送故障时,会进行自动切换。
当备节点的数据落后主节点大于1个wal日志(默认16MB),主节点发送故障时,不会进行自动故障切换,需要进行手工切换

切换规则配置

pgautofailover.promote_wal_log_threshold参数是控制是数据差异切换规则的。需在monitor节点进行设置。
将该参数设置到postgresql.conf中。执行pg_ctl reload $PGDATA 使其生效。
参数单位:字节
最大值:INT_MAX(2GB-1字节量数据)

数据延迟计算方法

  • 广义的理解
    延迟 = 主节点的lsn(pg_current_wal_lsn) – 备节点的lsn(pg_last_wal_receive_lsn)
    此种方法不是太精准

  • 主节点计算

select sync_state,pg_current_wal_lsn() - flush_lsn as wal_lag from pg_replication_slots slot join pg_stat_replication rep on rep.pid = slot.active_pid where slot_name = 'pgautofailover_standby';

主节点采用pg_current_wal_lsn – flush_lsn(已经发送至备的lsn)进行延迟的计算

  • 备节点计算
SELECT latest_end_lsn - received_lsn FROM pg_stat_wal_receiver;

备节点采用latest_end_lsn(主节点每次发送wal日志的时候,主节点当前的pg_current_wal_lsn) – received_lsn(已经接收到的lsn)

延迟基准

通过上一章节,我们看到了两种计算方法。这两个数据通常会是不同的,那以哪个为准?

pg_auto_failover的node节点会定期像monitor报告wal日志的状态,monitor会以最近最近时间报告节点的延迟数据为准,来决定是否进行状态调整。

文章浏览总量 660 次

要发表评论,您必须先登录