跳转到主要内容

这是本节的多页打印视图。 .

返回本页常规视图.

参考

架构、用例、比较等…

Pigsty (/ˈpɪɡ staɪ/) 是一个电池级、FOSS PostgreSQL 发行版 作为本地优先的 RDS 替代方案

PostgreSQL 企业版
    轻松创建自愈的高可用 PG 集群,预配置时间点恢复、ACL、CA、SSL...
基础设施即代码
    用代码声明您的整个基础设施,并从裸机操作系统设置 PG 需要的一切:LB、Nginx、NTP、DNS、本地仓库等...
令人惊叹的可观测性
    基于现代 Prometheus 和 Grafana 可观测性技术栈的无与伦比的监控最佳实践,开箱即用
扩展和分支
    <span class="text-red-800 font-bold">437</span> PGSQL 扩展电池级内置!还有分支:Babelfish、Oriole、IvorySQL、OpenHalo、PolarDB、Supabase...

Pigsty 提供了自托管企业级 PostgreSQL 服务所需的一切,即使没有专业知识也能做到。

只需将 PostgreSQL 用于 一切,并像专家一样自托管 PostgreSQL!

想要了解更多?

阅读我们深入的 什么是 Pigsty 介绍。

1 - PG 发行版

为一切使用 PostgreSQL!用 postgres 超能力构建数据基础设施

PostgreSQL 正在吞噬数据库世界, 它正在成为数据库世界的 Linux 内核。

但是发行版在哪里?


什么是发行版?

如今,人们使用 Ubuntu、Debian 和 RHEL 等操作系统发行版,而不是直接使用原始的 Linux 内核。 您需要大量组件来构建实用的操作系统,例如 systemd、cron、NTP、DNS、日志记录等,以使原始 Linux 内核可用。

Linux 内核大小为几 MB,但完整的操作系统 DVD 可以轻松占用 10+ GB,包括所有必要的部分和软件包。 这就是 PostgreSQL 发行版的全部内容——为您提供构建生产级数据库服务所需的一切。


为什么我们需要发行版?

我们有两个东西来打造强大的 PostgreSQL 发行版:扩展服务

扩展

PostgreSQL 生态系统中有 1000+ 个扩展。 但其中只有 100 个可以通过"官方" PGDG 存储库访问。

因此,我们将最受欢迎和最有用的扩展打包到预制的 RPM/DEB 包中,支持 10 个 Linux 发行版和 5 个 PG 主版本。 现在有无与伦比的 422 个扩展 开箱即用,我们将在未来继续添加更多扩展。

更重要的是,我们甚至支持 8 种 PostgreSQL 内核版本(扩展、分支、包装器等),包括:

内核 关键特性 描述
Citus 水平扩展 原生分布式 PostgreSQL
WiltonDB SQL Server 迁移 SQL Server 协议兼容性
IvorySQL Oracle 迁移 Oracle 语法和 PL/SQL 兼容
OpenHalo MySQL 迁移 MySQL 协议兼容性
FerretDB MongoDB 迁移 MongoDB 协议兼容性
OrioleDB OLTP 优化 Zheap、无膨胀、S3 存储
PolarDB PG Aurora 风格 RAC RAC、中国国产合规
Supabase 后端即服务 基于 PostgreSQL 的 BaaS,Firebase 替代品
Greenplum 分析/数据仓库 大规模并行处理数据仓库

服务

您可以像 systemctl start postgresql 这样轻松地开始使用原始 PostgreSQL 内核,但这远不是生产级服务。 这就是人们为 AWS RDS 等托管 PostgreSQL 服务支付每 vCPU·月 160 美元的主要原因。

但是,如果您可以用几个命令在自己的服务器上构建企业级 PostgreSQL 服务,而且不需要许可费用,会怎么样? Pigsty 使您能够做到这一点。它为您提供具有 PITR、监控和告警、连接池等功能的 HA PostgreSQL 集群

2 - RDS 替代

像专家一样自托管 PostgreSQL!在没有专业知识的情况下运行生产级服务

什么是 RDS?

您可以像 systemctl start postgresql 这样轻松地开始使用原始 PostgreSQL 内核,但这远不是生产级服务。 这就是人们为 AWS RDS 等托管 PostgreSQL 服务支付每 vCPU·月 160 美元的主要原因,甚至为传统的"企业"数据库服务支付更多费用。

构建和管理生产级 PostgreSQL 服务的专业知识既稀少又昂贵。

如果……

但是,如果您可以用几个命令在自己的服务器上构建企业级 PostgreSQL 服务,而且不需要许可费用,会怎么样? Pigsty 使您能够做到这一点。它为您提供具有 PITR、监控和告警、连接池等功能的 HA PostgreSQL 集群

这一切都从几个命令开始,您可以自己构建生产级 PostgreSQL 服务, 无需昂贵的许可证或专业知识。

