002.高可用解决方案

双机热备 HA

![[HA.excalidraw|300]]

主从复制

![[keepalived.excalidraw|500]]

![[repmgr.excalidraw|800]]

![[pool.excalidraw|600]]

读写分离

![[pgpool读写分离.excalidraw|500]]
![[mycat.excalidraw|500]]

分布式集群 1

![[Mycat(分表分库).excalidraw|600]]

分布式集群

PostgreSQL +Citus

Citus 以插件的方式扩展到 postgresql 中,独立于 postgresql 内核,所以能很快的跟上 pg 主版本的更新,部署也比较简单,是现在非常流行的分布式方案。Citus 在苏宁有大规模应用,在 2019 年微软官宣收购 PostgreSQL 初创公司 Citus Data,也就是说微软也提供 citus 的商业支持。

Citus 节点主要分为协调节点和工作节点;协调节点(CN)不存储真实数据,只存储数据分布的元信息;实际的数据被分成若干分片,打散到不同 worker 节点中,应用连接协调节点,协调节点进行 sql 解析,生成分布式执行计划,下发到 worker 节点执行,cn 将结果汇总返回客户端。

缺点:因为没有全局事务管理,故不能保证数据的实时读一致性,但是性能上相比要好。数据写一致性使用 2 pc 来保证。

![[citus.excalidraw]]

PostgreSQL+Postgres-XL 分布式集群

Pgxc 是经典的分布式数据库架构,是真正的企业级 HTAP,我们看到市面上很多分布式数据库产品都是基于 pgxc 架构扩展而来。pgxc 是和 pg 内核紧耦合的,是嵌入到 pg 内核中,最初 pgxc 的核心开发者将 pgxc 商业化,创建了 stormdb,进行了一些并行算子优化,后来 stormdb 又被其它公司收购,然后将项目开源。

Postgres-XL 是一个可横向扩展的开源数据库集群,基于 Postgres-XC 开发,大部分代码是直接移植过来的,所以 pgxc 和 pgxl 是一脉相承的。

其实这个架构和 citus 类似,也是分为协调节点和数据节点数据也是通过 hash 分布到不同数据节点上,只是在集群中增添了全局事务管理组件,保证全局事务的一致性。

![[Postgre-XL.excalidraw|500]]

缺点:gtm 保证全局读一致性,两阶段提交保证全局写一致性,gtm 是整个系统的瓶颈点,并发一大就出问题。
多协调节点间需同步元数据信息,如协调节点失败,会造成 DDLhang 和事务阻塞。

Postgres-X2 是未来技术发展的方向:分布式集群化处理、保障数据强一致性、可横向扩展、高可用无单点故障,该项目的目标是整合 Postgres-XC 和 Postgres-XL,目前还未完全成熟。

PostgreSQL+Greenplum 分布式集群

Greenplum 是全球首个基于开源的全功能、多云、大规模并行处理(MPP)数据平台,兼具高级分析功能与传统 BI,能对 PB 级数据进行快速高效的查询、分析。greenplum 的用户在某种程度上甚至超越了 postgresql,很多人可能是通过 greenplum 才知道的 postgresql.

Master 节点存储全局系统元数据信息,不存储真实数据。
数据通过 hash 分布到不同的 segment 中,master 作为 sql 的全局入口,负责在 segment 中分配工作负载,整合处理结果,返回客户端。

![[Greenplum.excalidraw|600]]

优点:Greenplum 被广泛应用于金融、保险、证券、通信、航空、物流、零售、媒体、政府医疗、制造、能源等行业的多达实际生产环境中,为全球 2000 强企业的生产系统提供服务。

缺点:

  1. 在使用 join 时涉及到数据跨节点重分布的问题。
  2. Master 主控节点性能瓶颈,并发性能低,实际应用中并发小。