1.3.3 PGSQL复制与高可用

PGSQL具备多种复制能力,其中包括从PostgreSQL 9系列开始实现的物理流复制和逻辑复制。同时,PGSQL也具备多主复制能力,但多主复制还需要进行较多的可靠性探索,目前大规模应用不多。

流复制是目前PGSQL主力的物理复制方式,它通过传递日志内容来实现标准主备结构。值得注意的是,从PostgreSQL 13开始,在pg_stat_wal_receiver视图中,把原来的received_lsn替换成了written_lsn和flushed_lsn,这样也就拆分成两个动作行为,即写入日志缓存和刷脏到磁盘。

因为PGSQL默认没有降级的设置,如果配置的是sync(同步)模式,则一定要注意Slave节点因为hang住导致的Master节点持续等待,会造成Master节点假死。物理复制的好处非常明显,和所有物理复制一样,较小的物理日志,复制的时效性和可靠性都很好。但物理复制因为PGSQL的MVCC特点,可能会遇到阻塞,要合理配置好hot_standby等参数,这是PGSQL和其他数据库物理复制不一样的地方。

逻辑复制和SQL Server的Replication(复制)很相似,物理复制是整实例级别的复制,而逻辑复制相对比较灵活,允许按库表级别进行复制,比如库表的映射、库表的汇聚、跨版本的库表同步。因此,逻辑复制一般在迁移和升级的场景中用得比较多,而物理复制在高可用场景中用得比较多。

综上所述,本章通过例子,主要从两个角度介绍了关系型数据库引擎的特点,即:

如何有效访问资源(如CPU、Memory等)。

如何有效访问数据结构(如优化器、事务设计等)。

同时简单介绍了各引擎高可用的设计和其他特点,希望读者能体会到各个数据库之间的微妙联系。如表1-4所示为主流关系型数据库的概念对比。

表1-4 主流关系型数据库的概念对比

续表