3 - 整体架构

Pigsty 的模块化、声明式 PostgreSQL 基础设施设计

模块化架构和声明式接口!

  • Pigsty 部署通过配置清单描述,并使用 ansible playbooks 实现。
  • Pigsty 在 Linux 通用节点上工作,即裸机或虚拟机。
  • Pigsty 使用模块化设计,可以自由组合以适应不同场景。
  • 配置控制在哪里如何使用参数安装模块
  • Playbooks 将以幂等方式将节点调整到所需状态。

模块

Pigsty 使用模块化设计,有六个默认模块:PGSQLINFRANODEETCDREDISMINIO

  • PGSQL:由 Patroni、Pgbouncer、HAproxy、PgBackrest 等驱动的自主 HA Postgres 集群…
  • INFRA:本地 yum/apt 仓库、Prometheus、Grafana、Loki、AlertManager、PushGateway、Blackbox Exporter…
  • NODE:将节点调整到所需状态,名称、时区、NTP、ssh、sudo、haproxy、docker、promtail、keepalived
  • ETCD:分布式键值存储将用作高可用 Postgres 集群的 DCS。
  • REDIS:独立主副本、哨兵、集群模式的 Redis 服务器与 Redis exporter。
  • MINIO:S3 兼容的简单对象存储服务器,可用作 Postgres 的可选备份中心。

您可以以声明式方式自由组合它们。如果您想要主机监控,INFRANODE 就足够了。额外的 ETCDPGSQL 用于 HA PG 集群。在多个节点上部署它们将形成 HA 集群。您可以重用 pigsty 基础设施并开发您的模块,考虑可选的 REDISMINIO 作为示例。

pigsty-sandbox.jpg


单例元数据

Pigsty 默认将安装在单个节点(裸机/虚拟机)上。install.yml playbook 将在当前节点上安装 INFRAETCDPGSQL 和可选的 MINIO 模块,这将为您提供功能齐全的可观测性基础设施(Prometheus、Grafana、Loki、AlertManager、PushGateway、BlackboxExporter 等……)和一个开箱即用的 PostgreSQL 单例实例(名为 meta)。

此节点现在具有自监控系统、可视化工具集和具有自动配置 PITR 的 Postgres 数据库。您可以将此节点用于开发环境、测试、运行演示以及进行数据可视化和分析。或者,进一步向其添加更多节点!

pigsty-arch.jpg


监控

安装的 单例元数据 可用作管理节点监控中心,将更多节点和数据库服务器纳入其监控和控制范围。

如果您想安装 Prometheus / Grafana 可观测性堆栈,Pigsty 为您提供最佳实践!它具有适用于 节点PostgreSQL 的细粒度仪表板,无论这些节点或 PostgreSQL 服务器是否由 Pigsty 管理,您都可以通过简单的配置立即获得生产级监控和告警。

pigsty-dashboard.jpg


HA PG 集群

使用 Pigsty,您可以随心所欲地拥有自己的本地生产级 HA PostgreSQL RDS。

要创建这样的 HA PostgreSQL 集群,您所要做的就是描述它并运行 playbook:

pg-test:
  hosts:
    10.10.10.11: { pg_seq: 1, pg_role: primary }
    10.10.10.12: { pg_seq: 2, pg_role: replica }
    10.10.10.13: { pg_seq: 3, pg_role: replica }
  vars: { pg_cluster: pg-test }
$ bin/pgsql-add pg-test

这将为您提供以下集群,监控、副本、备份全部设置完成。

pigsty-ha.png

硬件故障由基于 patronietcdhaproxy 的自愈 HA 架构覆盖,在主节点故障的情况下将在 30 秒内执行自动故障转移。借助由 haproxy 支持的自愈流量控制,在切换或副本故障的情况下,客户端甚至可能根本不会注意到有故障。

软件故障、人为错误和数据中心故障由 pgbackrest 和可选的 MinIO 集群覆盖。这使您能够执行时间点恢复到任何时间(只要您的存储能够支持)


数据库即代码

Pigsty 遵循 IaC 和 GitOPS 哲学:Pigsty 部署由声明式 配置清单 描述,并通过幂等 playbooks 实现。

用户以声明式方式使用 参数 描述所需状态,playbooks 以幂等方式将目标节点调整为该状态。这就像 Kubernetes CRD 和 Operator,但适用于裸机和虚拟机。

pigsty-iac.jpg

以默认配置片段为例,它描述了一个安装了 INFRANODEETCDPGSQL 模块的节点 10.10.10.10

# infra cluster for proxy, monitor, alert, etc...
infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }

# minio cluster, s3 compatible object storage
minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }

# etcd cluster for ha postgres DCS
etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }

# postgres example cluster: pg-meta
pg-meta: { hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary }, vars: { pg_cluster: pg-meta } }

要实现它,请使用以下 playbooks:

./infra.yml -l infra    # init infra module on group 'infra'
./etcd.yml  -l etcd     # init etcd module on group 'etcd'
./minio.yml -l minio    # init minio module on group 'minio'
./pgsql.yml -l pg-meta  # init pgsql module on group 'pgsql'

执行常规管理任务将很简单。例如,如果您希望向现有的 HA PostgreSQL 集群添加新副本/数据库/用户,您只需在配置中添加一个主机并在其上运行该 playbook,例如:

pg-test:
  hosts:
    10.10.10.11: { pg_seq: 1, pg_role: primary }
    10.10.10.12: { pg_seq: 2, pg_role: replica }
    10.10.10.13: { pg_seq: 3, pg_role: replica } # <-- add new instance
  vars: { pg_cluster: pg-test }
$ bin/pgsql-add  pg-test 10.10.10.13

您甚至可以使用这种方法管理许多 PostgreSQL 实体:用户/角色、数据库、服务、HBA 规则、扩展、模式等……

查看 PGSQL 配置 了解详情。

4 - 技术对比

与市面类似产品的对比

与云厂商 RDS 对比

Pigsty 是使用 AGPLv3 开源的本地优先 RDS 替代,可以部署在您自己的物理机/虚拟机上,也可以部署在云服务器上。

因此,我们选择了全球份额第一的亚马逊云 AWS RDS for PostgreSQL,以及中国市场份额第一的阿里云 RDS for PostgreSQL 作为参照对象。

阿里云 RDS 与 AWS RDS 均为闭源云数据库服务,通过租赁模式,仅在公有云上对外提供,以下对比基于最新的 PostgreSQL 16 主干版本进行,对比截止日期为 2024 年 2 月份。


功能特性

指标 Pigsty Aliyun RDS AWS RDS
大版本支持 12 - 17 12 - 17 12 - 17
只读从库 支持任意数量只读从库 备实例不对用户开放 备实例不对用户开放
读写分离 支持端口区分读写流量 独立收费组件 独立收费组件
快慢分离 支持离线 ETL 实例 未见相关特性 未见相关特性
异地灾备 支持备份集群 支持多可用区部署 支持多可用区部署
延迟从库 支持延迟实例 未见相关特性 未见相关特性
负载均衡 HAProxy / LVS 独立收费组件 独立收费组件
连接池 Pgbouncer 独立收费组件:RDS 独立收费组件:RDS Proxy
高可用 Patroni / etcd 需高可用版提供支持 需高可用版提供支持
时间点恢复 pgBackRest / MinIO 提供备份支持 提供备份支持
指标监控 Prometheus / Exporter 免费基础版/收费进阶版 免费基础版/收费进阶版
日志采集 Loki / Promtail 基础支持 基础支持
可视化系统 Grafana / Echarts 提供基本监控 提供基本监控
告警聚合通知 AlterManager 基础支持 基础支持

重要扩展

这里列出了一些重要扩展,对比基于最新的 PostgreSQL 16 主干版本进行,截止至 2024-02-28

扩展名称 Pigsty RDS / PGDG 官方仓库 阿里云 RDS AWS RDS
加装扩展 自由加装 不允许 不允许
地理空间 PostGIS 3.5.1 PostGIS 3.3.4 / Ganos 6.1 PostGIS 3.4.1
雷达点云 PG PointCloud 1.2.5 Ganos PointCloud 6.1
向量嵌入 PGVector 0.8.1 / Svector 0.5.6 pase 0.0.1 PGVector 0.6
机器学习 PostgresML 2.10.0
时序扩展 TimescaleDB 2.20.2
水平分布式 Citus 13.1
数据分析 Hydra 1.1.1
全文检索 pg_bm25 0.5.6
图数据库 Apache AGE 1.5.0
GraphQL PG GraphQL 1.5.0
OLAP pg_analytics 0.5.6
消息队列 pgq 3.5.0
DuckDB duckdb_fdw 1.1
模糊分词 zhparser 1.1 / pg_bigm 1.2 parser 1.0 / pg_jieba pg_bigm 1.2
CDC抽取 wal2json 2.5.3 wal2json 2.5
膨胀治理 pg_repack 1.5.0 pg_repack 1.4.8 pg_repack 1.5.0

性能对比

指标 Pigsty Aliyun RDS AWS RDS
最佳性能 PGTPC on NVME SSD 评测 sysbench oltp_rw RDS PG 性能白皮书 sysbench oltp 场景 每核 QPS 4000 ~ 8000
存储规格:最高档容量 32TB / NVME SSD 32 TB / ESSD PL3 64 TB / io2 EBS Block Express
存储规格:最高档IOPS 4K随机读:最大3M,随机写 2000~350K 4K随机读:最大 1M 16K随机IOPS: 256K
存储规格:最高档延迟 4K随机读:75µs,随机写 15µs 4K随机读:200µs 500µs / 推断为16K随机IO
存储规格:最高档可靠性 UBER < 1e-18,折合18个9 MTBF: 200万小时 5DWPD,持续三年 可靠性 9个9, 合 UBER 1e-9 存储与数据可靠性 持久性:99.999%,5个9 (0.001% 年故障率) io2 说明
存储规格:最高档成本 31.5 ¥/TB·月 ( 5年质保均摊 / 3.2T / 企业级 / MLC ) 3200¥/TB·月 (原价 6400¥,包月4000¥) 3年预付整体打5折才有此价格 1900 ¥/TB·月 使用最大规格 65536GB / 256K IOPS 最大优惠

可观测性

Pigsty 提供了近 3000 类监控指标,提供了 50+ 监控面板,覆盖了数据库监控、主机监控、连接池监控、负载均衡监控等方方面面,为用户提供无与伦比的可观测性体验。

dashboard

Pigsty 提供了 638 与 PostgreSQL 有关的监控指标,而 AWS RDS 只有 99 个,阿里云 RDS 更是只有个位数指标:

此外,也有一些项目提供了监控 PostgreSQL 的能力,但都相对比较简单初级:


可维护性

指标 Pigsty Aliyun RDS AWS RDS
系统易用性 简单 简单 简单
配置管理 配置文件 / CMDB 基于 Ansible Inventory 可使用 Terraform 可使用 Terraform
变更方式 幂等剧本 基于 Ansible Playbook 控制台点击操作 控制台点击操作
参数调优 自动根据节点适配 四种预置模板 OLTP, OLAP, TINY, CRIT
Infra as Code 原生支持 可使用 Terraform 可使用 Terraform
可定制参数点 总计 280+ 个
服务与支持 提供商业订阅支持兜底 提供售后工单支持 提供售后工单支持
无互联网部署 可离线安装部署 N/A N/A
数据库迁移 提供从现有v10+ PG实例基于逻辑复制不停机迁移至Pigsty托管实例的剧本 提供上云辅助迁移 Aliyun RDS 数据同步

成本

经验上看,软硬件资源的部分 RDS 单位成本是自建的 5 ~ 15 倍,租售比通常在一个月。详情请参考 成本分析

要素 指标 Pigsty Aliyun RDS AWS RDS
成本 软件授权/服务费用 免费,硬件约 20 - 40 ¥/核·月 200 ~ 400 ¥/核·月 400 ~ 1300 ¥/核·月
服务支持费用 服务约 100 ¥/ 核·月 包含在 RDS 成本中

其他本地数据库管控软件

一些提供管理 PostgreSQL 能力的软件与供应商


其他 Kubernetes Operator

Pigsty 拒绝在生产环境中使用 Kubernetes 管理数据库,因此与这些方案在生态位上存在差异。

  • PGO
  • StackGres
  • CloudNativePG
  • TemboOperator
  • PostgresOperator
  • PerconaOperator
  • Kubegres
  • KubeDB
  • KubeBlocks

更多信息请参阅:


PostgreSQL 发行版生态

5 - 模块

Pigsty 中可用的模块

核心模块

Pigsty 由多个模块组成。PINE 技术栈:PGSQL / INFRA / NODE / ETCD 对于自托管 Postgres RDS 服务是 必需的

PGSQL
    具有 PITR、IaC、ACL、监控和 437 扩展的 HA PG 集群
INFRA
    用于可观测性的 Nginx、仓库、DNS、NTP、Prometheus 和 Grafana 堆栈
NODE
    将节点注册到所需状态并监控它,以及 VIP、HAProxy
ETCD
    可靠的分布式共识存储(DCS),为 PGSQL HA 提供支持

额外模块

Pigsty 还有一些 可选的 “奖励” 模块,它们与 PostgreSQL 配合良好,为您的数据基础设施带来额外价值。

MINIO
    S3 兼容的对象存储,可选的备份存储
REDIS
    高性能内存缓存,可选的数据结构服务器
DOCKER
    容器运行时,可选用于运行无状态应用程序和工具
FERRET
    在 PostgreSQL 上兼容 MongoDB 协议,可选中间件

内核模块

Pigsty 允许使用 8 种特殊的 PostgreSQL 内核 分支,作为可选的就地替换:

Citus

原生分布式扩展

Babelfish

SQL Server 协议兼容

IvorySQL

Oracle 语法和 PL/SQL 兼容

OpenHalo

MySQL 协议兼容性

OrioleDB

OLTP 优化的云原生存储引擎

PolarDB PG

类似 Aurora 的共享存储,符合中国合规要求

Supabase

后端即服务,自托管 Firebase

Greenplum

大规模并行处理数据仓库

6 - FAQ

常见问题