为什么使用 Pigsty?Pigsty 的 8 条核心价值主张
这是本节的多页打印视图。 .
Pigsty v3.7.0 文档
- 1: 安装
- 2: 准备
- 3: 配置
- 4: 管理
- 5: 关于
- 6: 价值主张
- 7: 关键特性
- 8: 参考
- 9: 版本
-
10: 服务
- 11: PostgreSQL
- 12: 基础设施
- 13: 节点
- 14: ETCD
- 15: MinIO
- 16: Redis
- 17: FERRET
- 18: Docker
- 19: APP
在本冻结点,Pigsty v4 仍属于未来预告;本归档记录的是稳定版 v3.7.0。
Postgres In Great STYle —— Postgres Infra Graphic Service Toolbox, Yours —— 你的图形化 PG 基建服务工具箱!
简介
Pigsty (/ˈpɪɡ staɪ/) 是一个开箱即用的开源 PostgreSQL 发行版, 也是一个本地优先的 RDS 替代方案。
核心特性、亮点和技术细节
架构、用例、对比和其他参考资料
许可证、发布、社区、新闻、作者、服务等...
Pigsty 汇聚了 PostgreSQL 和数据库世界的所有超能力,提供构建数据基础设施所需的一切。
一切皆用 Postgres!像专家一样自建!
安装
快速开始:准备 一台具有 SSH 访问权限 的 节点,新安装 Linux 系统,
使用具有免密 ssh 和 sudo 权限的 用户 运行:
下载、配置 和 安装。Pigsty 会在几分钟内 完成安装!您可以稍后 添加更多节点 与数据库集群。
接下来,您可以探索 用户界面,访问 5432 端口上的 Postgres 服务,以及 3000 端口上的 Grafana 监控大盘(用户名/密码:admin / pigsty)。
在 Linux 服务器上安装 Pigsty
为正式部署准备环境
使用配置清单自定义数据库集群
使用 Ansible 剧本管理您的环境
你可以将多种风味的 PostgreSQL 内核封装为 RDS: Citus, WiltonDB, IvorySQL, OpenHalo, Percona, OrioleDB, PolarDB, 以及 Supabase。
模块
Pigsty 由多个 模块 组成。其中,PGSQL / INFRA / NODE / ETCD (PINE 组合) 是自主托管 Postgres RDS 服务的 必需 模块。
具有高可用、PITR、IaC、ACL、监控和 437 扩展的 HA PG 集群
Nginx、软件仓库、DNS、NTP、Prometheus 和 Grafana 可观测性技术栈
将节点注册到所需状态并监控,以及 VIP、HAProxy
可靠的分布式共识存储(DCS),为 PGSQL 高可用提供支持
Pigsty 还提供了一些 完全可选 的 “福利” 模块,它们与 PostgreSQL 配合良好,并能为您的数据基础设施带来额外价值。
S3 兼容的对象存储,可选的备份存储
高性能内存缓存,可选的数据结构服务器
容器运行时,可选,用于运行无状态应用和工具
将你的 PostgreSQL 封装为一套 MongoDB!
常见问题
Pigsty 是什么,不是什么?
Pigsty 是一个 PostgreSQL 数据库发行版,本地优先的开源 RDS 云数据库解决方案。Pigsty 不是数据库(DBMS),而是管理数据库的工具,解决方案,与最佳实践。属于 RDS/DBA 赛道。类比:数据库是车,那么 DBA 是司机,RDS 是出租车服务,Pigsty 则是自动驾驶软件。
Pigsty 解决什么问题?
用好数据库的能力极为稀缺:要么高薪聘请数据库专家自建(雇司机),或从云厂商以天价租赁 RDS(打车),但现在你有新的选项:Pigsty(自动驾驶)。Pigsty 帮用户用好数据库:让用户在没有 DBA 的情况下,以不到 RDS 1/10 的成本,自建质量效率更优的本地云数据库服务!
Pigsty 为什么能帮您用好数据库?
Pigsty 沉淀了顶尖专家在最复杂,最大规模的甲方 PostgreSQL 场景中打磨得到的经验与最佳实践,产品化为可复制的软件:一次性解决扩展安装,高可用,链接池,监控,备份恢复,参数优化,IaC 批量管理,一键安装,自动化运维等诸多问题。提前规避诸多陷阱,避免重复踩坑。
Pigsty 为何比 RDS 好用?
Pigsty 提供远超 RDS 的特性集与基础设施支持,包括 400+ 扩展插件与 8+ 内核支持,提供独一无二的监控系统,与久经复杂场景打磨考验的架构最佳实践,简单易用。且用探探,苹果,阿里等顶级甲方场景打磨而成,用激情与热爱持续浇灌,深度与成熟度绝非 RDS 大锅饭可比。
Pigsty 为何比 RDS 省钱?
Pigsty 允许您使用 10 ¥/核·月的纯硬件资源,运行 400¥-1400¥/核·月的 RDS 云数据库,并省去 DBA 的工资。通常,成规模的 Pigsty 部署总拥有成本(TCO)能比 RDS 低 90% 以上。Pigsty 能够同时降低软件许可/服务/人力的开销,自建无需加人,让您将成本花在刀刃上。
Pigsty 对研发有什么帮助?
Pigsty 整合了 PG 生态最全的扩展(400+),提供了 All in PG 解决方案:单一组件替代 Redis, Kafka, MySQL, ES, 向量数据库, OLAP / 大数据分析等专用组件。极大提高研发效能与敏捷性的同时降低复杂度成本,而且研发能在 Pigsty 的加持下实现自助管理,自主 DevOps,无需 DBA
Pigsty 对运维有什么帮助?
Pigsty 故障自愈的高可用架构确保硬件故障无需当场处理,让运维与 DBA 睡个好觉;监控助力问题分析与性能优化;IaC 赋能超大规模集群自动化管理。运维在 Pigsty 加持下能兼职 DBA ,而 DBA 则可以跳过系统建设阶段,节省大量工时并专注于高价值工作,或喝茶看报,学习PG。
Pigsty 的作者是谁?
Pigsty 主体由冯若航一人开发,这是一位专注于 PostgreSQL 领域 10 年的开源贡献者,数据库专家与布道师,曾任职于阿里,探探,苹果,全栈专家。现为一人公司创始人,提供专业咨询服务。同时他也是技术 KOL,微信数据库个人公众号榜首 《非法加冯》 的主理人,全网粉丝六万+
Pigsty 的生态位与影响力如何?
Pigsty 是 OSSRANK PG 生态开源榜单中国人主导项目的第一名,同时也是 PostgreSQL 生态最活跃的开源项目之一,目前在扩展分发与监控系统上占据碾压性优势。Pigsty 目前是云厂商 RDS 的挑战者,目前已经广泛应用于军工,政企,医疗,互联网,金融,制造业等各个行业。
Pigsty 适合什么规模的客户?
Pigsty 源于超大规模 PostgreSQL 自动化管理的需求,但已针对易用性进行深度优化,缺乏专业 DBA 能力的个人开发者与中小型企业也可以轻松上手使用。最大规模部署为 25K vCPU,450万QPS,六年+,最小规模部署可完整运行于 1c1g 虚拟机上作为 Demo / Devbox 使用
Pigsty 提供哪些能力?
Pigsty 专注于整合 PostgreSQL 生态,提供 PostgreSQL 的最佳实践,但同时也支持一系列与 PostgreSQL 配合良好的开源软件。例如 Etcd, Redis, MinIO, DuckDB, Prometheus, FerretDB, Babelfish, IvorySQL, PolarDB, OrioleDB, OpenHalo, Supabase, Greenplum, Dify, Odoo,...
Pigsty 适用于哪些场景
运行大规模 PostgreSQL 集群用于业务;自建 RDS,对象存储,缓存,数仓,Supabase, …;自建 Odoo,Dify,Wiki,GitLab 等企业级应用;运行监控基础设施,监控现有数据库与主机;同时组合使用多种PG扩展插件;大屏开发与交互式数据应用 Demo,数据可视化,Web 建站
Pigsty 开源免费吗?
Pigsty 是 100% 的开源软件 + 自由软件,使用 AGPLv3 许可证开源。在遵循开源许可证的前提下,您可以将其免费地,自由的用于各种商业目的。我们珍视软件自由,对于非 DBaaS / OEM 用例,我们执行更为宽松的等效 Apache 2.0 许可证。请参阅许可证以获取更多详细信息。
Pigsty 提供商业支持吗?
Pigsty 软件本身开源免费,并提供丰俭由人的商业订阅,为 Pigsty & PostgreSQL 提供质保。订阅提供更宽广的 OS/PG/芯片架构支持范围,以及专家咨询与支持。Pigsty 商业订阅交付业界顶尖的管理/技术经验/解决方案,帮助您节省宝贵的时间,替您扛雷,并为疑难杂症兜底。
Pigsty 支持国产信创吗?
Pigsty 软件本身不属于数据库,不受信创名录限制,且已有多个部队用例。但 Pigsty 开源版不提供任何形式的信创支持,商业版订阅提供与阿里云合作的国产信创解决方案,支持使用具有信创资质的 PolarDB-O (需单独采购)作为 RDS 内核,能够运行于信创操作系统/芯片环境。
Pigsty 可以作为多租户 DBaaS 出售或换 Logo 贴牌吗?
您可以在遵循 AGPLv3 许可证 —— 开源全部衍生工作的前提下将其用于此目的。我们保留对公有云/数据库厂商违反 AGPLv3 许可证进行追责的权利。如果您不希望开源衍生作品,建议您选购 Pigsty 企业版订阅计划,那里提供对此用例的清晰授权以及对 AGPLv3 开源义务的豁免。
1 - 安装
快速开始
快速开始:准备 一台具有 SSH访问权限 的 节点,新安装 Linux系统,
使用具有免密 ssh 和 sudo 权限的用户运行:
步骤 1
使用以下命令[**下载**](/zh/docs/prepare/software#pigsty) pigsty:
```bash
curl -fsSL https://repo.pigsty.io/get | bash -s v3.7.0; cd ~/pigsty;
```
步骤 2
执行 [`configure`](/zh/docs/config/configure) 生成 [配置清单](/zh/docs/config/inventory)。(<span class="text-red-500 font-black">务必修改</span> 生成的 [`pigsty.yml`](/zh/docs/config/inventory) 中的密码)
```bash
./configure
```
步骤 3
一键 [**安装部署**](/zh/docs/install/start) 所有组件:
```bash
./install.yml
```
Pigsty 安装完成!请探索 用户界面,访问 5432 端口上的 Postgres 服务,或 3000 端口上的 Grafana 监控大盘(admin / pigsty)。
下一步做什么?
安装
在当前 Linux 节点上,执行标准的完整在线安装流程
在多个节点上安装,以实现真正的企业级高可用部署
在没有互联网连接的情况下,从本地离线包引导安装
仅安装高可用 Postgres 集群所必须的组件,不装监控
准备工作
准备节点、网络、存储、用户、ssh、sudo、ansible 等
检查兼容的 Linux 发行版和可用性矩阵
使用 vagrant / virtualbox 置备本地 Linux 虚拟机
在云供应商上使用 terraform 置备云 Linux 服务器
参考
访问和管理 Pigsty 提供的数据库端点与图形用户界面
使用声明式的配置文件描述你需要的基础设施与集群
了解可用的 Ansible 剧本和其使用方法
生产环境的安全加固和最佳实践
1.1 - 快速上手
本文是 Pigsty 单节点安装指南,多节点安装 介绍了在生产环境进行真正高可用部署的方法。
简化版本
准备 一台具有 SSH权限 的 节点 并安装 兼容的Linux发行版,
使用带免密 ssh 和 sudo 权限的用户:
步骤 1
[**下载**](#download) pigsty,它会自动安装至 `~/pigsty` 目录,并尝试安装 [`ansible`](/zh/docs/admin/ansible):
```bash
curl -fsSL https://repo.pigsty.io/get | bash -s v3.7.0; cd ~/pigsty;
```
步骤 2
使用 [`configure`](/docs/config/configure) 生成配置文件,或直接根据您的需求调整 [`pigsty.yml`](/zh/docs/config/inventory):
```bash
./configure # 可以使用 -c [conf] 指定具体的配置模板
```
步骤 3
使用 `install.yml` 剧本,一键 [**安装部署**](#install) 所有组件:
```bash
./install.yml
```
示例:在 RockyLinux 9 上的单机安装:
准备
安装 Pigsty 涉及一些 准备工作 ,以下是简略检查清单:
| 项目 | 要求 | 项目 | 要求 |
|---|---|---|---|
| 节点 | 至少 1C1G,推荐 2C2G |
规格 | 至少1个节点,2个为半高可用,3个以上真高可用 |
| 磁盘 | /data,主挂载点,ext4/xfs |
网络 | 静态 IPv4 地址,单节点可使用 127.0.0.1 |
| VIP | L2 VIP,可选 | 域名 | 本地/公网域名,可选 |
| 内核 | Linux |
发行版 | el8/9/10,d12/13, u22/u24 x x86_64 / aarch64 |
| Locale | C.UTF-8 或 C |
防火墙 | 端口:80 / 443 / 22 / 5432 |
| 用户 | 避免使用 root 和 postgres |
Sudo | nopass sudo 权限 |
| SSH | 通过公钥 nopass |
可达性 | ssh <ip|alias> sudo ls 无错误 |
下载
(推荐)您可以使用以下命令获取并解压最新稳定版本的 pigsty 源码:
您也可以通过 git、pig 或直接从 GitHub 下载源码 和 离线软件包 压缩包的方式安装。
pigsty/
配置
configure 脚本将根据您的环境和输入生成具有良好默认值的 pigsty.yml 配置文件 配置清单。
这是 可选的,您可以如 教程 所示直接编辑 pigsty.yml。
有许多 配置模板 供您参考,以下是一些快速示例:
让我们不带任何参数执行 configure,如果发现多个 IP 地址,它可能会要求您输入主 IP 地址。
该脚本将把 IP 占位符 10.10.10.10 替换为当前节点的主 IPv4 地址。
在 手动 配置 pigsty 时请注意这一点。检查生成的 pigsty.yml 以继续。
嘿!别忘了这些密码!
然后修改默认 密码 并进行必要的调整,最终的 pigsty.yml 可能如下所示:
安装
Pigsty 中的一切都由 配置清单 所定义,也就是 上面 生成的 pigsty.yml 配置。
运行 install.yml 剧本 会实施这个部署计划。
输出尾部如果带有 pgsql init done,PLAY RECAP 等字样,说明安装已经完成!
上游仓库(如 Linux / PGDG 仓库)可能会因为更新而进入崩溃状态并导致安装失败(有过多次先例)! 您可以选择等待上游仓库修复后安装,或者使用预制的 离线软件包 来解决这个问题。
重新运行整个 install.yml 剧本将会覆盖式创建所有组件,有可能导致数据丢失和服务中断!
如果您熟悉 ansible 并清楚的知道自己在做什么,请谨慎使用。
安装完成后,您可以探索 用户界面,纳管 更多节点 并部署更多高可用数据库集群。
更多
您可以使用 pigsty 部署和监控 更多集群:向 配置清单 添加定义并运行:
1.2 - 用户界面
安装完成后,您在当前节点上将安装有四个核心模块:
PGSQL、INFRA、NODE 和 ETCD。
您可以直接通过以下 端口 直接访问 WebUI 服务(不推荐用于生产环境)。 或使用本地/公共 域名 通过 Nginx 门户 访问它们。
请注意,SSL 证书 需要与域名一起使用。
| 组件 | 端口 | 域名 | 备注 | 公共演示 |
|---|---|---|---|---|
| Nginx | 80/443 |
h.pigsty |
门户、仓库、HAProxy 管理 | home.pigsty.io |
| Grafana | 3000 |
g.pigsty |
Grafana 仪表盘 | g.pgsty.com |
| Prometheus | 9058 |
p.pigsty |
Prometheus Web UI | p.pigsty.io |
| AlertManager | 9059 |
a.pigsty |
告警管理 | a.pigsty.io |
您可以通过以下数据库用户和相应的 PGURL 访问默认端口 5432 上的默认 PostgreSQL 数据库(meta):
PostgreSQL
个人用户开发测试使用时,可以直接使用默认超级用户和 IP:端口来访问 PostgreSQL:
DBSU
默认数据库超级用户是 dbuser_dba,默认密码为 DBUser.DBA,如果修改过请使用您自己的密码。
| 用户名 | dbuser_dba |
pg_admin_username |
|---|---|---|
| 密码 | DBUser.DBA |
pg_admin_password |
CLI
内置的 psql CLI 已经为管理员用户(安装 Pigsty 使用的用户)配置了 .pgpass 和 .pg_service.conf
GUI
您可以使用您喜欢的 GUI 工具来访问数据库,Pigsty 也提供了一些 GUI 工具的内置模板。
| 名称 | 描述 | Pigsty 支持 |
|---|---|---|
| PgAdmin | 官方 PostgreSQL 管理工具 | 内置 Docker 模板,OSS |
| Supabase Studio | 精美的第三方 PostgreSQL 管理 UI | 内置 Docker 模板,OSS |
| PgWeb | 轻量级基于 Web 的 PostgreSQL 客户端 | 内置 Docker 模板,OSS |
| Bytebase | 具有良好 GUI 的模式迁移工具 | 内置 Docker 模板,OSS |
| DataGrip / IntelliJ | 具有强大功能的专业数据库 IDE | 商业 / 社区版 |
| Navicat | 流行的商业数据库管理工具 | 商业版 |
| DBeaver | 开源通用数据库 GUI | OSS |
默认设置
您可以定义业务 数据库 和 用户。配置模板 中有一些预定义的示例供您参考。
例如,默认的 meta 配置模板预定义了一个 meta 数据库:
- 带有 Pigsty CMDB 模式(可选)
- 预装来
timescaledb,postgis,citus,pgvector四个业务扩展 - 它定义了
dbuser_meta作为具有 DDL 权限的业务管理员用户,和一个dbuser_view作为只读查看者用户。
这意味着您也可以使用这两个用户访问 meta 数据库:
生产环境
要在生产环境中使用高可用 PostgreSQL 集群,您需要阅读以下文档来继续:
在这种情况下,您的流量在到达数据库之前会通过 haproxy 进行分发,并由 pgbouncer 池化。

Grafana
Grafana 是监控和可观测性平台,提供可视化面板能力,默认监听 3000 端口:
- http://10.10.10.10:3000(替换为您的 IP)
Pigsty 为 Web 组件提供了 静态本地域名,您可以通过 Nginx 访问 http://g.pigsty 来使用 Grafana
建议使用域名,因为您可以通过域名经由 Nginx 暴露所有服务,并为它们使用 SSL 证书。
默认凭据:admin:pigsty。如果您已更改默认凭据,请使用您自己的。
| 用户名 | admin |
grafana_admin_username |
|---|---|---|
| 密码 | pigsty |
grafana_admin_password |
您可以查看我们的公共演示站点来看看它是什么样子: https://g.pgsty.com
Pigsty 支持使用 真实域名 和 真正的免费 SSL 证书
只需替换 infra_portal 中的 domain 条目为你的真实域名,并使用 make cert 命令即可免费申请真实证书
1.3 - 多节点部署
你可以参考 配置教程 ,将一个单机 Pigsty 节点逐步扩展为多节点高可用部署。 但是完成这些工作最简单的办法,始终是在部署前就预先规划一切,并且一次性完成整个环境的置备。
单节点部署
我们已经在 快速上手 一节中演示了单节点安装的流程 —— 最简单的部署方式。
单节点没有高可用性,也没有冗余,如果您确实要将其用于生产环境,请为 PG 配置外部 MinIO / S3 / NFS… 作为远程备份仓库,这样能提供最低数据完整性灾难恢复能力。
Pigsty 有很多单节点 配置模板 供您参考。
你可以使用 Vagrant 默认的 meta.rb 来在本地置备此环境所需的虚拟机。
或者使用 Terraform 默认的 meta.tf 来在阿里云上置备此环境。
双节点部署
半高可用设置
双节点设置可实现一主一从的数据库物理复制和半高可用功能:
| ID | IP 地址 | NODE | PGSQL | INFRA | ETCD |
|---|---|---|---|---|---|
| 1 | 10.10.10.10 |
meta |
pg-meta-1 |
infra-1 |
etcd-1 |
| 2 | 10.10.10.11 |
node-1 |
pg-meta-2 |
虽然比单节点设置更加健壮,但双节点架构的高可用性有限制:
- 如果
node-2故障,自动故障转移正常工作 -node-1会自动被提升 - 如果
node-1故障,无法进行自动故障切换 - 需要手动提升node-2
也就是说,这种"半高可用"设置只能从 特定的节点故障 中自动恢复,只允许坏其中一台特定的节点2。
您可以使用 dual.yml 配置模板,并使用
Vagrant dual.rb 来置备此环境所需的虚拟机。
三节点部署
真正的高可用
一个能够从任意单节点故障中自动恢复的真正高可用设置:
| ID | IP 地址 | NODE | PGSQL | INFRA | ETCD |
|---|---|---|---|---|---|
| 1 | 10.10.10.10 |
node-1 |
pg-meta-1 |
infra-1 |
etcd-1 |
| 2 | 10.10.10.11 |
node-2 |
pg-meta-2 |
infra-2 |
etcd-2 |
| 3 | 10.10.10.12 |
node-3 |
pg-meta-3 |
infra-3 |
etcd-3 |
您可以使用 trio.yml 配置模板,并使用
Vagrant trio.rb 来置备此环境所需的虚拟机。
四节点沙箱
这是 Pigsty 中使用的 沙箱演示 环境,具有一个基础设施节点和三个额外的数据节点:
| ID | IP 地址 | NODE | PGSQL | INFRA | ETCD | MINIO |
|---|---|---|---|---|---|---|
| 1 | 10.10.10.10 |
meta |
pg-meta-1 |
infra-1 |
etcd-1 |
minio-1 |
| 2 | 10.10.10.11 |
node-1 |
pg-test-1 |
|||
| 3 | 10.10.10.12 |
node-2 |
pg-test-1 |
|||
| 4 | 10.10.10.13 |
node-3 |
pg-test-1 |
您可以使用 full.yml 配置模板,并使用
Vagrant full.rb 或 Terraform full.tf 来置备此环境。
五节点构建
这个 pro.yml 是一个五节点构建环境,包含支持的 Linux 发行版。
| ID | IP 地址 | NODE | PGSQL | INFRA | ETCD |
|---|---|---|---|---|---|
| 1 | 10.10.10.8 |
el8 |
el8-1 |
infra-1 |
|
| 2 | 10.10.10.9 |
el9 |
el9-1 |
infra-2 |
etcd-2 |
| 3 | 10.10.10.12 |
u12 |
u12-1 |
infra-3 |
|
| 4 | 10.10.10.22 |
u22 |
u22-1 |
infra-4 |
|
| 5 | 10.10.10.24 |
u24 |
u24-1 |
infra-5 |
您可以使用 Vagrant pro.rb 或 Terraform pro.tf 来置备此环境。
三十六节点仿真
一个包含 36 个节点的生产仿真环境(simu.yml),涵盖了所有 Pigsty 组件
| IP 地址 | 规格 | NODE | PGSQL | INFRA | ETCD | MINIO | REDIS |
|---|---|---|---|---|---|---|---|
10.10.10.10 |
8C32G | meta1 |
pg-meta-1 |
infra-1 |
|||
10.10.10.11 |
8C32G | meta2 |
pg-meta-2 |
infra-2 |
|||
10.10.10.12 |
2C4G | pg12 |
pg-v12-1 |
||||
10.10.10.13 |
2C4G | pg13 |
pg-v13-1 |
||||
10.10.10.14 |
2C4G | pg14 |
pg-v14-1 |
||||
10.10.10.15 |
2C4G | pg15 |
pg-v15-1 |
||||
10.10.10.16 |
2C4G | pg16 |
pg-v16-1 |
||||
10.10.10.17 |
2C4G | pg17 |
pg-v17-1 |
||||
10.10.10.18 |
2C4G | proxy1 |
|||||
10.10.10.19 |
2C4G | proxy2 |
|||||
10.10.10.21 |
2C4G | minio1 |
etcd-1 |
minio-1 |
redis-meta-1 |
||
10.10.10.22 |
2C4G | minio2 |
etcd-2 |
minio-2 |
redis-meta-2 |
||
10.10.10.23 |
2C4G | minio3 |
etcd-3 |
minio-3 |
redis-meta-3 |
||
10.10.10.24 |
2C4G | minio4 |
etcd-4 |
minio-4 |
redis-meta-4 |
||
10.10.10.25 |
2C4G | minio5 |
etcd-5 |
minio-5 |
redis-meta-5 |
||
10.10.10.40 |
1C2G | node40 |
pg-pitr-1 |
||||
10.10.10.41 |
1C2G | node41 |
pg-test-1 |
redis-test-1 |
|||
10.10.10.42 |
1C2G | node42 |
pg-test-2 |
redis-test-2 |
|||
10.10.10.43 |
1C2G | node43 |
pg-test-3 |
redis-test-3 |
|||
10.10.10.44 |
1C2G | node44 |
pg-test-4 |
redis-test-4 |
|||
10.10.10.45 |
1C2G | node45 |
pg-src-1 |
redis-src-1 |
|||
10.10.10.46 |
1C2G | node46 |
pg-src-2 |
redis-src-2 |
|||
10.10.10.47 |
1C2G | node47 |
pg-src-3 |
redis-src-3 |
|||
10.10.10.48 |
1C2G | node48 |
pg-dst-1 |
redis-dst-1 |
|||
10.10.10.49 |
1C2G | node49 |
pg-dst-2 |
redis-dst-2 |
|||
10.10.10.50 |
1C2G | node50 |
pg-citus0-1 |
||||
10.10.10.51 |
1C2G | node51 |
pg-citus0-2 |
||||
10.10.10.52 |
1C2G | node52 |
pg-citus1-1 |
||||
10.10.10.53 |
1C2G | node53 |
pg-citus1-2 |
||||
10.10.10.54 |
1C2G | node54 |
pg-citus2-1 |
||||
10.10.10.55 |
1C2G | node55 |
pg-citus2-2 |
||||
10.10.10.56 |
1C2G | node56 |
pg-citus3-1 |
||||
10.10.10.57 |
1C2G | node57 |
pg-citus3-2 |
||||
10.10.10.58 |
1C2G | node58 |
pg-citus4-1 |
||||
10.10.10.59 |
1C2G | node59 |
pg-citus4-2 |
||||
10.10.10.88 |
4C8G | test |
您可以使用 Vagrant simu.rb 来置备此环境。
您可以在真实服务器(72C / 256G)上运行整个仿真,使用 Vagrant 的 libvirt 作为虚拟机提供程序。
- 2 个基础设施节点,相互监控
- 2 个专用代理节点运行 HAProxy
- 5 节点 ETCD 集群可容忍 2 个节点故障,以及 5 节点 Redis Sentinel 集群
- 5 节点 MinIO 集群,每个节点有 4 个磁盘
- 10 个 PostgreSQL 集群:
pg13-pg15、pg-src、pg-dst、pg-pitr、pg-test - 10 节点 Citus 集群有 5 个分片
- Redis 独立集群
redis-src和redis-dst,以及原生集群redis-test
1.4 - 离线安装
Pigsty 默认从互联网上游 安装 所需软件包,但有些环境与互联网隔离。 为了解决这个问题,Pigsty 支持使用 离线软件包 进行离线安装。
步骤 1
下载 pigsty 离线软件包,将其放到 `/tmp/pkg.tgz`
步骤 2
下载 pigsty 源码包,解压(假设解压到 `~/pigsty`)
步骤 3
`cd ~/pigsty; ./bootstrap`,它将解压软件包并使用本地仓库
步骤 4
`vi ~/pigsty.yml`,覆盖 [`node_repo_modules`](/zh/docs/node/param#node_repo_modules) 设为 `local` 以使用本地仓库
步骤 5
照常运行 `./install.yml`。它将从本地仓库安装所有内容。
什么是离线软件包?
离线软件包打包了所有需要的 RPM/DEB 软件包及其依赖; 它本质上是在正常 安装 后采取的本地 APT / YUM 仓库的快照压缩包。
您可以从 GitHub 发布页面 找到这些软件包,例如:
我们通常为以下 Linux 发行版 发布离线软件包,使用最新的操作系统次要版本。
| EL Distribution | Code | Arch | OS Code | Package |
|---|---|---|---|---|
| RockyLinux 9.6 | EL9 | x86_64 | el9.x86_64 |
pigsty-pkg-v3.7.0.el9.x86_64.tgz |
| Ubuntu 24.04.2 | U24 | x86_64 | u24.x86_64 |
pigsty-pkg-v3.7.0.u24.x86_64.tgz |
| Debian 12.11 | D12 | x86_64 | d12.x86_64 |
pigsty-pkg-v3.7.0.d12.x86_64.tgz |
| RockyLinux 9.6 | EL9 | x86_64 | el9.aarch64 |
pigsty-pkg-v3.7.0.el9.aarch64.tgz |
| Ubuntu 24.04.2 | U24 | x86_64 | u24.aarch64 |
pigsty-pkg-v3.7.0.u24.aarch64.tgz |
| Debian 12.11 | D12 | x86_64 | d12.aarch64 |
pigsty-pkg-v3.7.0.d12.aarch64.tgz |
https://github.com/pgsty/pigsty/releases/download/v3.7.0/pigsty-pkg-v3.7.0.el9.x86_64.tgz
在较低的操作系统小版本上使用更高小版本的离线软件包,大概率可以使用,但也有失败的可能
使用离线软件包?
将离线软件包放置于 /tmp/pkg.tgz 路径下,进入 ~/pigsty 目录执行 ./bootstrap,即可解包使用离线安装包。
Pigsty 会将其解压至 /www/pigsty,然后配置系统仓库列表启用此仓库,并从中安装 ansible。
自从 Pigsty v3.6 版本起,大部份配置模板都默认不再构建本地软件仓库,而是直接从互联网上游安装软件包。
少部分配置模板如 rich 与 full 依然保留了旧版本的行为 —— 先构建本地仓库再使用。
如果您想要在自己的配置中使用已经解包配置好的离线软件包,请修改以下配置:
repo_enabled:将此参数打开,设置为true,则会构建本地软件源(在大部份配置中被显式关闭)node_repo_modules:将此参数设置为local,则环境中所有节点都从本地软件仓库安装- 在大部份模板中,此参数现在被显式配置为:
node,infra,pgsql,即直接从这些上游软件仓库安装。 - 将其设置为
local,则会使用本地软件仓库安装所有软件包,速度最快,没有其他仓库的变数干扰。 - 如果你想同时使用本地软件仓库和上游软件仓库,可以将其设置为
local,node,infra,pgsql
- 在大部份模板中,此参数现在被显式配置为:
优缺点
如果您使用的是上述列表中给出的操作系统(精确匹配的小版本),那么建议使用离线软件包。 Pigsty 为这些系统提供了开箱即用的预制离线软件包,在 GitHub 上提供免费下载。
- 官方离线软件包经过测试。
- 在与互联网隔离的环境中交付的最简单方法。
- 通过一次性预下载所有软件包来加速安装过程。
- 快照确保可以正常工作,无需担心上游依赖项的变动导致依赖错漏。
- 如果操作系统次要版本不匹配,操作系统的 rpm/deb 软件包可能会出现问题
- 可能不包含最新的更新和操作系统安全补丁。
如果你使用的操作系统版本不在上述列表中,你可以考虑自制离线安装包,我们也提供针对更多操作系统大小版本的离线安装包预制服务(¥200)
引导程序
bootstrap 脚本将自动检测 /tmp/pkg.tgz 并默认将其解压到 /www/pigsty。
它还将设置操作系统软件包管理器的仓库文件,并安装 ansible 和其他工具。
引导程序默认会 清除 现有仓库,以确保只安装所需的仓库。
您可以在 /etc/yum.repos.d/backup (EL) 或 /etc/apt/backup (Debian / Ubuntu) 中找到它们
您可以使用 -k|--keep 参数来保持现有仓库文件不变:
制作离线软件包
如果您选择的操作系统不在默认列表中,
您可以使用内置的 cache.yml 剧本制作自己的离线软件包。
步骤 1
找到一台运行完全相同操作系统版本,且可以访问互联网的节点
步骤 2
运行标准 [在线安装](/zh/docs/install) (建议使用 `rich` 配置模板:`configure -c rich`)
步骤 3
`cd ~/pigsty; ./cache.yml`:制作并获取离线软件包到 `~/pigsty/dist/${version}/`
步骤 4
将离线软件包复制到没有互联网访问的环境中(ftp、scp、usb 等),通过 `bootstrap` 解包使用
自从 Pigsty v3.6 开始,大部份配置模板都直接从互联网上游安装软件包,而不是先下载到管理节点本地构建软件仓库,再从中安装。 你可以通过调整参数来恢复此前的默认行为,如果你需要构建自己的离线软件包,这很有用:
repo_enabled:将此参数打开,则会构建本地软件源(在大部份配置中被显式关闭)node_repo_modules:将此参数设置为local,则环境中所有节点都从本地软件仓库安装
部分配置模板,例如 rich 与 full 依然直接保留旧版本的行为 —— 先构建本地仓库再使用,故无需调整。
我们提供付费服务,提供经过测试的预制 Linux 主版本.次版本制作离线软件包。(¥200)
混合方法
有一种混合方法可以使用离线软件包作为基础,并在线补足不匹配的增量软件包,这种办法可以融合离线安装与在线安装的优点。
例如,假设您使用的是 RockyLinux 9.5,但官方离线软件包是为 RockyLinux 9.6 制作的。
您可以使用 el9 离线软件包,(虽然是针对 9.6 制作的)
然后在执行正式安装前,执行 make repo-build 重新下载 9.5 对应的缺失软件包,
Pigsty 将从上游仓库重新下载所需的增量。
1.5 - 精简安装
如果您只想要高可用 PostgreSQL 本身,而不需要监控、基础设施等功能,请考虑精简安装。
没有 INFRA 模块,没有监控,没有 本地仓库,只有 ETCD 和 PGSQL 以及部分 NODE 功能
概述
使用精简安装,您需要:
步骤 1
使用 `slim.yml` 配置模板(`configure -c slim`)
步骤 2
运行 `slim.yml` 剧本而不是 `install.yml`
精简安装只安装这些核心组件:
| 组件 | 必需性 | 描述 |
|---|---|---|
| patroni | 必需 | 引导高可用 PostgreSQL 集群 |
| etcd | 必需 | Patroni 的元数据库依赖(DCS) |
| pgbouncer | 可选 | PostgreSQL 连接池 |
| vip-manager | 可选 | L2 VIP 绑定到 PostgreSQL 集群主节点 |
| haproxy | 可选 | 自动路由 服务 |
| chronyd | 可选 | 与 NTP 服务器的时间同步 |
| tuned | 可选 | 节点调优模板和内核参数管理 |
您可以关闭可选组件,只有两个必需组件是 patroni 和 etcd。
软件包直接从互联网上游仓库安装,离线安装 在此处不适用。
配置
精简安装的配置文件示例:conf/slim.yml:
安装
使用 slim.yml 剧本而不是 install.yml 剧本:
这个 slim.yml 剧本是专门用来在精简安装场景中取代默认 install.yml 剧本的。
1.6 - 视频演示
请参见 Asciinema 终端录像: Vonng
标准安装
Pigsty v3.6.0, RockyLinux 9.6, x86_64, 标准安装, Link
这会使用默认的 meta 单节点配置模板,从互联网直接安装所有所需软件包。
完整安装
Pigsty v3.6.0, Ubuntu 24.04.2, x86_64, 完整安装
完整安装使用 rich 模板,在标准安装的基础上,有以下区别于改动:
- 尽可能安装(但不都启用)所有 PostgreSQL 扩展插件
- 构建本地软件仓库,先下载到本地仓库,再让所有节点都从本地软件仓库进行安装
- 1 node minio used as central backup repo
- cluster stub for 3-node pg-test / ferret / redis
- stub for nginx, certs, and website self-hosting config
- detailed comments for database / user / service
Slim Install
Pigsty v3.6.0, Debian 12.11, aarch64, Slim Installation, Link
Postgres HA Cluster with essential modules, (with ETCD, without INFRA).
Offline Install
Pigsty v3.6.0, RockyLinux 9.6, aarch64, Slim Installation
Supabase
Pigsty v3.6.0, Ubuntu 24.04, x86_64, Install Supabase
2 - 准备
节点、规格、磁盘、网络、VIP、域名...
支持的 Linux 操作系统发行版列表
区域设置、防火墙、Ansible、Pigsty...
用户、Sudo、SSH、可访问性...
您可以利用 IaC 工具如 Terraform 和 Vagrant 来帮助您准备环境并完成繁重的工作。
Ansible 101,pigsty 用户的基础知识
用于学习和测试的四节点沙盒
使用 vagrant 置备本地虚拟机
使用 terraform 置备云服务器
这里有一个检查清单,帮助您为生产环境中的严肃 Pigsty 部署准备环境。
| 项目 | 要求 | 项目 | 要求 |
|---|---|---|---|
| 节点 | 至少 1C1G,推荐 2C2G,无上限 |
规格 | 至少 1 个节点,2 个用于半高可用,3+ 个用于真正的高可用 |
| 磁盘 | /data,主挂载点,ext4 或 xfs |
网络 | 静态内网,IPv4 地址,最好有互联网访问 |
| VIP | 为 VIP 保留一个 L2 IP (可选) | 域名 | 使用本地 / 公共域名(可选) |
| 内核 | Linux,MacOS 可用作管理控制器 |
发行版 | EL (8/9)、Debian (12)、Ubuntu (22/24)、x86_64 / aarch64 |
| 区域设置 | C.UTF-8 或 C |
防火墙 | 端口:80 / 443 / 22 / 5432 |
| 用户 | 避免使用 root 和 postgres |
Sudo | nopass sudo 权限 |
| SSH | 通过公钥 nopass |
可访问 | ssh <ip|alias> sudo ls 有效 |
2.1 - 硬件置备
节点
Pigsty 目前运行在具有 Linux 内核和 x86_64 / aarch64 架构的节点上。
“节点” 指的是 SSH 可访问 且提供裸 Linux 操作系统环境的资源。
它可以是物理机、虚拟机或配备 systemd、sudo 和 sshd 的类似操作系统的容器。
部署 pigsty 至少需要 1 个节点,
您可以准备更多并在 一次性 中设置所有内容,或稍后添加它们。
最小节点规格要求是 1C1G,建议至少使用 2C2G。
越高越好,没有上限。参数将根据可用资源自动调优。
功能性 HA 设置至少需要 3 个节点才能工作,或使用 2 个节点进行半 HA 设置
规格
您需要多少个节点?这取决于您的资源和需求。
磁盘
Pigsty 将使用 /data 作为默认数据目录,如果您有专用的主数据磁盘,建议将其挂载到那里,
并为额外的磁盘驱动器使用 /data1、/data2、/dataN。
如果您将其挂载到别处,您必须相应地更改以下参数:
| 名称 | 描述 | 默认值 |
|---|---|---|
node_data |
节点主数据目录 | /data |
pg_fs_main |
postgres 主数据目录 | /data |
pg_fs_backup |
postgres 备份数据目录 | /data/backups |
etcd_data |
etcd 数据目录 | /data/etcd |
prometheus_data |
prometheus 数据目录 | /data/prometheus |
loki_data |
loki 数据目录 | /data/loki |
minio_data |
minio 数据目录 | /data/minio |
redis_fs_main |
redis 数据目录 | /data/redis |
我们建议使用 ext4 或 xfs 作为数据磁盘的文件系统。它们对 PostgreSQL 有最佳性能。
虽然 ext4 有更多的数据恢复工具,但 xfs 对小文件更高效。
如果您运行 MinIO,建议使用 xfs,否则,建议使用 ext4 作为默认选项。
Pigsty 的工作假设是 /data 目录属于 root:root,权限为 755。
管理员可以分配一级目录的所有权和权限。每个应用在其子目录中运行时将使用专用用户。
网络
Pigsty 需要静态网络才能工作,您应该为每个节点明确分配一个固定的 IPv4 地址。
在单节点安装中,如果没有固定 IP 地址,可以使用 127.0.0.1 作为变通方法。
IP 地址将用作节点的唯一标识符,它应该是绑定到用于内部网络通信的主网络接口的主 IP 地址。
使用公共 IP 地址作为节点标识符可能导致安全和连接问题。
要使用可选的节点 VIP 和 PG VIP 功能,请确保所有节点位于同一 L2 网络内
执行标准(在线)安装 时需要互联网访问。 但 pigsty 可以通过离线软件包进行 离线安装, 在这种情况下不需要互联网访问。
VIP
Pigsty 支持 NODE 集群(keepalived)和 PGSQL 集群(vip-manager)的可选 L2 VIP。
要使用 L2 VIP 功能,您必须为它们明确分配一个 L2 VIP。 在您自己的硬件上运行时这不是大问题, 但在公有云环境中工作时可能成为问题。
域名
Pigsty 为以下具有 WebUI 的服务使用本地静态域名。
您可以为这些服务分配自定义域名,或使用真实域名。
只需在 infra_portal 中更改它们。
| 域名 | 名称 | 端口 | 组件 | 描述 |
|---|---|---|---|---|
h.pigsty |
home |
80/443 | Nginx | 默认服务器,本地仓库 |
g.pigsty |
grafana |
3000 | Grafana | 监控和可视化 |
p.pigsty |
prometheus |
9058 | Prometheus | 时间序列数据库 |
a.pigsty |
alertmanager |
9059 | AlertManager | 告警聚合和路由 |
域名是可选的,要使用它们,用户有责任将以下记录添加到您的 /etc/hosts 文件(本地静态解析),
或将它们添加到您的 DNS 服务器/公共 DNS 供应商。
2.2 - Linux 系统
系统建议
Pigsty 推荐使用以下操作系统:RockyLinux 9.6, Ubuntu 24.04.2,与 Debian 12.11。
| 发行版 | 架构 | 系统代码 | PG18 | PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|---|---|
| RHEL9 / Rocky9 / Alma9 | x86_64 | el9.x86_64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| RHEL9 / Rocky9 / Alma9 | aarch64 | el9.aarch64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Ubuntu 24.04 (noble) |
x86_64 | u24.x86_64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Ubuntu 24.04 (noble) |
aarch64 | u24.aarch64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Debian 12 (bookworm) |
x86_64 | d12.x86_64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Debian 12 (bookworm) |
aarch64 | d12.aarch64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
EL
Pigsty 支持 EL 8/9/10 兼容系统(RHEL / Rocky / Alma / Anolis / CentOS …… ),推荐使用 RockyLinux 9.6。
| EL 发行版 | 架构 | 系统代码 | PG18 | PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|---|---|
| RHEL10 / Rocky10 / Alma10 | x86_64 | el10.x86_64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| RHEL10 / Rocky10 / Alma10 | aarch64 | el10.aarch64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| RHEL9 / Rocky9 / Alma9 | x86_64 | el9.x86_64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| RHEL9 / Rocky9 / Alma9 | aarch64 | el9.aarch64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| RHEL8 / Rocky8 / Alma8 | x86_64 | el8.x86_64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| RHEL8 / Rocky8 / Alma8 | aarch64 | el8.aarch64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| RHEL7 / CentOS7 | x86_64 | el7.x86_64 |
● | ● | ● | |||
| RHEL7 / CentOS7 | aarch64 | - |
RockyLinux 9.6 提供了完整的扩展插件支持,是 Pigsty 首要支持并推荐使用的 EL 系统版本。
EL 7 支持已经不再维护,如果您需要在过时系统上运行,考虑我们的专业服务。
Ubuntu
Pigsty v3.7 支持 Ubuntu 24.04 / 22.04,建议使用 24.04.2。
| Ubuntu 发行版 | 架构 | 系统代码 | PG18 | PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|---|---|
Ubuntu 24.04 (noble) |
x86_64 | u24.x86_64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Ubuntu 24.04 (noble) |
aarch64 | u24.aarch64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Ubuntu 22.04 (jammy) |
x86_64 | u22.x86_64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Ubuntu 22.04 (jammy) |
aarch64 | u22.aarch64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Ubuntu 24.04 提供了完整的扩展插件支持,是 Pigsty 首要支持并推荐使用的 Linux 系统版本。
Debian
Pigsty 可运行于 Debian 13 / 12 / 11 上,建议使用 12.11。
| Debian 发行版 | 架构 | 系统代码 | PG18 | PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|---|---|
Debian 13 (trixie) |
x86_64 | d13.x86_64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Debian 13 (trixie) |
aarch64 | d13.aarch64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Debian 12 (bookworm) |
x86_64 | d12.x86_64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Debian 12 (bookworm) |
aarch64 | d12.aarch64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Debian 11 (bullseye) |
x86_64 | d11.x86_64 |
● | ● | ● | ● | ||
Debian 11 (bullseye) |
aarch64 | - |
Debian 12 带有完整的扩展支持,是 Pigsty 首要支持并推荐使用的 Linux 系统版本。
Debian 11 支持已经不再维护,如果您需要在过时系统上运行,考虑我们的专业服务。
2.3 - 软件置备
Linux
Pigsty 运行在 Linux 操作系统上,它支持 14 种主流 Linux 发行版:兼容操作系统列表
我们推荐使用 RockyLinux 9.6、Debian 12.11 或 Ubuntu 24.04.5 作为默认操作系统选项。
您可以在 macOS 上安装 pigsty,并使用 ansible 从本地笔记本电脑发起控制。(用作管理节点)
但数据库/基础设施/节点/etcd 服务仍在 Linux 节点上运行。
我们强烈建议使用全新安装的操作系统环境,并将 en_US 设置为主要语言。
在使用其他主要语言时确保 en_US 区域设置可用:
Pigsty 不使用容器,主要组件针对特定发行版主版本打包。
请在单个部署中的所有节点上使用相同的操作系统主版本和次版本。
文件系统
Pigsty 建议使用 ext4 或 xfs 文件系统,两者在 PostgreSQL 用例上都有最好的性能表现。
如果您清楚知道自己在做什么,也可以考虑使用 zfs 这样的文件系统,但切勿使用 nfs 等网络文件系统运行数据库服务。
如果您需要使用到 MinIO,建议使用 xfs 文件系统,这是 MinIO 唯一推荐使用到文件系统。
它在大量小文件的场景中有更好的性能表现,但工具生态(例如数据恢复)略逊于 ext4。
如果您只是运行标准 PostgreSQL 服务,我们建议您默认使用 Linux ext4 文件系统。
防火墙
您的安全策略和防火墙设置应该允许访问所需的端口。
要访问 WebUI 服务,您必须允许 HTTP(80)/ HTTPS(443)访问。
要访问 PostgreSQL 数据库服务,您必须允许 postgres 的 5432 端口。
5432: PostgreSQL 数据库6432: Pgbouncer 连接池5433: PG 主要服务5434: PG 副本服务5436: PG 默认服务5438: PG 离线服务
如果您通过其他端口访问 postgres 服务,请相应地允许它们
在典型的公有云 VPS 设置中,端口 22/80/443/5432 通常是开放的。
直接向互联网暴露数据库服务端口是非常危险的。 如果您需要这样做,请考虑咨询 安全最佳实践 并谨慎进行。
在典型的生产设置中,端口 22/80/443 从 LAN / 跳板机向 DBA/OPS 开放。
其他端口从内网访问。您必须确保它们在内部开放:使用的端口。
Ansible
Pigsty 使用 Ansible 从管理节点发起对所有被管理节点的控制。
您不需要关心细节,ansible 在 Bootstrap 阶段安装。
Ansible 只在管理节点上需要,您可以在 macOS 上运行 ansible 将您的笔记本电脑用作管理节点。
Pigsty
(推荐)您可以使用以下方式获取并提取最新稳定版本的 pigsty 源代码:
要安装特定版本,将版本字符串作为第一个参数传递:
您也可以使用 git 从 GitHub 克隆 Pigsty 源代码仓库:
默认的 main 分支可能处于不稳定的开发状态,使用前请 git checkout v3.7.0。
您也可以从 GitHub Release Page 手动下载 pigsty 源代码(pigsty-<version>.tar.gz):
如果您的环境没有互联网访问,请考虑与源代码压缩包一起下载离线软件包并将其上传到您的节点。
详情请查看 离线安装。
2.4 - 管理用户
用户
Pigsty 需要一个在所有被管理节点上具有免密 ssh 和 sudo 权限的操作系统用户。
命名约定
通常我们会选择 dba 或 admin 这样的名称,
但避免使用 root 或 postgres:
虽然可能,但出于安全原因,不建议使用 root 作为管理员用户。
DBSU(默认为 postgres)不应该用作管理员用户。
这会导致意外的安全问题。
如果您使用不同的 dbsu 用户,也避免将其用作管理员用户。
提供密码
如果您可以接受每个 ssh 和 sudo 命令的密码提示,则免密要求是可选的。
创建管理员用户
在服务器置备阶段,用户/供应商有责任创建并交付这样的管理员用户。 但如果您没有这样的管理员用户,或者该用户受到限制,您可以使用 pigsty 本身创建一个:
假设您在节点上有 root 或现有的管理员用户,您可以使用 pigsty 本身创建管理员用户。
它将利用现有的管理员创建新的管理员用户。
它将创建由以下参数描述的专用 dba(uid=88)用户,
并正确配置 sudo / ssh。
| 名称 | 描述 | 默认值 |
|---|---|---|
node_admin_enabled |
启用节点管理员用户 | true |
node_admin_uid |
节点管理员用户的 uid | 88 |
node_admin_username |
节点管理员用户名 | dba |
Sudo 权限
所有 管理员用户 都应该在所有被管理节点上具有免密 sudo 权限。
如果您想从头开始配置具有免密 sudo 权限的管理员用户:
要手动允许用户执行免密 sudo 命令:
为您的管理员用户创建 sudoers 文件(假设是 vagrant,请替换为您选择的名称):
假设您的管理员用户名选择是 dba,那么 /etc/sudoers.d/dba 内容应该是
Ansible 依赖 sudo 在被管理节点上以 root 权限执行命令。
因此,在 sudo 不可用的环境中(比如在精简容器内),您可能需要先安装 sudo。
SSH
您的当前用户应该能够以相应的管理员用户身份免密 SSH 访问所有被管理节点。
您的当前用户可以是管理员用户本身,但不是必需的,只要您能以管理员用户身份 SSH。
SSH 配置是 Linux 101,但我们会在此处介绍基础知识,以防您不熟悉:
生成 SSH 密钥
如果您没有 SSH 密钥对,请生成一个
如果您没有密钥对,Pigsty 会在 bootstrap 阶段为您完成此操作。
复制 SSH 密钥
您需要将生成的公钥分发到远程(和本地)服务器,并将其放入
所有节点上管理员用户的 ~/.ssh/authorized_keys 文件中。
可以使用 ssh-copy-id 工具。
将公钥复制到所有被管理节点,使用 ssh-copy-id 或手动添加到 ~/.ssh/authorized_keys。
您可以使用 sshpass 工具直接传递密码而不提示,但这很危险:
使用别名
当无法直接 SSH 访问时(由于跳板机、其他端口、凭据等…),考虑:
在 ~/.ssh/config 中配置 SSH 别名,并在那里放置别名的自定义参数。
并在清单中引用别名,使用 ansible_host 指定真实的 SSH 别名。
SSH 参数可以直接在 ansible 中使用,详情请查看 Ansible Inventory Guide。
检查可访问性
您应该能够从管理节点通过当前用户免密 ssh 访问所有被管理节点。
远程用户(管理员用户)应该有权限运行免密 sudo 命令。
在管理节点上对所有被管理节点运行此命令:
如果没有密码提示或错误,免密 ssh/sudo 按预期工作。
2.5 - 沙箱环境
Pigsty 有一个沙盒,这是一个具有固定 IP 地址和其他标识符的 4 节点部署。
我们将使用它作为学习和测试目的的标准演示环境。

描述
沙盒由具有固定 IP 地址和身份的 4 个节点组成:
| ID | IP 地址 | NODE | PGSQL | INFRA | ETCD | MINIO |
|---|---|---|---|---|---|---|
| 1 | 10.10.10.10 |
meta |
pg-meta-1 |
infra-1 |
etcd-1 |
minio-1 |
| 2 | 10.10.10.11 |
node-1 |
pg-test-1 |
|||
| 3 | 10.10.10.12 |
node-2 |
pg-test-1 |
|||
| 4 | 10.10.10.13 |
node-3 |
pg-test-1 |
在 meta 节点上有一个主要的单例 PostgreSQL 集群:pg-meta,
它可以独立使用,还有一个可选的 L2 VIP 10.10.10.2 和集群 DNS pg-meta 绑定到它。
沙盒中还有三个额外的节点,组成一个 3 实例的 PostgreSQL HA 集群 pg-test。
有一个可选的 L2 VIP 10.10.10.3 和集群 DNS pg-test 绑定到集群领导者。
在 meta 节点上还有一个 1 节点的 etcd 集群和 1 节点的 minio 集群。
实现
您可以使用 Vagrant 创建本地沙盒,或使用 Terraform 创建云沙盒。
要使用本地 vagrant 模板:
要使用云 terraform 模板,请使用 spec/aliyun-full.tf 作为示例, 阿里云 4 节点沙盒模板适用于所有发行版和 amd/arm。
2.6 - Vagrant
Pigsty 需要 Linux 环境,您可以使用 Vagrant 轻松创建本地 linux 虚拟机。
您还需要一个虚拟机提供商,(比如笔记本电脑的 VirtualBox 和服务器的 libvirt)
入门
您可以在 macOS 上使用 homebrew 安装 vagrant、virtualbox、ansible:
您已准备就绪!使用 make 快捷方式创建虚拟机:
配置
您必须在启动前在 Vagrantfile 中定义虚拟机。
默认的 Vagrantfile 定义了一个 el9(bento/rockylinux-9)1 节点虚拟机,使用本地 virtualbox VM 提供商。
vagrant/spec/Vagrantfile
我们在 vagrant/spec 文件夹中有一系列预定义的 VM 规格
| 模板 | 节点 | 规格 | 注释 | 别名 |
|---|---|---|---|---|
| meta.rb | 1 节点 | 2c4g x 1 | 单节点元数据 | 开发箱 |
| dual.rb | 2 节点 | 1c2g x 2 | 双节点 | |
| trio.rb | 3 节点 | 1c2G x 3 | 三节点 | |
| full.rb | 4 节点 | 2c4g + 1c2g x 3 | 全功能 4 节点 | 沙盒 |
| simu.rb | 36 节点 | 杂项 | 生产环境模拟 | 模拟箱 |
| oss.rb | 3 节点 | 1c2g x 3 | 3 节点 OSS 构建环境 | |
| pro.rb | 5 节点 | 1c2g x 5 | 5 节点 PRO 构建环境 |
每个规格文件包含一个描述 VM 节点的 Specs 变量。例如,full.rb 包含:
您可以使用规格与 config 脚本,它将根据规格和环境变量(资源、镜像、vm 提供商等…)渲染 Vagrantfile。
您可以使用环境变量 VM_SCALE 扩展资源单位,默认值为 1。
例如,VM_SCALE=2 vagrant/config meta 将使 meta 规格的 cpu / mem 资源翻倍
快捷方式
配置后,您可以使用 vagrant up 命令创建虚拟机。
Pigsty 模板将使用您的 ~/.ssh/id_rsa[.pub] 作为 vagrant 置备的默认 ssh 密钥。
在开始之前确保您有有效的 ssh 密钥对,您可以通过以下方式生成一个:ssh-keygen -t rsa -b 2048
有一些包装 vagrant 命令的快捷方式,您可以使用它们来管理虚拟机。
版本
Pigsty 目前使用以下 vagrant 盒子进行测试:
它们并非都有 arm64 架构支持,所以在使用 Apple Silicon MacOS 时要注意。
您可以在 https://app.vagrantup.com/bento/boxes 上找到支持的 Box 镜像
注意事项
当使用较旧版本的 virtualbox 作为 vagrant 提供商时,需要额外设置才能使用默认的 10.x.x.x CIDR 作为仅主机网络:将其添加到 /etc/vbox/networks.conf
2.7 - Terraform
Terraform 是一个流行的 IaC 工具。您可以使用一个命令在公有云上创建虚拟机。
阿里云和 AWS 模板用作示例提供商。您可以将 terraform.tf 作为示例。
入门
您可以在 macOS 上使用 homebrew 安装 terraform
然后初始化 terraform 云提供商,调整 terraform.tf 配置文件并应用它:
打印公共 IP 地址:
AWS 设置
您必须设置 aws 配置和凭据才能使用 AWS 提供商。
有一个 AWS(Amazon Web Services)的贡献示例,但它没有得到积极维护。
- spec/aws-cn.tf : AWS 4 节点 CentOS7 环境
阿里云设置
您可以将您的阿里云凭据添加到环境文件中,例如 ~/.bash_profile
示例配置文件:
- spec/aliyun-meta.tf : 阿里云 1 元节点模板,适用于所有发行版和 amd/arm(默认)
- spec/aliyun-full.tf : 阿里云 4 节点沙盒模板,适用于所有发行版和 amd/arm。
- spec/aliyun-oss.tf : 阿里云 5 节点构建模板,适用于所有发行版和 amd/arm。
以下是阿里云中使用的示例 ECS 公共操作系统镜像:
| 发行版 | 镜像前缀 | 镜像前缀 |
|---|---|---|
| CentOS 7.9 | centos_7_9_x64 |
rockylinux_8_10_arm6 |
| Rocky 8.10 | rockylinux_8_10_x64 |
rockylinux_9_6_arm64 |
| Rocky 9.6 | rockylinux_9_5_x64 |
|
| Debian 11.11 | debian_11_11_x64 |
|
| Debian 12.11 | debian_12_11_x64 |
debian_12_11_arm64 |
| Ubuntu 20.04 | ubuntu_20_04_x64 |
|
| Ubuntu 22.04 | ubuntu_22_04_x64 |
ubuntu_22_04_arm64 |
| Ubuntu 24.04 | ubuntu_24_04_x64 |
ubuntu_24_04_arm64 |
| Anolis 8.8 | anolisos_8_9_x64 |
腾讯云设置
有一个腾讯云的贡献示例,但它没有得到积极维护。
- spec/tencentcloud.tf : 腾讯云 4 节点 CentOS7 环境
3 - 配置
Pigsty 将基础设施和数据库视为代码。 您可以使用声明式配置 清单 描述一切。
通常是 YAML 格式的 Ansible 清单:pigsty.yml。
但 CMDB 也可以用作动态清单。
configure 过程将根据您的环境和输入生成配置。
但这是 可选的:您始终可以直接编辑 pigsty.yml 文件,如 教程 所示。
并且有大量的 模板 供您参考。
Pigsty 的主配置文件,描述您的整个部署
根据您的输入和环境生成配置文件
根据业务需求规划您的部署
可用的配置模板和示例
生产部署的安全考虑和最佳实践
使用 PostgreSQL 作为 CMDB 而不是本地 YAML 配置文件
具有 HA、PITR、IaC、ACL、监控、连接池的 PostgreSQL 集群
用于可观测性的 Nginx、仓库、DNS、NTP、Prometheus 和 Grafana 技术栈
将节点注册到期望状态并监控它,以及 VIP、HAProxy
可靠的分布式共识存储 (DCS),为 PGSQL HA 提供支持
兼容 S3 的对象存储,可选备份存储
高性能内存缓存,可选数据结构服务器
3.1 - 清单
每个 pigsty 部署都有一个对应的配置 清单。
它可以存储在 YAML 格式的本地配置文件中,或从 CMDB 或任何 ansible 兼容格式动态生成。
Pigsty 默认使用一个单一的 YAML 配置文件,即 pigsty.yml,位于 pigsty 主目录中。
pigsty/
configure 脚本将根据您的环境和输入生成具有良好默认值的 pigsty.yml 文件脚手架,
但它是 可选的:您始终可以直接编辑 pigsty.yml 文件,如教程所示。
结构
清单由两部分组成:全局变量 和多个 组。您可以在 all.children 中定义新集群。
并使用全局变量描述基础设施:all.vars。它可能看起来像这样:
在 conf/ 下有大量示例,在 configure 期间也可以用作模板。
集群
每个 ansible 组可能代表一个集群,可以是节点集群、PostgreSQL 集群、Redis 集群、Etcd 集群或 Minio 集群等…
集群定义由两部分组成:hosts 和 vars。
您可以在 <cls>.hosts 中定义集群成员,并在 <cls>.vars 中使用参数描述集群。
这是一个 3 节点 HA PG 集群的示例:
集群级别的 vars 将覆盖全局变量,主机级别的 vars 将覆盖集群变量和全局变量。
参数
参数是定义部署中所有实体的键值对。 键是字符串名称,值可以是五种类型之一:布尔值、字符串、数字、数组或对象。
参数可以在不同级别设置,具有以下优先级:
| 级别 | 位置 | 描述 | 优先级 |
|---|---|---|---|
| CLI 参数 | 命令行 | 通过 -e CLI 参数 |
最高 (5) |
| 主机变量 | <group>.hosts.<host> |
特定于单个主机的参数 | 高 (4) |
| 组变量 | <group>.vars |
组/集群中主机共享的参数 | 中等 (3) |
| 全局变量 | all.vars |
所有主机共享的参数 | 低 (2) |
| 默认值 | <roles>/default/main.yml |
角色实现默认值 | 最低 (1) |
以下是关于参数优先级的一些示例:
- 使用 Playbook CLI 参数
-e pg_version=16覆盖 PostgreSQL 主版本 - 使用主机变量上的实例级别参数
pg_role覆盖 pg 实例角色 - 使用组变量上的集群级别参数
pg_cluster覆盖 pg 集群名称。 - 使用全局变量上的全局参数
node_ntp_servers指定全局 NTP 服务器 - 如果没有设置
pg_version,pigsty 将使用角色实现的默认值(默认为18)
除了强制性的 身份参数 外,每个参数都有一个适当的默认值;它们用作标识符,必须明确设置。
例如上述片段中的 pg_cluster、pg_role 和 pg_seq。
可用参数根据模块而异:
参考
Pigsty 有 290+ 个参数,查看模块参数了解详细信息。
| 模块 | 部分 | 描述 | 数量 |
|---|---|---|---|
INFRA |
META |
Pigsty 元数据 | 4 |
INFRA |
CA |
自签名 CA | 3 |
INFRA |
INFRA_ID |
基础设施门户和身份 | 2 |
INFRA |
REPO |
本地软件仓库 | 9 |
INFRA |
INFRA_PACKAGE |
基础设施包 | 2 |
INFRA |
NGINX |
Nginx Web 服务器 | 7 |
INFRA |
DNS |
DNSMASQ 名称服务器 | 3 |
INFRA |
PROMETHEUS |
Prometheus 堆栈 | 18 |
INFRA |
GRAFANA |
Grafana 堆栈 | 6 |
INFRA |
LOKI |
Loki 日志服务 | 4 |
NODE |
NODE_ID |
节点身份参数 | 5 |
NODE |
NODE_DNS |
节点域名和解析器 | 6 |
NODE |
NODE_PACKAGE |
节点仓库和包 | 5 |
NODE |
NODE_TUNE |
节点调优和内核功能 | 10 |
NODE |
NODE_ADMIN |
管理员用户和凭据 | 7 |
NODE |
NODE_TIME |
节点时区、NTP、Crontabs | 5 |
NODE |
NODE_VIP |
节点 Keepalived L2 VIP | 8 |
NODE |
HAPROXY |
HAProxy 负载均衡器 | 10 |
NODE |
NODE_EXPORTER |
节点监控代理 | 3 |
NODE |
PROMTAIL |
Promtail 日志代理 | 4 |
DOCKER |
DOCKER |
Docker 守护进程 | 4 |
ETCD |
ETCD |
ETCD DCS 集群 | 10 |
MINIO |
MINIO |
MINIO S3 对象存储 | 15 |
REDIS |
REDIS |
Redis 键值 NoSQL 缓存 | 20 |
PGSQL |
PG_ID |
PG 身份参数 | 11 |
PGSQL |
PG_BUSINESS |
PG 业务对象定义 | 12 |
PGSQL |
PG_INSTALL |
安装 PG 包和扩展 | 10 |
PGSQL |
PG_BOOTSTRAP |
使用 Patroni 初始化 HA PG 集群 | 35 |
PGSQL |
PG_PROVISION |
创建数据库内对象 | 9 |
PGSQL |
PG_BACKUP |
使用 pgBackRest 设置备份仓库 | 5 |
PGSQL |
PG_ACCESS |
暴露服务、绑定 VIP、DNS | 16 |
PGSQL |
PG_MONITOR |
收集 Postgres 的指标和日志 | 18 |
PGSQL |
PG_EXPORTER |
移除 Postgres 集群 | 4 |
3.2 - 配置
configure 脚本将根据您的环境和输入生成具有良好默认值的 pigsty.yml 配置文件清单。
它是 可选的,您可以直接编辑 pigsty.yml,如教程所示。
pigsty/
用法
除非指定了 -n|--non-interactive,否则 configure 脚本是一个交互式向导。
| 选项 | 描述 |
|---|---|
-c|--conf |
根据此参数从配置模板生成配置 |
-i|--ip |
用给定 IP 替换 IP 地址占位符 10.10.10.10 |
-v|--version |
指定 PostgreSQL 主版本号(13|14|15|16|17|18) |
-r|--region |
根据 region 设置上游仓库镜像(default|china|europe) |
-o|--output |
将生成的配置清单写入指定文件(默认为 pigsty.yml) |
-x|--proxy |
将当前代理环境写入配置 proxy_env |
-s|--skip |
跳过交互式向导并使用默认/参数值 |
-n|--non-interactive |
非交互模式 |
-p|--port |
指定 SSH 端口(仅在设置时使用) |
示例
configure 输出示例:
行为
如果指定了 -c|--conf <template>,它将从指定的模板生成配置文件。例如 meta、app/supa 等…
如果没有给出配置模板,它将使用默认的单节点配置模板 meta。
如果指定了 -i|--ip <ipaddr>,它将用给定的 IP 地址替换配置模板中的占位符 10.10.10.10。
否则,如果当前节点只有一个 IP 地址,将使用该地址。如果有多个 IP 地址,它会要求您手动输入当前节点的主 IP 地址。
如果指定了 -v|--version,它将使用指定的 PostgreSQL 主版本号,范围从 13 到 18。
如果没有指定版本,它会保持 pg_version 不变,通常默认回退到 18。
如果指定了 -r|--region,它将直接使用指定的区域。在无法访问 Google 服务的地方将使用 china 镜像。
如果指定了 -x|--proxy,它将把当前代理环境变量写入配置 proxy_env。
在安装期间将被重用。包括:HTTP_PROXY、HTTPS_PROXY、ALL_PROXY、NO_PROXY。
如果指定了 -s|--skip,它将跳过 IP 地址替换和 ssh sudo 权限检查
如果指定了 -n|--non-interactive,此脚本不会询问您任何事情,但您必须使用 -i|--ip <ipaddr> 明确指定主 IP 地址。
如果指定了 -p|--port,它将使用指定的 SSH 端口而不是默认的 22。
当您的本地 SSH 端口不是 22 时使用。
Pigsty 将使用 C.UTF-8 作为默认区域设置,如果:
- PostgreSQL 主版本 ≥ 17,具有内置本地提供程序(默认)
- 或者,您的系统支持
C.utf8/C.utf-8区域设置(locale -a)
否则,默认将使用本地 C。
3.3 - 教程
您可以手动从零开始编写 pigsty 配置文件,而不是使用 configure 生成配置。
这里是一个教程,帮助您从零开始构建复杂的配置文件清单。
最小配置
这是一个最小的工作配置示例,您必须告诉 pigsty 管理节点和基础设施节点的 IP。
这将在 10.10.10.10(更改为您的 IP 地址)上安装 INFRA 和 NODE 模块。
您将拥有一个完整的可观测性堆栈和节点监控。但数据库服务尚未运行。
PGSQL & ETCD
要提供 PostgreSQL 服务,您必须定义其他组并安装 PGSQL 和 ETCD 模块。
我们在这里添加了两个新组:etcd 和 pg-meta,它们定义了一个 1 节点 ETCD 集群和一个 1 节点 PGSQL 集群。
使用 ./install.yml 重新创建所有内容,或使用这些命令进行增量步骤:
PGSQL 模块依赖 ETCD 进行 HA 共识,因此请确保首先安装 ETCD 模块。
数据库和用户
现在我们要自定义我们的 postgres 数据库集群,包括用户、数据库和备份:
我们在 pg-meta 集群级别定义一些额外的详细信息:
pg_users:定义一个新用户dbuser_meta,密码为DBUser.Metapg_databases:定义一个新数据库meta,包含 pigsty CMDB 模式和vector扩展node_crontab:定义在每天凌晨 1 点进行完整备份的 crontab
我们不使用 ./install.yml 重新创建所有内容,而是增量地进行更改:
PG 版本和扩展
您可以安装不同的 PostgreSQL 主版本,以及 437 相应的扩展。
让我们安装 PostgreSQL 16(而不是默认的 18),包含 timescaledb、postgis 和 pgvector 扩展。
repo_extra_packages:下载timescaledb和postgis扩展。pg_libs:预加载timescaledb、pg_stat_statements、auto_explain扩展。
让我们重新下载缺失的包(PG 16 内核和扩展),删除旧集群,并重新创建它:
更多节点
我们可以向此部署添加 3 个更多节点。
或者逐个添加它们:
PGSQL HA
现在我们要添加一个新的数据库集群 pg-test,具有 3 节点 HA 设置:
Pigsty 的工作假设是每个节点上只有一个 postgres 实例。 不支持在单个节点上运行多个 postgres 实例。
Redis 启动
Pigsty 有可选的 Redis 支持,用作 PostgreSQL 前面的缓存。
Redis HA 设置需要集群模式或哨兵基础设施,请查看 Redis 配置了解详情。
MinIO 启动
Pigsty 有可选的 MinIO 支持,用作 PostgreSQL 的备份存储。
严肃的生产 MinIO 部署通常需要至少 4 个节点,每个节点有 4 个磁盘(4N/16D)
Docker 启动
在 infra 组上安装 docker:
运行 PgAdmin
查看 App: Pgadmin 了解如何使用 Pigsty 运行 pgAdmin 的详细信息。简短版本:
自托管 Supabase
查看 App: Supabase 了解如何使用 Pigsty 运行 Supabase 的详细信息。简短版本:
3.4 - 模板
这个目录 conf 包含 pigsty 配置模板,将在 configure 过程中使用。
配置模板可以使用 ./configure -c <conf> 指定,其中 conf 是到 conf 目录的相对路径(有或没有 .yml 后缀)。
例如 ~/pigsty/conf/rich.yml 可以指定为 rich
如果没有给出 -c|--conf,默认会自动选择单节点 meta 配置模板。
基本模板
这里是单节点模板,提供不同的功能和配置。
| 模板 | 节点 | 描述 |
|---|---|---|
meta.yml |
1 | 默认 1 节点配置,pgsql、infra、node、etcd,最小扩展 |
rich.yml |
1 | meta + minio + 所有扩展 |
slim.yml |
1 | meta - infra - node 监控,最小安装 |
fat.yml |
1 | 下载PG13-18 所有包,安装全部扩展 |
异种内核
使用异种 Postgres 内核分支:
| 模板 | 节点 | 描述 |
|---|---|---|
mssql.yml |
1 | WiltonDB 和 Babelfish,具有 MSSQL 协议兼容性 |
polar.yml |
1 | PolarDB for PostgreSQL,具有 Aurora RAC 特性 |
ivory.yml |
1 | IvorySQL 集群,具有 Oracle 兼容性 |
mysql.yml |
1 | Halo 集群,具有 MySQL 协议兼容性 |
mongo.yml |
1 | FerretDB 和 DocumentDB,具有 Mongo 协议兼容性 |
oriole.yml |
1 | OrioleDB 集群,具有 OLTP 增强 |
多节点
| 模板 | 节点 | 描述 |
|---|---|---|
dual.yml |
2 | 半高可用部署 |
trio.yml |
3 | 标准高可用部署 |
full.yml |
4 | 沙箱部署 |
safe.yml |
4 | 带延迟副本的安全增强 |
simu.yml |
36 | 生产模拟 |
应用程序
| 模板 | 描述 |
|---|---|
app/supa.yml |
启动 1 节点 supabase |
app/odoo.yml |
启动 odoo ERP 系统 |
app/dify.yml |
启动 dify AI 工作流系统 |
app/electric.yml |
启动 electric 同步引擎应用 |
演示模板
| 模板 | 描述 |
|---|---|
demo/el.yml |
EL 8/9 系统的包含所有默认参数的配置文件 |
demo/debian.yml |
debian/ubuntu 系统的包含所有默认参数的配置文件 |
demo/remote.yml |
监控远程 pgsql 集群或 RDS PG 的示例配置 |
demo/redis.yml |
redis 集群的示例配置 |
demo/minio.yml |
3 节点 minio 集群的示例配置 |
demo/demo.yml |
pigsty 公共演示 的配置文件 |
citus.yml |
Citus 集群示例:1 个协调器和 3 个数据节点(4 节点) |
构建模板
| 模板 | 描述 |
|---|---|
build/oss.yml |
EL 8、9、Debian 12 和 Ubuntu 22.04/24.04 OSS 的构建配置 |
build/pro.yml |
EL 7-9、Ubuntu、Debian pro 版本的构建配置 |
3.5 - 安全
Pigsty 已经提供了一个默认安全的数据库身份验证和访问控制模型。
只要您遵循以下安全最佳实践,它对大多数常见场景来说都足够强大。
机密性
文件
pigsty.yml包含非常敏感的信息,如密码- 限制只有管理员/DBA 用户才能访问管理员/基础设施节点
- 如果您使用 GitOps 管理 pigsty 配置,请限制对仓库的访问
- 默认生成在
~/pigsty/files/pki/ca/ca.key - 在安全的地方备份它,不要丢弃它!
- 还要考虑保护各种证书的其他私钥
密码
在严肃的部署中,始终更改这些默认密码
grafana_admin_password:pigstypg_admin_password:DBUser.DBApg_monitor_password:DBUser.Monitorpg_replication_password:DBUser.Replicatorpatroni_password:Patroni.APIhaproxy_admin_password:pigstyminio_secret_key:minioadmin
如果您使用 MinIO 作为备份存储,还要更改这些凭据:
- 更改
minio_users.[pgbackrest].secret_key的密码 - 更改 pgbackrest 引用:
pgbackrest_repo.minio.s3_key_secret
- 将
$lib/passwordcheck添加到pg_libs以强制执行密码策略。 - 更强版本:
passwordcheck_cracklib
- 检查
pgbackrest_repo定义repo_cipher_type - 默认为
cipher_type: aes-256-cbc
- 使用
pg_pwd_enc默认scram-sha-256而不是传统的md5 - 默认行为是
scram-sha-256,md5已被弃用
为了合规目的,您可以为每个用户设置过期日期。
不要忘记使用 pgsql-user.yml playbook 定期刷新这些过期日期
IP 地址
- 默认的
pg_listen地址是0.0.0.0,即所有 IPv4 地址。 - 考虑使用
pg_listen: '${ip},${vip},${lo}'绑定到特定地址以获得更好的安全性。
- Grafana/Prometheus 默认绑定到所有 IP 地址以便于使用。
- 您可以修改它们的绑定配置,使其监听 localhost/内网 IP 并通过 Nginx 暴露。
- Redis 服务器默认绑定到所有 IP 地址以便于使用。您可以更改
redis_bind_address以监听内网 IP。 - 您也可以通过安全组或防火墙规则来实现。
- 有一个安全增强配置模板:
safe.yml
- 这默认通过
restapi.allowlist进行限制
网络流量
- Nginx SSL 由
nginx_sslmode控制,默认为enable。 - Nginx 域名由
infra_portal..domain指定。
patroni_ssl_enabled默认禁用- 因为它会影响健康检查和 API 调用。
- 注意这是一个全局选项,您必须在部署前决定。
pgbouncer_sslmode默认为disable- 因为它对性能有显著影响。
完整性
一致性
- 使用
crit.yml模板为pg_conf将牺牲一些可用性以获得最佳一致性。
-
将
node_tune设置为crit以减少脏页比率。 -
启用数据校验和以检测静默数据损坏。
-
pg_checksum在 v3.7.0 中默认启用 -
这可以稍后启用,但需要完整的集群扫描/停止。
审计
- 在 pg 集群引导后启用
log_connections和log_disconnections。 - 审计传入会话;这在
crit.yml中默认启用。
误操作
再次运行 install.yml 将销毁(覆盖)整个部署!
在 v3.5 之前,它默认会覆盖现有的 PostgreSQL。
使用 pg_safeguard 避免误操作
可用性
冗余
- 您需要至少三个节点(容忍一个节点故障)才能实现生产级高可用性。
- 如果您只有两个节点,您可以容忍特定备用节点的故障。
- 如果您有一个节点,请使用外部 S3/MinIO 进行冷备份和 wal 归档存储。
- 在严肃的生产部署中使用多个基础设施节点(例如,1~3)
- 通常,2 ~ 3 对于大型生产部署来说是足够的。
- 使用足够的 etcd 成员并使用奇数(1,3,5,7)。
- 查看 ETCD 配置 了解详情。
容错
访问
- 不要通过固定 IP 地址直接访问数据库;使用 VIP、DNS、HAProxy 或它们的组合。
- Haproxy 将在故障转移/切换时为客户端处理流量控制。
3.6 - CMDB
Pigsty 允许您使用 数据库(CMDB) 作为动态配置源,而不是静态配置文件。 您可以使用内置的 PostgreSQL 作为配置清单进行配置管理。
使用 Postgres CMDB,配置被组织在结构化关系表中,可以使用 SQL 轻松查询和操作。 这允许与其他系统和工具更容易地集成。
工作原理
Ansible 允许您使用动态清单脚本来即时生成清单配置。
其想法是在 ansible.cfg 中用动态 shell 脚本 inventory.sh 替换静态 pigsty.yml
inventory.sh 的内容非常简单,它将查询 PostgreSQL CMDB 并检索配置。
bin/inventory_load:将 YAML 配置文件加载到 CMDB 中bin/inventory_cmdb:使用 CMDB 作为配置清单(meta.pigsty)bin/inventory_conf:使用 YAML 文件作为配置清单(pigsty.yml)
CMDB 模式
CMDB 基线模式随 pigsty 一起提供:files/cmdb.sql
大多数默认配置模板都将其用作示例基线。这意味着默认情况下可以使用它。
加载配置数据
CMDB 默认为空,使用 bin/inventory_load 脚本将配置文件加载到 CMDB 中。
不带参数运行 bin/inventory_load 将加载默认的 pigsty.yml 到默认 CMDB 中。
使用 -p 指定配置文件路径,使用 -d 指定 CMDB URL。
切换清单
您可以通过以下方式切换到动态 CMDB 清单:
这实际上将 ansible.cfg 中的 inventory 参数更改为使用 inventory.sh 脚本。
4 - 管理
使用 ansible 运行管理命令
Pigsty 中的内置剧本
grafana 仪表板介绍
prometheus 和 alertmanager 介绍
WebUI 服务的 Nginx 门户
管理本地 APT / YUM 仓库
使用本地 / 公共域名
使用自签名或真实 HTTPS 证书
具有 HA、PITR、IaC、ACL、监控、连接池的 PostgreSQL 集群
用于可观测性的 Nginx、本地仓库、DNS、NTP、可观测性技术栈
将节点注册到期望状态并监控它,以及 VIP、HAProxy
可靠的分布式共识存储 (DCS),为 PGSQL HA 提供支持
兼容 S3 的对象存储,可选备份存储
高性能内存缓存,可选数据结构服务器
4.1 - Ansible
Pigsty 使用 Ansible 实现管理控制器,这是一个开源自动化工具,用于以基础设施即代码(IaC)的方式管理大规模基础设施。 被运维人员广泛使用。
安装
Pigsty 将在引导期间尽力安装 ansible 及其依赖项。
但您始终可以手动安装它,它在大多数操作系统的官方仓库中都可用,如果使用 Pigsty,则可以用以下命令安装。
Playbooks 还需要一个弱依赖:jmespath python 包。
请注意,目前 EL10 EPEL 仓库尚未提供完整的 Ansible 包,Pigsty PGSQL EL10 仓库中补充了这个包。
macOS
Ansible 在 macOS 上也可用。您可以使用 Homebrew 在 Mac 上安装 Ansible。 并将其用作管理节点来管理远程云服务器。 如果您在云 VPS 上部署单节点 pigsty,这很方便。但不建议在生产环境中使用。
基础知识
了解 Ansible 知识有助于使用,但 并非必须。您只需要知道如何运行 Ansible 剧本 即可。 剧本(Playbook)是包含要执行的一系列任务的可执行 YAML 文件。
运行 ./node.yml playbook 本质上是执行 ansible-playbook node.yml 命令。剧本顶部的 hashbang 使其可直接执行。
您可以使用一些参数来精细控制剧本的执行:
以下 4 个参数 需要您注意,以便有效使用 ansible:
| 目的 | 参数 | 描述 |
|---|---|---|
| 对象 | -l|--limit <pattern> |
限制在特定组/主机/模式上的执行目标 |
| 任务 | -t|--tags <tags> |
只运行具有特定标签的任务 |
| 参数 | -e|--extra-vars <vars> |
额外的命令行参数 |
| 配置 | -i|--inventory <path> |
使用特定的清单文件 |
限制主机
playbook 的执行目标可以通过 -l|--limit <selector> 限制。
当尝试在特定主机/节点或组/集群上运行 playbooks 时,这很方便。
以下是主机限制的一些示例:
查看 ansible 文档中的所有详细信息:Patterns: targeting hosts and groups
缺少这个值可能很危险,因为大多数 playbooks 将在 all 主机上执行。请谨慎使用。
限制任务
执行任务可以通过 -t|--tags <tags> 控制。
如果指定,将执行具有给定标签的任务,而不是整个 playbook。
以下是一些任务限制示例:
要运行多个任务,指定多个标签并用逗号分隔:-t tag1,tag2:
额外变量
您可以使用 cli 参数在运行时覆盖配置参数,它具有最高优先级。
额外的命令行参数可以通过 -e|--extra-vars KEY=VALUE 传递,可以多次使用:
对于复杂参数,可以使用 JSON 字符串:
指定清单
默认配置文件是 pigsty 主目录中的 pigsty.yml。
您可以使用 -i <path> 参数指定不同的清单文件路径。
要永久更改默认配置文件,请更改 ansible.cfg 中的 inventory 参数。
4.2 - 剧本
Pigsty 使用幂等的 Ansible playbooks 实现管理控制器。
Playbooks 需要您的 PATH 中有 ansible-playbook 可执行文件。您必须安装 ansible 才能运行 playbooks。
这里是 Pigsty 中的内置 playbooks,您也可以添加自己的。
| 模块 | Playbook | 功能 |
|---|---|---|
| INFRA | install.yml |
在当前节点上一键安装 Pigsty |
| INFRA | infra.yml |
在基础设施节点上初始化 pigsty 基础设施 |
| INFRA | infra-rm.yml |
从基础设施节点移除基础设施组件 |
| INFRA | cache.yml |
从目标节点制作离线安装包 |
| INFRA | cert.yml |
使用 pigsty 自签名 CA 颁发证书(例如用于 pg 客户端) |
| NODE | node.yml |
为 pigsty 初始化节点,将节点调整到所需状态 |
| NODE | node-rm.yml |
从 pigsty 移除节点 |
| PGSQL | pgsql.yml |
初始化 HA PostgreSQL 集群,或添加新副本 |
| PGSQL | pgsql-rm.yml |
移除 PostgreSQL 集群,或移除副本 |
| PGSQL | pgsql-db.yml |
向现有 PostgreSQL 集群添加新业务数据库 |
| PGSQL | pgsql-user.yml |
向现有 PostgreSQL 集群添加新业务用户 |
| PGSQL | pgsql-pitr.yml |
在现有 PostgreSQL 集群上执行时间点恢复 |
| PGSQL | pgsql-monitor.yml |
使用本地导出器监控远程 postgres 实例 |
| PGSQL | pgsql-migration.yml |
为现有 PostgreSQL 生成迁移手册和脚本 |
| PGSQL | slim.yml |
安装最小组件的 Pigsty |
| REDIS | redis.yml |
初始化 redis 集群/节点/实例 |
| REDIS | redis-rm.yml |
移除 redis 集群/节点/实例 |
| ETCD | etcd.yml |
初始化 etcd 集群,或扩容新成员 |
| ETCD | etcd-rm.yml |
移除 etcd 集群与数据,或移除现有成员缩容 |
| MINIO | minio.yml |
初始化 minio 集群(pgbackrest 仓库可选) |
| MINIO | minio.yml |
移除 minio 集群与数据 |
| DOCKER | docker.yml |
在节点上安装 docker |
| DOCKER | app.yml |
使用 docker compose 安装应用程序 |
| FERRET | mongo.yml |
在节点上安装 Mongo/FerretDB |
部署
特殊的 playbook install.yml 将使用临时 playbooks 部署所有内容:
| Playbook | 命令 | 分组 | infra |
[nodes] |
etcd |
minio |
[pgsql] |
|---|---|---|---|---|---|---|---|
infra.yml |
./infra.yml |
-l infra |
✓ | ✓ | |||
node.yml |
./node.yml |
✓ | ✓ | ✓ | ✓ | ||
etcd.yml |
./etcd.yml |
-l etcd |
✓ | ||||
minio.yml |
./minio.yml |
-l minio |
✓ | ||||
pgsql.yml |
./pgsql.yml |
✓ |
4.3 - Nginx 入口
Pigsty 在基础设施节点上安装 Nginx 作为 Web 服务代理,默认使用端口 80/443。
全局参数 infra_portal 配置 Nginx 代理规则和上游服务。
Nginx 服务器配置通过 infra_portal 参数指定。用户声明要通过 Nginx 代理的所有域名,以及相应的上游服务器端点或本地目录路径。
基本示例
复杂示例
Playbook 配置
可以使用 Ansible playbook 重新配置 Nginx:
服务器
infra_portal 中的每个服务器记录支持以下配置选项:
核心参数
domain- 可选的代理域名endpoint- 上游服务地址(IP:PORT 或套接字路径)path- 静态内容的本地 Web 服务器根目录scheme- 协议规范(http/https/tcp/udp)
SSL/TLS 参数
certbot- 启用 Let’s Encrypt 证书管理cert- 自定义 SSL 证书文件路径key- 自定义 SSL 私钥文件路径
高级参数
conf- 自定义 Nginx 配置模板domains- 服务的附加域名index- 为静态内容启用目录列表log- 自定义日志文件配置websocket- 为实时应用启用 WebSocket 支持
参数使用示例
使用域名
DNS 解析方法
- 公共互联网域名 通过 DNS 提供商
- 内部网络 DNS 服务器
- 本地
/etc/hosts文件修改
推荐的本地配置
对于本地开发和测试,请在您的 /etc/hosts 文件中添加条目:
将 <your_public_ip_address> 替换为您的实际管理节点 IP 地址。
HTTPS 配置
通过 nginx_sslmode 参数配置 HTTPS 访问,支持以下选项:
disabled- 仅 HTTP,无 SSLself-signed- 使用自签名证书(默认)provided- 使用提供的证书letsencrypt- 使用 Let’s Encrypt 证书
证书管理
HTTPS 访问方法
对于自签名证书,您可以:
- 在浏览器中信任自签名 CA
- 使用浏览器安全绕过选项(在 Chrome 中输入
thisisunsafe) - 为生产环境配置适当的 CA 签名证书
服务访问示例
使用默认配置,服务可通过以下方式访问:
- 主页:
http://h.pigsty或https://h.pigsty - Grafana 仪表板:
http://g.pigsty或https://g.pigsty - Prometheus 指标:
http://p.pigsty或https://p.pigsty - Alertmanager:
http://a.pigsty或https://a.pigsty
最佳实践
- 使用域名 访问服务,而不是直接使用 IP:PORT
- 配置 DNS 解析 或适当更新本地 hosts 文件
- 为需要的服务启用 WebSocket 支持(如 Grafana、Jupyter)
- 在生产环境中使用 HTTPS 并配置适当的证书
- 合理组织服务 使用有意义的子域名命名
- 监控 Let’s Encrypt 证书过期时间
- 通过 Nginx 集中管理 Web 服务代理 以获得更好的管理体验
- 使用静态文件服务 用于文档和仓库浏览
4.4 - 本地软件源
快速开始
如果您想向本地仓库添加一些包,请将它们添加到:
repo_packages用于默认包repo_extra_packages用于额外包
然后运行 make repo 快捷方式来更新本地仓库和节点仓库缓存:
使用别名
您可以使用别名来指定一组包,查看 roles/node_id/vars/<os>.<arch>.yml 了解可用的别名:
EL
| 发行版 | x86_64 | aarch64 |
|---|---|---|
| EL 7 | el7.x86_64.yml |
- |
| EL 8 | el8.x86_64.yml |
el8.aarch64.yml |
| EL 9 | el9.x86_64.yml |
el9.aarch64.yml |
| EL 10 | el10.x86_64.yml |
el10.aarch64.yml |
Debian
| 发行版 | x86_64 | aarch64 |
|---|---|---|
| Debian 11 | d11.x86_64.yml |
- |
| Debian 12 | d12.x86_64.yml |
d12.aarch64.yml |
| Debian 13 | d13.x86_64.yml |
d13.aarch64.yml |
| Ubuntu 22.04 | u22.x86_64.yml |
u22.aarch64.yml |
| Ubuntu 24.04 | u24.x86_64.yml |
u24.aarch64.yml |
参考
使用以下 Playbook 任务来管理基础设施节点上的本地软件包仓库(YUM/APT):
常用命令:
4.5 - DNS 域名
安装 Pigsty 后,用户可以通过 IP + 端口访问大多数基础设施组件的 Web 界面。
假设您的节点内部 IP 是 10.10.10.10,那么默认情况下:
- http://10.10.10.10:3000 是 Grafana 仪表板(您的日常指挥中心)
- http://10.10.10.10:9058 是 Prometheus TSDB 控制台
- http://10.10.10.10:9059 是 AlertManager 控制台
- http://10.10.10.10 是 Nginx HTTP 入口点(默认端口 80)
虽然 IP + 端口对于开发/测试环境来说工作得很好(嘿,我们有时都很懒!),但对于更严肃的部署,我强烈建议通过域名访问这些服务。
使用域名有许多优势,不需要额外费用,只需要一个简单的配置行。
让我们深入了解这些主题:
TL;DR
将此静态解析记录添加到您的 /etc/hosts(Linux/MacOS)或 C:\Windows\System32\drivers\etc\hosts(Windows):
将占位符 IP
10.10.10.10替换为您的 Pigsty 节点的 IP(公共/私有,只要可达即可)。如果您在
infra_portal中修改了默认域名,请用您的自定义域名替换它们。
为什么使用域名?
Pigsty 强烈建议使用域名而不是直接 IP+端口访问,原因如下:
- 域名更容易记住(除非您是机器人 🤖)
- 更灵活 — 指向不同的 IP 而无需更改配置
- 将所有服务整合在 Nginx 后面,以获得更好的管理、审计和减少攻击面
- 启用 HTTPS 加密以防止流量窃听
- 在中国,对未注册域名的 HTTP 访问会被 ISP 劫持,但 HTTPS 不会
- 通过 Nginx 代理访问绑定到 127.0.0.1 或内部 Docker 网络的服务
Pigsty 默认使用内部静态域名 — 只需在本地添加 DNS 记录,无需注册真实域名。
对于面向互联网的部署,考虑使用带有免费 HTTPS 证书的真实域名。
DNS 工作原理
如果您不熟悉 HTTP/DNS 协议,这里是关于 Nginx 如何在单个端口(80 + HTTPS 443)上为多个域名提供服务的快速入门:
DNS 协议
- 当客户端(例如浏览器)访问 https://a.pigsty.cc 时,它首先通过 DNS 解析域名
- 解析可以使用本地静态文件、内部 DNS 服务器或公共 DNS
- DNS 返回一个 IP - 多个域名可以指向同一个 IP
- 客户端只需要知道:向哪个 IP 发送请求
HTTP 协议
- HTTP 请求(HTTP/1.1+)包含带有请求域名的 Host 标头
- 这个 Host 标头是关键的 — HTTP/1.1 规范要求客户端包含它
- Nginx 使用 Host 标头匹配并将请求路由到不同的站点
- 因此,一个端口可以根据 Host 值提供不同的内容
Pigsty 默认域名
Pigsty 默认配置这四个内部域名:
| 域名 | 名称 | 端口 | 组件 | 描述 |
|---|---|---|---|---|
h.pigsty |
home |
80/443 | Nginx | 默认服务器,本地仓库 |
g.pigsty |
grafana |
3000 | Grafana | 监控和可视化 |
p.pigsty |
prometheus |
9058 | Prometheus | 时间序列数据库 |
a.pigsty |
alertmanager |
9059 | AlertManager | 警报聚合和路由 |
不用担心 — 只需要一行配置! 🚀
本地静态解析
假设 Pigsty 的内部 IP 是 10.10.10.10,将此添加到您的客户端机器的 hosts 文件:
添加解析
客户端机器是您浏览 Pigsty 服务的地方 — 您的笔记本电脑、台式机、VM 等。
对于 Linux / macOS:sudo nano /etc/hosts 对于 Windows:以管理员身份运行记事本,编辑 C:\Windows\System32\drivers\etc\hosts
添加记录后,您可以通过这些域名访问 Pigsty Web 服务。
自定义域名
不喜欢默认域名?在安装前在 infra_portal 中修改它们:
然后相应地更新您的 hosts 文件:
使用您喜欢的任何域名 — 真实的或虚构的 - 只要它通过本地、内部或公共 DNS 解析到 Pigsty 的 IP。
附加记录
运行其他 Pigsty 扩展?也添加这些记录:
公共 IP 解析
对于云部署,解析到您的公共 IP,而不是内部 IP。
如果您的服务器有互联网访问,它通常有两个网卡 - 一个用于互联网(公共 IP),一个用于内部网络(私有 IP)。
示例:如果您的云服务器的公共 IP 是 1.2.3.4,VPC IP 是 10.10.10.10:
内部动态解析
希望您的办公室同事通过域名访问 Pigsty?使用内部动态解析。
最简单的方法:请您的网络管理员将 DNS 记录添加到您的内部 DNS 服务器。
使用内部 DNS
如果您的内部 DNS 服务器是 192.168.1.1,在 Linux/MacOS 上编辑 /etc/resolv.conf:
在 Windows 上:网络设置 → 网络适配器 → TCP/IPv4 属性 → DNS 配置
测试内部 DNS 解析:
使用 Pigsty 的 DNS
Pigsty 基础设施模块 包括 DNS 服务器(端口 53)。
⚠️ 中国部署警告:公共服务器通常不能运行 DNS 服务(端口 53)!
本地 HTTPS 访问
对 Pigsty 的 HTTP 访问显示"不安全" - 它是明文的,容易受到 MITM 攻击。
默认情况下,Pigsty 使用本地自签名 CA 为所有 Nginx 虚拟主机颁发证书。
HTTPS 访问显示"证书错误" - 这些是自签名证书,不是来自受信任的 CA。
您的选择:
- 忽略它,使用 HTTP 或 IP+端口(反正是内部的,对吧?😅)
- 使用 HTTPS,点击"高级 → 仍然继续"
- Chrome 用户:在警告时输入
thisisunsafe(魔法词!) - 通过将 Pigsty 的 CA 添加到您的浏览器/操作系统来信任自签名证书
- 为 Pigsty 使用真实的 CA 证书
- 使用带有适当 HTTPS 证书的真实域名
对于需要 HTTPS 但不想持续警告的内部访问,信任 Pigsty 的自签名 CA。
对于生产环境,我们建议使用公共域名通过 certbot 获取免费的 HTTPS 证书。
信任自签名 CA
Pigsty 在初始化期间在管理节点源目录(~/pigsty)中生成自签名 CA。
要使用 HTTPS,请将 Pigsty 的 CA 证书分发到客户端信任存储(或使用真实的 CA — 昂贵!)。
Pigsty 管理的 Linux 节点自动信任 CA。对于其他 Linux 系统:
- 信任 CA 证书
- EL
- Debian / Ubuntu
MacOS:双击 ca.crt,添加到钥匙串,搜索 pigsty-ca,打开并"信任"根证书。
Windows:将 ca.crt 添加到"受信任的根证书颁发机构"。
信任 Pigsty 的 CA 后,不再有"不受信任的证书"警告! 🎉
公共域名解析
使用 DNS 提供商,如 Cloudflare、Godaddy、阿里云或腾讯云 DNSPod。
需要购买域名 - 基本域名费用约为每年 10 美元。
通过提供商的控制台/API 添加 DNS 记录,将域名指向 Pigsty 的公共 IP。
示例:使用域名 pigsty.xxx,添加通配符 * A 记录或单独的 A 记录:
- h.pigsty.xxx → 1.2.3.4
- a.pigsty.xxx → 1.2.3.4
- p.pigsty.xxx → 1.2.3.4
- g.pigsty.xxx → 1.2.3.4
Pigsty 包括Certbot 支持以获取免费的 HTTPS 证书(每 3 个月续订一次)。
进一步阅读
有关更高级的配置,请查看 Pigsty 文档中的 DNS、Nginx 和 HTTPS 证书管理。
4.6 - SSL 证书
Pigsty 在基础设施节点上预装了 Certbot,使您能够为 Nginx 服务器和公共域名获取免费的 Let’s Encrypt HTTPS 证书。
前提条件
在获取 Let’s Encrypt 证书之前,请确保您拥有:
- 一个公共域名
- 指向您服务器公共 IP 的 DNS 记录
- 正确配置了您的域名的 Nginx
步骤 1:确定哪些域名需要证书
首先,通过在您的 infra_portal 中配置域名来确定哪些上游服务需要公共证书:
步骤 2:将域名指向您的服务器
配置 DNS A 记录,将所有域名指向您服务器的公共 IP 地址:
验证您的域名是否正确指向您的服务器:
步骤 3:使用 Certbot 请求证书
使用 Certbot 为您的域名请求 Let’s Encrypt 证书:
交互式方法(首次)
在首次运行期间,您将被提示:
- 提供用于 Let’s Encrypt 账户注册的电子邮件地址
- 同意服务条款
- 选择是否与电子前哨基金会分享您的电子邮件
非交互式方法
对于自动化部署,使用非交互式模式:
多个域名的示例:
步骤 4:更新 Nginx 配置
成功获取证书后,通过添加 certbot: true 参数来更新您的 infra_portal 配置以使用它们:
然后重新生成 Nginx 配置并重启服务:
步骤 5:配置证书续期
Let’s Encrypt 证书每 90 天过期一次。设置自动续期以确保持续的 HTTPS 覆盖:
测试续期(试运行)
在设置自动续期之前,测试流程:
手动续期
手动续期所有证书:
续期特定证书:
自动续期
设置每月自动续期的 cron 作业:
或者,如果可用,使用 systemd 定时器:
证书管理命令
以下是管理证书的有用 Certbot 命令:
故障排除
常见问题
- 域名不可访问:确保 DNS 记录正确配置并已传播
- 端口 80 被阻塞:Let’s Encrypt 需要端口 80 进行域名验证
- 速率限制:Let’s Encrypt 有速率限制;避免快速请求太多证书
- 防火墙问题:确保防火墙中端口 80 和 443 是开放的
验证命令
最佳实践
- 在适当时使用通配符证书用于多个子域名
- 使用自动化警报监控证书过期
- 定期使用试运行测试续期流程
- 保留证书文件的备份
- 在生产部署前使用暂存环境进行测试
- 为证书过期日期设置监控
- 为团队参考记录您的域名配置
安全考虑
- 保护私钥:确保证书私钥具有受限权限
- 使用强 SSL 配置:使用现代 SSL 设置配置 Nginx
- 启用 HTTP 到 HTTPS 重定向:强制安全连接
- 实施 HSTS:添加 HTTP 严格传输安全标头
- 定期安全审计:使用 SSL Labs 等工具测试您的 SSL 配置
5 - 关于
Pigsty (/ˈpɪɡ staɪ/) 是一个开箱即用的开源 PostgreSQL 发行版, 也是一个本地优先的 RDS 替代方案。
Pigsty 由 冯若航 (@Vonng) 与社区创建
Pigsty 在 AGPLv3 许可证下开源,有一些豁免
加入我们的用户群和论坛,从社区获得支持
从专家获得专业支持,企业用例的专业支持和订阅计划
Pigsty 的发布说明和更改日志
最新事件、会议、聚会、办公时间等
Pigsty 的新功能、改进和未来计划
安全漏洞、错误缺陷、修复公告
5.1 - 作者
关于作者
我是冯若航,别名 @Vonng,Pigsty 的作者。 Pigsty 的绝大部分的代码由我 一人开发,个别特性由 社区贡献。
软件领域依然存在个人英雄主义,独一无二的个体才能够创造出独一无二的作品来 —— 我希望 Pigsty 能够成为这样的作品。 如果您对我感兴趣,这里是我的个人主页:https://vonng.com/
历史起源
Pigsty 项目始于 2018 ~ 2019 年,起源于 探探。 探探是一个互联网交友 App —— 中国的 Tinder,现已被陌陌收购。 探探这家公司是一个北欧 Style 的创业公司,有着一个瑞典工程师初创团队。
探探在技术上极有品味,使用 PostgreSQL 与 Go 作为核心技术栈。 探探整个系统架构参照了 Instagram ,一切围绕 PostgreSQL 数据库设计。 直到几百万日活,几百万 TPS,几百 TB 数据的量级下,数据组件 只用了 PostgreSQL。 几乎所有的业务逻辑都使用 PG 存储过程实现 —— 甚至包括 100ms 的推荐算法!
探探这种深度使用 PostgreSQL 特性的非典型研发模式,对工程师与DBA的水平提出了极高的要求。 而 Pigsty ,就是我们用这种真实世界的大规模,高标准数据库集群场景打磨出的开源项目 —— 沉淀着我们作为顶尖 PostgreSQL 专家的经验与最佳实践。
发展过程
在最开始,Pigsty 并没有现在这样的愿景、目标与版图。而是旨在提供一个供我们自己使用的 PostgreSQL 监控系统。 我们调研了市面上所有的方案,开源的、商业的、云的,datadog, pgwatch,…… ,没有一个能满足我们对于可观测性的需求。 因此我们决定亲自动手,基于 Grafana 与 Prometheus 自己动手打造一个,这就是 Pigsty 的前身与雏形。 Pigsty 作为监控系统的效果相当惊艳,帮助我们解决了无数管理问题。
随后,研发人员希望在本地的开发机上也有这样的监控系统,于是我们使用 Ansible 编写了置备剧本,将这套系统从一次性建设任务转变为了可重复使用,可复制的软件。 新的功能允许用户使用 Vagrant 和 Terraform,用 Infra as Code 的方式快速拉起本地 DevBox 开发机,或生产环境服务器,并自动完成 PostgreSQL 与监控系统的部署。
接下来,我们重新设计了生产环境的 PostgreSQL 架构,引入了 Patroni 与 pgBackRest 解决了数据库的 高可用 与 时间点恢复 问题。 开发了基于逻辑复制的不停机 迁移 方案,通过蓝绿部署将生产环境两百套数据库集群滚动升级至最新大版本。并将这些能力引入 Pigsty 中。
Pigsty 是我们做给自己使用的软件,我们自己作为甲方用户,非常清楚自己需要什么,也不会在自己的需求上偷懒。 “Eat dog food”最大的好处就是,我们自己既是开发者也更是用户 —— 因此非常了解自己需要什么,也不会在自己的需求上偷懒。
我们解决了一个又一个的问题,并将解决方案沉淀到 Pigsty 里。Pigsty 的定位,也从一个监控系统,逐渐发展成为一个开箱即用的 PostgreSQL 数据库发行版。 因此在这一阶段,我们决定将 Pigsty 对外开源,并开始了一系列的技术分享与宣传,也开始有各行各业的外部用户使用起 Pigsty 并提出反馈意见。
全职创业
在 2022 年,Pigsty 项目获得了由陆奇博士发起的奇绩创坛的种子轮投资,我得以全职出来做这件事情。
作为一个开源项目,Pigsty 的发展相当不赖,在全职创业这两年里,Pigsty 在 Github 上的 Star 数从的 几百翻了几番到了 3700;上了 HN 头条推荐,增长开始滚起雪球; 在 OSSRank 开源榜单 中,Pigsty 在 PostgreSQL 生态项目中排名第 22 名,在中国人主导的项目里是最靠前的。
从前 Pigsty 只能跑在 CentOS 7 上,现今已经基本覆盖了所有主流 Linux 发行版 (EL, Debian, Ubuntu)。支持的 PG 大版本覆盖 12 - 18,维护,收录整合了PG生态中的 437 扩展插件。 其中,我本人维护了这里超过一半的扩展插件,并提供开箱即用的 RPM/DEB 包,算上 Pigsty 本身,“基于开源,回馈开源”,算是为 PG 生态做一些贡献。
Pigsty 的定位,也在不断发展的过程中,从一个 PostgreSQL 数据库发行版,进一步扩展到了 开源云数据库替代。它真正对标的是云厂商的整个云数据库品牌。
公有云的反叛者
AWS、Azure、GCP、Aliyun 等公有云厂商为初创企业提供了许多便利,但它们是闭源的,并迫使用户以高额费用租赁基础资源。
我们认为,优秀的数据库服务,应该和优秀的数据库内核一样,普及到每一个用户手中,而不是必须花费高昂的代价去向赛博领主租赁。
云计算的敏捷与弹性都很好,但它应该是自由、开源、普惠、本地优先的 —— 我们认为云计算宇宙中需要一个代表开源价值观的解决方案,在不牺牲云带来好处的前提下,将基础设施的控制权交还给用户。
因此,我们也在引领着一场 下云的运动与战役,作为公有云的反叛者,来重塑这个行业的价值观。
我们的愿景
我希望,未来的世界人人都有自由使用优秀服务的事实权利,而不是只能被圈养在几个赛博领主公有云巨头厂商的地盘上当赛博佃户甚至赛博农奴。
这正是 Pigsty要做的事 —— 一个更好的,开源免费的RDS替代。让用户能够在任何地方(包括云服务器)上,一键拉起有比云RDS更好的数据库服务。
Pigsty 是是对 PostgreSQL 的彻底补完,更是对云数据库的辛辣嘲讽。它本意是“猪圈”,但更是 Postgres In Great STYle 的缩写,即“全盛状态下的 PostgreSQL”。
Pigsty 本身是一款完全开源免费的软件,我们纯粹靠提供 咨询与服务 来维持运营 建设良好的系统也许跑个几年都不会遇到需要 ”兜底“ 的问题,但数据库的问题一但出现就不是小问题。 很多时候,专家的经验更是能够一言化腐朽为神奇,而我们为有需求的客户提供这样的服务 —— 我们认为这是一种更加公正、合理、可持续的模式。
5.2 - 开源协议
摘要
Pigsty 使用 AGPLv3 开源协议,这是一种强制性的 Copyleft 许可证。
如果您通过网络分发、托管或创建 Pigsty 软件的 衍生作品, GNU AGPLv3 许可证要求您也按照相同的 GNU AGPL v3 许可证分发组合作品的完整、相应的源代码。 无论您是否修改了 Pigsty ,此要求都适用。
本协议授权您:
- 商用
- 修改
- 分发
- 专利授权
- 私人使用
本协议不提供:
- 商标使用权
- 责任与担保
本协议的条件:
- 包含本许可证并显著声明
- 不得修改其开源状态
- 公开源代码
- 通过网络使用属于分发的一种
- 使用同样的协议开源
提示:本产品自动化安装了第三方组件(Grafana, MinIO,可选),这些组件遵循 AGPLv3 许可,用户在通过网络分发这些组件的修改版时需遵循相应义务。
豁免条款
Pigsty 采用了 AGPLv3 许可证,但对于普通终端用户(即:公有云厂商,数据库厂商除外的用户),执行等效 Apache 2.0 许可证。
普通终端用户可以将 AGPLv3 用于商业目的,提供服务,二次开发,而无需担心许可证问题。 即使普通终端用户对 Pigsty 进行二次开发,并违反了 AGPL 协议没有开源衍生作品, 只要用途在合理范围内,我们不会对此进行追索,并豁免用户的相关开源义务。 在 订阅支持 中,我们可以提供关于责任豁免的书面承诺。
我们支持并欢迎遵循 AGPLv3 协议的 PostgreSQL 服务提供商 基于 Pigsty 交付, 并提供自己的付费咨询与支持服务,并将二次开发成果回馈上游社区主干。 请注意,PIGSTY® 是注册商标,在提供服务与咨询时,您应当尊重 PIGSTY 的知识产权,包括但不限于商标权与著作权。 我们提供 OEM 合作方案,详情请参考 商业支持。
为何使用AGPLv3
AGPLv3 的精神实质是确保 “软件自由”:AGPLv3 不影响普通用户的使用:因为使用并不是一种 “发布”,您无需操心使用 Pigsty 的业务代码是否需要开源。 当您将 Pigsty 或 Pigsty 的修改作为软件/服务的全部或一部分对外“发布”时,您才需要考虑到 AGPLv3 的约束。以下是 GNU 官方对 GPL 相关问题的解答:
- 在组织或公司内部使用是不是“发布”?
- GPL是否要求修改版的源代码公开?
- GPL是否允许销售软件的拷贝来赚钱?
- 我写了一个GPL程序的插件,我要发布我的插件的话,我要使用的许可证有什么强制要求?
- 为什么要专门写一个GNU Affero GPLv3作为单独的许可证?
- 在GPLv3和AGPLv3中,“不承担本许可证的任何其他条款”是什么意思?
- 在AGPLv3中,什么应该算作是“通过计算机网络和该软件远程交互?”
- 如果一个网络客户端程序按照AGPLv3发布,那么它是否必须能够向其交互的服务器提供源代码?
- 对于运行代理服务器的AGPL软件,我们怎样才能为和这些程序交互的用户提供源代码?
BOM清单
本项目所依赖或相关的核心开源软件及其开源协议。437 个 PostgreSQL 扩展插件的许可证请参考 PG扩展列表。
| 模块 | 软件名称 | 许可证 | 必要性,用途与说明 | 必要性 |
|---|---|---|---|---|
| PGSQL | PostgreSQL | PostgreSQL License | PostgreSQL 内核 | 必选 |
| PGSQL | patroni | MIT License | 提供 PostgreSQL 高可用能力 | 必选 |
| ETCD | etcd | Apache License 2.0 | 提供高可用共识与分布式配置存储 | 必选 |
| INFRA | Ansible | GPLv3 | 管控工具,执行剧本,发起管控命令 | 必选 |
| INFRA | Nginx | BSD-2 | 暴露Web系统界面,提供本地软件源 | 必选 |
| PGSQL | pgbackrest | MIT License | 提供 PITR 备份/恢复管理能力 | 建议 |
| PGSQL | pgbouncer | ISC License | 提供 PostgreSQL 连接池化能力 | 建议 |
| PGSQL | vip-manager | BSD 2-Clause License | 提供自动将 L2 VIP 绑定到 PG 集群主库的能力 | 建议 |
| PGSQL | pg_exporter | Apache License 2.0 | 提供监控 PostgreSQL 与 PgBouncer 的能力 | 建议 |
| NODE | node_exporter | Apache License 2.0 | 提供主机节点监控能力 | 建议 |
| NODE | haproxy | HAPROXY’s License (GPLv2) | 提供负载均衡,对外暴露服务的能力 | 建议 |
| INFRA | Grafana | AGPLv3 | 提供数据库可视化平台 | 建议 |
| INFRA | Prometheus Stack | Apache License 2.0 | 提供监控时序数据库存储,指标采集与监控告警 | 建议 |
| INFRA | Loki | AGPLv3 | 提供集中式日志收集存储查询平台 | 建议 |
| INFRA | DNSMASQ | GPLv2 / GPLv3 | 提供DNS解析服务,提供集群名查询能力 | 建议 |
| MINIO | MinIO | AGPLv3 | 提供S3兼容的对象存储服务 | 可选 |
| NODE | keepalived | MIT License | 提供绑定在节点集群上的 VIP | 可选 |
| REDIS | Redis | Redis License (BSD-3) | 搭配PG使用的缓存服务,锁死版本 7.2.6 | 可选 |
| REDIS | Redis Exporter | MIT License | 提供 Redis 监控能力 | 可选 |
| MONGO | FerretDB | Apache License 2.0 | 提供基于PG的MongoDB兼容能力 | 可选 |
| DOCKER | docker-ce | Apache License 2.0 | 提供容器管理能力 | 可选 |
| CLOUD | SealOS | Apache License 2.0 | 提供快速部署,复制,打包K8S集群的能力 | 可选 |
| DUCKDB | DuckDB | MIT | 提供简单易用的高性能分析能力 | 可选 |
| External | Vagrant | Business Source License 1.1 | 拉起本地测试环境虚拟机 | 按需 |
| External | Terraform | Business Source License 1.1 | 一键申请云资源用于部署 | 按需 |
| External | Virtualbox | GPLv2 | 虚拟机管理软件 | 按需 |
必要性等级说明:
- 必选:提供 Pigsty 关键性核心能力,不提供关闭停用选项
- 建议:Pigsty 默认启用的组件,可以通过配置选项停用
- 可选:Pigsty 默认会下载但不启用的组件,可通过配置启用
- 按需:按需使用的工具,可按需配置下载并启用
协议原文
5.3 - 社区
Pigsty 社区已经提供免费的微信/Discord/Telegram 问答答疑时间,我们也很乐意为我们的支持者提供更多免费的增值服务。
GitHub 总部
如果您觉得 Pigsty 有用,请考虑在 GitHub 上给我们一个 star。 欢迎提交 Issues、PRs 和讨论。
Pigsty 的源代码仓库
GitHub 上的 `pgsty` 组织是 Pigsty 的官方主页。
创建新问题和报告错误,提交功能请求
提问,分享想法,从社区获得帮助
社区
我们有 7 个活跃的微信用户群,约有 2700+ 用户,加入我们的讨论!
Pigsty 的 GitHub 讨论论坛
搜索 `pigsty-cc` 并加入用户群组。
Pigsty 的 Telegram 群组:gV9zfZraNPM3YjFh
Pigsty 的 Discord 服务器:j5pG8qfKxU
您也可以通过邮件联系我:[email protected]
寻求帮助
您可以向社区寻求帮助,提供足够信息和上下文的问题更容易得到帮助。
也可以考虑使用我们的 ChatGPT QA 代理 或 专业服务。
发生了什么? (必需)
Pigsty 版本和操作系统版本 (必需)
如果您使用云提供商,请告诉我们您使用的是哪个云提供商以及什么操作系统镜像。
如果您在安装裸机操作系统后自定义和修改了环境,或者在 WAN 中有特定的安全规则和防火墙配置,请在故障排除时也告诉我们。
Pigsty 配置文件 (必需)
不要忘记删除敏感信息,如密码等…
您期望发生什么?
请描述您期望发生什么。
如何重现它?
请尽可能详细地告诉我们如何重现该问题。
监控截图
如果您正在使用 pigsty 监控系统,您可以在此处粘贴相关截图。
错误日志
请复制并粘贴任何相关的日志输出。不要粘贴类似"无法启动 xxx 服务"的内容
- Syslog:
/var/log/messages(RHEL)或/var/log/syslog(Debian) - Postgres:
/pg/log/postgres/* - Patroni:
/pg/log/patroni/* - Pgbouncer:
/pg/log/pgbouncer/* - Pgbackrest:
/pg/log/pgbackrest/*
您是否尝试过问题和 FAQ?
我们还需要知道什么?
您提供的信息和上下文越多,我们就越有可能帮助您解决问题。
5.4 - 新闻
最近新闻
2025-11-29
闪电演讲:为什么 PostgreSQL 是 AI 时代数据库之王?
闪电演讲:身陷囹圄:PostgreSQL 安装与交付最佳实践
第八届中国PG生态大会 中国杭州
2025-05-16
Giving a lightning talk here at #PGConfdev is Ruohang Feng, founder at Pigsty, presenting on “Extension Delivery: Make your PG Ext accessible to users” —— PGConf.Dev X
Lighting Talks, PGConf.Dev 2025, Montreal, Canada
2025-05-12
Youtube: https://www.youtube.com/live/cucQOOAahNY (Start @ 4:50:20)
2025-05-12: PGEXT.DAY, PGCon.Dev 2025, Montreal
Before
- Pigsty 3.7.0 发布!
- Pigsty v3.7.0 发布!
- Pigsty 3.6.1 发布!
- Pigsty v3.6.1 发布!
- Pigsty 3.6.0 发布!
- Pigsty v3.6.0 发布!
- Pigsty 3.5.0 发布!
- Pigsty v3.5.0 发布!
- Pigsty 3.4.1 发布!
- Pigsty v3.4.1 发布!OpenHalo & OrioleDB,MySQL兼容,pgAdmin改进
- 介绍播客:MySQL兼容与整体改进,OrioleDB
- Pigsty 3.4.0 发布!
- Pigsty v3.4.0 发布!备份改进,自动证书,AGE,Ivory 全平台,本地化,架构与参数改进
- 社区新闻 Pigsty v3.4 Released, PG RDS with MySQL Compatibility
- Postgres Weekly #597
- Pigsty 3.3.0 发布!
- Pigsty v3.3.0 404个扩展,Nginx定制,应用模板
- Pigsty v3.3 Release: with 404 PostgreSQL Extensions
- Pigsty 3.2.2 发布!
- Pigsty 3.2.1 发布!
- Pigsty 3.2.0 发布!
- Pigsty v3.2.0 命令行工具pig,完备的ARM扩展仓库,Supabase & Grafana 加强
- PostgreSQL 包管理器 pig 发布!
- Pigsty 3.1.0 发布,提供完整的 PostgreSQL 17.2 扩展支持
- 介绍文章:《Supabase自建,PG17上位,MinIO改进,ARM/Ubuntu24支持》
- PostgreSQL 官方网站新闻:《Pigsty v3.1 Release: PG17, Duck Extensions, Self-hosting Supabase, ARM & Ubuntu24》
- 发布说明:v3.1.0
- Postgres Weekly 579 期:https://postgresweekly.com/issues/579
- Pigsty 3.0.4 发布! 提供扩展目录与仓库,编译 PG17扩展,自建Supabase流程优化
- 发布说明:v3.0.4
- Pigsty 3.0.3 发布! 提供正式的 PostgreSQL 17 支持,优化 Etcd 运维与监控
- 发布说明:v3.0.3
- Pigsty 3.0.2 发布! 精简安装模式,PolarDB 15 支持,例行问题修复(2024-09-07)
- 发布说明:v3.0.2
- Pigsty 3.0.1 发布!Oracle 兼容性,Patroni 4 支持,例行问题修复 (2024-08-31)
- 发布说明:v3.0.1
- Pigsty 3.0.0 发布!333 个扩展,可替换内核,完整RDS服务!
- 发布说明:v3.0.0
- 特性介绍:Pigsty v3.0.0
- 新闻:Pigsty提供的Yum/APT补充软件仓库,提供254个额外的开箱即用的二进制RPM/DEB扩展!
- PostgreSQL 官方网站: Pigsty Supplementary APT/YUM Repository with 254 additional PostgreSQL Extensions!
- PGCon.Dev 2024 参会记!
- Pigsty v2.7 发布!
- PostgreSQL 官方网站: Pigsty v2.7 Released, free RDS PG with 255 extensions available
- Postgres Weekly: https://postgresweekly.com/issues/556
- Pigsty 博客:Pigsty v2.7:集异璧之大成
- Pigsty v2.6 发布!
- PostgreSQL 官方网站:Pigsty, Battery-included PostgreSQL Distro & Free RDS Alternative, v2.6 released!
- Postgres 星球(X): https://twitter.com/PostgreSQL/status/1765323952669290515
- Postgres Weekly: https://postgresweekly.com/issues/545
- Pigsty 博客:Pigsty v2.6:PG 踢馆 OLAP
会议与演讲
| 日期 | 类型 | 活动 | 主题 |
|---|---|---|---|
| 2025-05-16 | 技术大会 | PGCon.Dev 2025 全球PG开发者大会 | 闪电演讲:Extension Delivery - Make your PGEXT accessible to users |
| 2025-05-12 | 技术大会 | PGCon.Dev 2025 全球PG开发者大会扩展峰会 | PG 生态缺失的包管理器与扩展仓库 - pig |
| 2025-04-19 | 实战工坊 | PostgreSQL 数据库技术峰会 | 使用Pigsty拉起PG生态好伙伴 Dify,Odoo,Supabase |
| 2025-04-11 | 直播主持 | 开源中国-数智漫谈 | 全网爆火的 MCP 到底是炒作还是神器 |
| 2025-01-15 | 直播演讲 | 开源项目老牌与新秀 第四期 | PostgreSQL 扩展吞噬数据库世界?PG包管理器 pig 与 RDS 自建发行版 Pigsty |
| 2025-01-09 | 颁奖活动 | 开源中国 2024 年度突出贡献专家 | 开源中国 2024 年度突出贡献专家 |
| 2025-01-06 | 圆桌论坛 | 中国 PostgreSQL 数据库生态大会 | PostgreSQL 正在通过扩展吞噬数据库世界 |
| 2024-11-23 | 播客节目 | 播客·科技乱炖 | 从Linux基金会聊起,为什么这些年都热衷于“卡脖子”? |
| 2024-08-21 | 媒体专访 | Blue Tech Wave: Interview with Feng Ruohang, author of Pigsty | Simplifying PostgreSQL management and advancing the Chinese open-source community |
| 2024-08-15 | 技术大会 | GOTC 全球开源技术峰会 | PostgreSQL AI/ML/RAG 扩展生态与最佳实践 |
| 2024-07-12 | 主题演讲 | 第十三届PG中国技术大会 | 数据库世界的未来:Extensions, Service, and Postgres |
| 2024-05-31 | 技术大会 | PGCon.Dev 2024 全球PG开发者大会 Unconference | Built-in Prometheus Metrics Exporter |
| 2024-05-28 | 主题研讨 | PGCon.Dev 2024 全球PG开发者大会扩展峰会 | Extension in Core & Binary Packing |
| 2024-05-29 | 主题奥伦 | 第十三届PG中国技术大会 | 数据库世界的未来:Extensions, Service, and Postgres |
| 2024-05-10 | 直播对谈 | 明说三人行:云计算泥石流系列第三期 | 公有云是杀猪盘吗? |
| 2024-04-17 | 直播对谈 | 明说三人行:云计算泥石流系列第二期 | 云数据库是智商税吗? |
| 2024-04-16 | 圆桌论坛 | Cloudflare Immerse 深圳 | 赛博菩萨圆桌论坛 |
| 2024-04-12 | 技术大会 | 2024 数据技术嘉年华 | Pigsty:解决 PostgreSQL 运维难题 |
| 2024-03-31 | 直播对谈 | 明说三人行:云计算泥石流系列第一期 | 老罗卖云咱下云? |
| 2024-01-24 | 直播主持 | 开源中国:开源漫谈第九期 | DBA 会被云淘汰吗? |
| 2023-12-20 | 直播辩论 | 开源中国:开源漫谈第七期 | 上云 or 下云,割韭菜还是降本增效? |
| 2023-11-24 | 技术大会 | 机器之心:大模型时代的向量数据库 | 圆桌讨论:大模型时代向量数据库新未来 |
| 2023-09-08 | 人物专访 | 墨天轮风云人物访谈 | 冯若航:不想当段子手的技术狂,不是一位好的开源创始人 |
| 2023-08-16 | 技术大会 | DTCC 2023 | DBA之夜:PostgreSQL vs MySQL的开源协议问题 |
| 2023-08-09 | 直播辩论 | 开源漫谈第一期 | MySQL vs PostgreSQL,谁是世界第一? |
| 2023-07-01 | 技术大会 | SACC 2023 | 专题研讨会8:FinOps实践:云成本管理与优化 |
| 2023-05-12 | 线下活动 | PostgreSQL中国社区 温州站线下沙龙 | PG With DB4AI: 向量数据库 PGVECTOR & AI4DB: 数据库自动驾驶 Pigsty |
| 2023-04-08 | 技术大会 | 数据库嘉年华 2023 | 更好的开源RDS替代:Pigsty |
| 2023-04-01 | 技术大会 | PostgreSQL中国社区 西安站线下沙龙 | PG高可用与容灾最佳实践 |
| 2023-03-23 | 公开直播 | Bytebase x Pigsty | 管理 PostgreSQL 的最佳实践: Bytebase x Pigsty |
| 2023-03-04 | 技术大会 | PostgreSQL中国技术大会 | 炮打 RDS,Pigsty v2.0 发布 |
| 2023-02-01 | 技术大会 | DTCC 2022 | 开源 RDS 替代:开箱即用、自动驾驶的数据库发行版 Pigsty |
| 2022-07-21 | 直播辩论 | 云吞噬开源,那开源有机会反击吗? | 云吞噬开源,那开源有机会反击吗? |
| 2022-07-04 | 人物专访 | 专题采访:创造者说 | 90 后,辞职创业,说要卷死云数据库 |
| 2022-06-28 | 公开直播 | 贝斯的圆桌趴 |DBA 福音 - | SQL 审核最佳实践 |
| 2022-06-12 | 公开路演 | 奇绩创坛 S22 路演日 | 好用省钱的数据库发行版 Pigsty |
| 2022-06-05 | 视频直播 | PG中文社区直播分享 | Pigstyv1.5快速上手新特性介绍与生产集群搭建 |
| 2021-08-01 | 技术大会 | GOTC 全球开源技术峰会 2021 | ⽼树发新芽 —— 开箱即⽤的开源PostgreSQL发⾏版 Pigsty |
排名
PS: Pigsty 目前是中国在 PostgreSQL 生态开源项目(内核,扩展,发行版)中 GitHub Star 数最高的项目。
| 项目 | Star | 简介 |
|---|---|---|
| pigsty | 4.3K | 开箱即用的PG发行版 |
| PolarDB PG | 3.1K | 阿里云 PolarDB 开源内核 |
| pgvector.rs | 2.1K | Rust 编写的PG向量扩展 |
| VectorChord | 1.4K | 下一代 Rust PG 向量扩展 |
| TBase | 1.4K | 腾讯云 PG 内核 |
| Cloudberry | 1.1K | Hashdata 的开源 Greenplum 2.0 |
| IvorySQL | 960 | 瀚高主导的 Oracle 兼容内核 |
| openGauss | 751 | 华为主导的早期 PG 分叉 |
| openHalo | 626 | 易景开源的 MySQL 兼容 PG 内核 |
| zhparser | 798 | 使用 scws 的PG中文分词扩展 |
| duckdb_fdw | 393 | 李红艳开源的 DuckDB 包装器 |
| pg_jieba | 392 | 使用结巴分词的 PG 中文分词扩展 |
| VectorChord-bm25 | 314 | PG 原生的 BM25 排序索引算法 |
| pg_roaringbitmap | 263 | PG 中的 RoaringBitmap 位图 |
5.5 - 漏洞
PIGSTY-20231201
**问题名称**: ETCD 写满导致 PGSQL 高可用失效
问题等级: 关键错误,请立即安排修复
影响范围: Pigsty v2.0.0 - v2.5.1 ,于 Pigsty v2.6.0 修复
问题描述:
etcd 默认设置了一个 2GB 的数据库容量上限,如果您的 etcd 数据库容量超过了这个限制,etcd 将会拒绝写入请求。这可能导致依赖 etcd 的 PostgreSQL 高可用机制无法正常工作。 与此同时,etcd 的 数据模型 使得每一次写入都会产生一个新的版本,因此如果您的 etcd 集群频繁写入,即使只有极个别的 Key, etcd 数据库的大小也可能会不断增长,并在达到容量上限时出现故障。
解决方案:
将 Pigsty 更新至 v2.6.0 以上的版本,或者更新 roles/etcd 部分的代码后,重新执行 ./etcd.yml 强制重置 etcd 集群实现修复。
关键配置更新: roles/etcd/templates/etcd.conf
5.6 - 路线
Pigsty 遵循结构化的开发路线图,定期发布和持续改进。本页概述了我们的发布时间表、即将推出的功能和长期计划。
发布公告
Pigsty v3.7.0 已发布!
发布计划
Pigsty 使用格式为 <主版本>.<次版本>.<补丁> 的语义版本控制:
- 主要更新:每年发布一次,包含重要的新功能和改进
- 次要更新:每年发布 4~6 次,通常与 PostgreSQL 发布保持一致
- 补丁更新:根据需要进行错误修复和小改进
- 稳定发布:
v3.1.0、v3.2.0等 - Alpha 版本:
v3.1.0-a1、v3.1.0-a2(早期开发) - Beta 版本:
v3.1.0-b1、v3.1.0-b2(功能完整,测试中) - 候选发布:
v3.1.0-rc1(生产就绪,最终测试)
- 始终使用标记的发布版本而不是 GitHub 主分支
- 在生产部署中使用特定版本的发布
- 在升级生产环境之前在开发环境中测试新版本
功能雷达
以下特性已经完成,或列入后续版本的规划与评估:
- PostgreSQL 18 支持
- Supabase 自托管教程
- Dify 自托管教程
- Odoo 自托管教程
- EL 10 支持
- 自托管 PostHog
- MySQL 数据库部署监控
- 使用
vector替换 Promtail - 使用
victorialogs替换 Loki - 使用
victoriametrics替换 Prometheus - 改进日志输出目标管理
- 使用 SealOS 部署和监控高可用 Kubernetes 集群
6 - 价值主张
Pigsty 提出以下八条核心价值主张,这八大价值协同工作,提供了一个从开发到企业生产环境的全面数据库平台。 Pigsty 将 PostgreSQL 从简单的数据库转变为组织真正拥有和控制的强大、可观测、可维护的数据基础设施。
无限可能的绽放
坚如磐石且安全
清晰与洞察
弹性性能
简单可操作
灵活的乐高积木
主权自托管
性价比卓越的 RDS
🧩 可扩展的 Postgres
“滋养万物,协同繁荣,铸就无限可能!”
大数据挑战者
RAG应用标配
GIS事实标准
玩转时序时态
内置搜索引擎
语言任君选择
打通数据孤岛
数据库即平台
🛡️ 可靠的基础设施
“巍峨高峰,基石坚固,屹立于任何巅峰!”
HA PostgreSQL
自适应服务接入
预置时间点恢复
没有外部依赖
模型开箱即用
机密性保障
完整性校验
可用性标杆
📊 可观测的图形
“天行健,洞察一切,感知细节以掌控全局!”
自带监控基础设施
为数智化转型奠基
PG监控版本答案
不仅是PG与RDS
告别DBA人肉盯盘
慢查询瓶颈轻松查
快速定位故障根因
低代码可视化开发
⚡ 可扩展的服务
“如水而流,柔韧坚韧,汇聚溪流以适应无尽变化!”
新硬件红利尽享
读请求无限扩容
高并发手到擒来
控制台流量管控
分布式原地改造
外部表透明压缩
大规模集群部署
云计算他山之石
🔧 可维护的工具箱
“如火燎原,照亮四方,熊熊燃烧永不息!”
基础设施即代码
几分钟快速上手
无需容器与K8S
稳定顺畅的交付
开发规约与SOP
在线迁移与变配
丰富的定制参数
一键置备服务机
🎯 可组合的模块
“疾如风,化繁为简,乘风破浪自如!”
模块化乐高设计
企业级应用一键建
功能完备PG RDS
拓展能力边界
可替换数据库引擎
强大数据分析能力
前沿边界的探索
Postgres玩出花
🎛️ 可控的 FOSS
“厚德载物,海纳百川——坚守初心,仰望星空!”
民主化自建能力
运营到地老天荒
再无供应商锁定
海量扩展随心装
真正自主掌控
撸起袖子自己上
国产化顺势而为
顶级专家来兜底
💰 经济实惠的解决方案
“雷霆万钧,破而后立,成本可控,价值永升!”
用好PostgreSQL
逃离RDS杀猪盘
人人都能是DBA
无需云原生全家桶
解决自建关键卡点
交流讨论共建
会者不难按需付费
明码标价物有所值
这八大价值协同工作,提供了一个从开发到企业生产环境的全面数据库平台。Pigsty 将 PostgreSQL 从简单的数据库转变为组织真正拥有和控制的强大、可观测、可维护的数据基础设施。
6.1 - 可扩展性
多模态,超融合,一条SQL顶应用千言万语,四百插件助PG征战天下!
大数据挑战者
向量数据库基线
GIS事实标准
玩转时序时态
内置搜索引擎
语言任君选择
打通数据孤岛
数据库即平台
数据分析:大数据挑战者
一流的分析性能,DuckDB 集成,并行查询,分布式计算
PostgreSQL 在数据分析领域表现出色,拥有强大的 SQL 功能和众多分析扩展:
- DuckDB 集成:在 PostgreSQL 中直接使用 DuckDB 进行 OLAP 查询
- 并行查询:自动并行化复杂查询以提升性能
- 分布式计算:通过 Citus 实现横向扩展
- 列式存储:支持列式数据格式以优化分析工作负载
人工智能:向量数据库基线
AI 和数据库融合,向量存储,SQL 中的机器学习
PostgreSQL 原生支持向量数据类型和 AI 工作负载:
- 向量扩展:pgvector 提供高效的向量相似性搜索
- 嵌入存储:原生支持高维向量数据存储
- 机器学习:MADlib 提供 SQL 中的机器学习算法
- AI 集成:与主流 AI 框架无缝集成
地理空间:GIS事实标准
全面的地理空间处理,路由,索引
PostGIS 是地理信息系统的黄金标准:
- PostGIS:最成熟的开源地理空间数据库扩展
- 空间索引:高效的 GiST 和 SP-GiST 索引
- 路径规划:pgRouting 提供路径规划和网络分析
- 坐标转换:支持数千种空间参考系统
时间序列:玩转时序时态
基于时间的数据处理,时态表,调度
PostgreSQL 为时间序列数据提供强大支持:
- TimescaleDB:时间序列数据库扩展
- 时态表:SQL 标准的时态数据功能
- 分区表:按时间自动分区以优化性能
- 压缩存储:时间序列数据的高效压缩
全文检索:内置搜索引擎
多语言词典,混合搜索功能
PostgreSQL 内置强大的全文搜索功能:
- 多语言支持:内置多种语言的词典和分词器
- 模糊搜索:支持相似性搜索和拼写纠错
- 排序算法:tf-idf 和其他相关性排序
- 搜索高亮:查询结果的文本高亮显示
存储过程:语言任君选择
20+ 编程语言支持数据库开发
PostgreSQL 支持多种编程语言编写存储过程:
- PL/pgSQL:PostgreSQL 原生过程语言
- Python:通过 PL/Python 支持 Python 编程
- JavaScript:PL/V8 提供 JavaScript 支持
- 其他语言:支持 Perl、Tcl、R、Java 等多种语言
外表封装:打通数据孤岛
统一 SQL 访问异构数据源
Foreign Data Wrapper (FDW) 允许访问外部数据:
- 多数据源:连接 MySQL、Oracle、MongoDB 等
- 文件系统:直接查询 CSV、JSON、Parquet 文件
- API 集成:通过 HTTP FDW 访问 REST API
- 统一查询:在单个 SQL 中查询多个数据源
特色扩展:数据库即平台
从 HTTP 请求到 Web 应用开发的多样化扩展
PostgreSQL 生态系统提供丰富的功能扩展:
- HTTP 客户端:在数据库中直接发送 HTTP 请求
- 消息队列:pg_mq 提供消息队列功能
- 作业调度:pg_cron 实现定时任务调度
- Web 服务:PostgREST 将数据库表自动转换为 REST API
6.2 - 可依赖性
稳如泰山,坚若磐石,在极端场景下也能保持安全可靠的运行
HA PostgreSQL
自适应服务接入
预置时间点恢复
没有外部依赖
模型开箱即用
机密性保障
完整性校验
可用性标杆
极致可用:HA PostgreSQL
通过 PostgreSQL 物理复制实现业界领先的高可用性
针对特定场景的可调 RTO 和 RPO 指标
Pigsty 实现了业界领先的高可用架构:
- 自动故障转移:基于 Patroni 的自动主从切换
- 零数据丢失:同步复制确保数据安全
- 快速恢复:RTO < 30秒,RPO = 0 的高可用承诺
- 多层冗余:从硬件到软件的全栈高可用设计
故障自愈:自适应服务接入
透明的主从拓扑
故障转移期间的自动流量重定向
与行业 HA 最佳实践集成
智能的服务发现和流量管理:
- 服务发现:HAProxy + Consul 的动态服务发现
- 健康检查:多层次健康检查确保服务可用性
- 流量切换:故障时自动切换到备用节点
- 透明访问:应用无需感知底层拓扑变化
删库兜底:预置时间点恢复
默认备份和 WAL 归档
支持本地和远程冷备份策略
一键备份和恢复
完整的数据保护解决方案:
- 连续归档:WAL 日志实时归档保护
- 定期备份:自动化的基础备份调度
- PITR 恢复:可恢复到任意时间点
- 多存储后端:支持本地、S3、MinIO 等存储
自给自足:没有外部依赖
完整的 PostgreSQL RDS 基础设施闭环
本地软件源确保运营自主性
完全自包含的部署方案:
- 本地软件源:内置完整的软件包仓库
- 离线部署:无需互联网连接即可完成部署
- 版本锁定:确保软件版本一致性和稳定性
- 安全隔离:无外部依赖降低安全风险
访问控制:模型开箱即用
预定义角色:只读、读写、管理员、分析
遵循最小权限原则
同步连接池凭据
企业级的访问控制机制:
- 角色模板:预定义的数据库角色模板
- 权限分离:按业务需求划分访问权限
- 连接池集成:与 PGBouncer 无缝集成
- 审计日志:完整的用户操作审计记录
坚如磐石:机密性保障
自签名 CA,端到端 SSL 加密
密码保护的备份
严格的访问间隔控制
全方位的数据安全保护:
- 传输加密:SSL/TLS 加密所有网络通信
- 存储加密:支持数据文件透明加密
- 证书管理:自动化的 SSL 证书管理
- 网络隔离:基于 IP 白名单的访问控制
精益求精:完整性校验
数据校验和防护
多副本和延迟副本保护
审计插件日志记录
多层次的数据完整性保障:
- 数据校验:页面级别的数据校验和
- 复制校验:主从数据一致性校验
- 备份校验:备份文件完整性检查
- 审计追踪:完整的数据变更审计日志
实战检验:可用性标杆
在大型组织中得到验证
滚动升级,最少停机时间
关键组件中的冗余
经过生产环境验证的稳定性:
- 生产验证:在大规模生产环境中验证
- 滚动升级:零停机的在线升级能力
- 故障演练:定期的灾难恢复演练
- 性能基准:持续的性能监控和优化
6.3 - 可观测性
大局在胸,细微在握,为数字化管理与智能化运维提供坚实的支撑
自带监控基础设施
为数智化转型奠基
PG监控版本答案
不仅是PG与RDS
告别DBA人肉盯盘
慢查询瓶颈轻松查
快速定位故障根因
低代码可视化开发
开箱即用:自带监控基础设施
提供即用的 Prometheus & Grafana 可观测技术栈
自动对象发现,企业级监控无需额外配置
Pigsty 内置完整的可观测性基础设施:
- Prometheus 技术栈:完整的指标收集、存储和查询
- Grafana 仪表板:200+ 预配置的专业仪表板
- 自动发现:无需配置的服务和目标自动发现
- 企业级功能:告警、通知、用户管理开箱即用
数据驱动:为数智化转型奠基
将数千个指标处理成精心设计的仪表板
从宏观到微观的全方位系统状态可见性
完整的数据驱动管理体系:
- 全栈监控:从硬件到应用的完整监控栈
- 指标体系:数千个精心设计的监控指标
- 数据血缘:清晰的数据流向和依赖关系
- 决策支持:基于数据的运维决策支持
极致体验:PG监控版本答案
五级联动:全局/集群/实例/数据库/对象
精细的历史指标,深入到单个数据库对象
业界领先的 PostgreSQL 监控体验:
- 五级钻取:从全局视图深入到对象级别
- 实时监控:毫秒级的实时数据更新
- 历史分析:长期历史数据的趋势分析
- 对象级监控:表、索引级别的细粒度监控
通用监控:不仅是PG与RDS
可以监控云 RDS、PostgreSQL 兼容服务
支持监控主机、数据库、应用程序、负载均衡器
广泛的监控能力覆盖:
- 多数据库:支持各种 PostgreSQL 变体和 RDS
- 混合环境:云端和本地环境统一监控
- 基础设施:服务器、网络、存储全面监控
- 应用监控:应用层面的性能和业务指标
自动告警:告别DBA人肉盯盘
经过验证的预配置告警规则集
56 个预设告警覆盖所有 Pigsty 模块
智能化的告警体系:
- 预设规则:基于最佳实践的告警规则
- 分级告警:根据严重程度分级处理
- 多渠道通知:邮件、短信、钉钉、微信通知
- 告警抑制:智能的告警合并和抑制机制
性能优化:慢查询瓶颈轻松查
识别资源消耗的慢查询
集成 pg_stat_statements 和 auto_explain 进行查询分析
深度的性能分析能力:
- 慢查询分析:自动识别和分析慢查询
- 执行计划:查询执行计划的可视化分析
- 资源消耗:CPU、内存、IO 等资源使用分析
- 优化建议:基于分析结果的优化建议
日志分析:快速定位故障根因
使用 Loki 和 Promtail 统一日志收集
像搜索引擎一样轻松检索和过滤日志
强大的日志分析系统:
- 统一收集:所有组件日志的统一收集
- 实时搜索:ElasticSearch 级别的日志搜索
- 关联分析:日志与指标的关联分析
- 故障溯源:快速的问题根因定位
大屏报表:低代码可视化开发
使用 PostgreSQL、Grafana、Echarts 的低代码可视化
交互式数据应用原型开发
灵活的可视化开发平台:
- 低代码开发:拖拽式的仪表板开发
- 丰富组件:多样化的可视化组件库
- 交互式设计:支持复杂的交互式分析
- 快速原型:快速的数据应用原型开发
6.4 - 可伸缩性
水行万变,张弛自如,滔天流量洪峰涌于眼前而丝毫不怵
新硬件红利尽享
读请求无限扩容
高并发手到擒来
控制台流量管控
分布式原地改造
外部表透明压缩
大规模集群部署
云计算他山之石
性能澎湃:新硬件红利尽享
PostgreSQL 的"令人惊叹的可伸缩性"
可以处理大规模事务处理
充分发挥现代硬件的极致性能:
- 单机极限:200万行/秒查询速率
- 写入性能:100万行/秒写入速率
- 表容量:单表支持 32TB 容量
- 硬件优化:针对 NVMe SSD 和多核 CPU 优化
读写分离:读请求无限扩容
支持无限制的只读副本级联
支持只读和离线服务路由
可以实现"一主三十从"
灵活的读写分离架构:
- 级联复制:支持多级复制拓扑
- 读负载分发:智能的读请求负载均衡
- 离线查询:专用的分析查询副本
- 异步复制:低延迟的异步数据同步
链接池化:高并发手到擒来
内置 PGBouncer
将数千个并发连接转换为最少的活动连接
自动配置同步
高效的连接管理机制:
- 连接复用:大幅降低数据库连接开销
- 并发控制:支持数千并发连接
- 智能路由:基于负载的连接路由
- 配置同步:连接池配置自动同步
负载均衡:控制台流量管控
HAProxy Web 控制台实时流量管理
支持滚动连接排空
实现无缝在线迁移
专业的流量管理能力:
- 实时控制:Web 界面的实时流量控制
- 滚动迁移:零停机的服务迁移
- 健康检查:智能的后端健康检测
- 流量分配:精细的流量权重控制
水平扩展:分布式原地改造
Citus 扩展用于分布式 PostgreSQL
支持多租户、多写入场景
在线分片重平衡
强大的分布式扩展能力:
- 分布式查询:跨节点的并行查询处理
- 自动分片:数据的自动分片和分布
- 在线扩容:无停机的集群扩容
- 多租户支持:原生的多租户数据隔离
存储扩容:外部表透明压缩
透明压缩(10:1 比率)
外部表和对象存储集成
支持冷热数据分离
灵活的存储扩展方案:
- 数据压缩:高达 10:1 的压缩比率
- 分层存储:热数据本地,冷数据对象存储
- 透明访问:应用无感知的数据访问
- 成本优化:基于数据访问模式的成本优化
批量管理:大规模集群部署
为极端规模而设计
基于 Ansible 的大规模操作
最大部署:25,000 vCPU,3000+ 实例
企业级的大规模管理能力:
- 批量操作:支持数千节点的批量管理
- 自动化运维:基于 Ansible 的自动化操作
- 模板化部署:标准化的部署模板
- 监控覆盖:大规模集群的统一监控
弹性伸缩:云计算他山之石
云服务器部署支持
灵活的多云策略
基线购买,峰时租赁模型
云原生的弹性扩缩能力:
- 多云支持:AWS、阿里云、腾讯云等多云部署
- 弹性计算:基于负载的自动扩缩容
- 混合云架构:本地与云端的混合部署
- 成本优化:按需使用的成本控制模型
6.5 - 可维护性
人生苦短,关爱运维,以最小的复杂度代价最大化可操作性与可演化性
基础设施即代码
几分钟快速上手
无需容器与K8S
稳定顺畅的交付
开发规约与SOP
在线迁移与变配
丰富的定制参数
一键置备服务机
言出法随:基础设施即代码
Pigsty 采用声明式 API,让数据库部署和运维如写代码般灵活。支持 GitOps、批量管理和 PostgreSQL CMDB
Infrastructure as Code 的最佳实践:
- 声明式配置:YAML 配置文件描述期望状态
- GitOps 工作流:通过 Git 管理配置变更
- 批量管理:一套配置管理数千个实例
- 版本控制:配置的版本化管理和回滚
简单易用:几分钟快速上手
一键下载安装,几分钟部署上线,一行命令搞定所有步骤。提供各种场景的开箱即用配置模板
极致的用户体验设计:
- 一键安装:单条命令完成全部安装
- 智能配置:自动检测环境并生成配置
- 场景模板:针对不同场景的预设模板
- 文档完善:详细的操作指南和最佳实践
裸机运行:无需容器与K8S
运行于 Linux 裸系统上,避免 Docker 和 Kubernetes 的额外复杂度
支持主流 Linux 发行版和架构
简单可靠的部署方式:
- 原生部署:直接运行在 Linux 系统上
- 多发行版支持:RHEL、Ubuntu、Debian 等
- 多架构支持:x86_64、ARM64 架构
- 资源高效:无容器开销的资源利用
离线安装:稳定顺畅的交付
提供离线安装包,可在无网络环境中一键完成自举安装
确保软件版本一致性,避免依赖问题
企业级的交付保障:
- 离线包:完整的离线安装包
- 版本锁定:确保软件版本一致性
- 依赖完整:包含所有必需依赖
- 快速部署:无需网络的快速部署
体系配套:开发规约与SOP
将顶级 DBA 经验提炼为统一的开发运维指南
完整的运维体系建设:
- 标准规范:统一的开发和运维规范
- 操作手册:详细的 SOP 操作手册
- 最佳实践:经过验证的最佳实践集合
- 培训体系:完整的技能培训体系
无需停服:在线迁移与变配
依托基于逻辑复制的蓝绿部署方案,实现不停机在线迁移
支持滚动维护和精细的流量管理
零停机的运维能力:
- 蓝绿部署:基于逻辑复制的零停机迁移
- 滚动升级:服务的渐进式升级
- 在线扩容:无停机的容量扩展
- 流量控制:精细的流量管理和切换
按需配置:丰富的定制参数
近 300+ 可配置参数,默认值即可满足绝大多数场景
支持多层级配置,丰富的文档说明
灵活的配置管理系统:
- 参数丰富:300+ 可调节的配置参数
- 默认优化:开箱即用的优化默认值
- 分层配置:全局、集群、实例多层配置
- 文档详尽:每个参数都有详细说明
沙箱环境:一键置备服务机
自带沙箱环境,可在单台笔记本上完整体验
快速的环境置备能力:
- 沙箱模式:单机完整功能演示
- 快速体验:5分钟快速体验完整功能
- 开发环境:本地开发测试环境
- 云主机集成:与云平台无缝集成
6.6 - 可组合性
灵活拼装,化繁为简,用模块化的积木组合出千变万化的服务
模块化乐高设计
企业级应用一键建
功能完备PG RDS
拓展能力边界
可替换数据库引擎
强大数据分析能力
前沿边界的探索
Postgres玩出花
自由拼装:模块化乐高设计
模块化设计,像乐高积木一样自由组合组件
声明式配置,用于定制基础设施和数据库环境
- 开箱即用的高可用集群(PGSQL + ETCD)
- 无限存储的集中备份(MINIO + PGSQL)
- 独立数据库监控(INFRA + NODE)
- 网站托管和数据可视化(INFRA + PGSQL)
软件模板:企业级应用一键建
可选的 Docker 模块,带有 Compose 模板
可销毁的无状态容器,状态持久化在外部 HA PGSQL 中
- 企业应用:GitLab、Odoo、Dify
- 高级数据库:Supabase、Neon、EdgeDB
- 数据库管理工具:PGAdmin、Bytebase、PGWEB
核心模块:功能完备PG RDS
4 个核心模块协同工作,构建完整的 PostgreSQL RDS
可扩展、灵活的组合,无额外依赖
- PGSQL:具有 HA、PITR、IaC、监控、437 扩展的 PG 集群
- INFRA:Nginx、本地仓库、Prometheus 和 Grafana 堆栈、DNS、NTP
- NODE:节点管理、仓库、包、VIP、日志、NTP
- ETCD:PG 高可用的分布式配置存储
扩展模块:拓展能力边界
与 PostgreSQL 配合出色的组件
完全可选,按需安装
- MINIO:S3 兼容对象存储,可选的 PG 备份仓库
- REDIS:各种模式下的高性能字典服务器
- FERRET:PostgreSQL 的 MongoDB 协议兼容性
内核模块:可替换数据库引擎
普通 PostgreSQL 内核的可选替换
提供不同的数据库兼容性
- Babelfish:来自 AWS 的 Microsoft SQL Server 协议兼容 PG
- IvorySQL:来自海高的 Oracle 兼容 PostgreSQL 17 内核
- OpenHalo:由 HaloTech 开发的 MySQL 协议兼容 PG 内核
- OrioleDB:无 xid 环绕和表膨胀的新存储引擎
数仓模块:强大数据分析能力
DuckDB 集成展示
Greenplum 衍生版本的安装和监控支持
- CITUS:PostgreSQL 的原生分布式 HTAP 扩展
- DUCKDB:带有 5 个 PG 扩展的嵌入式 OLAP 内核
- GREENPLUM:具有 EL 监控的 MPP 数据仓库(PG 12)
- CLOUDBERRY:来自原 GPSQL 团队的 PG 14 兼容版本
试点模块:前沿边界的探索
与 PostgreSQL 无关
实验性能力探索
- KUBE:使用 SealOS 的 Kubernetes 设置,部署支持
- KAFKA:由 KRaft 驱动的消息队列
- MYSQL:单节点 MySQL 8.0 支持
- VICTORIA:指标和日志的基础设施替代方案
风味模块:Postgres玩出花
原生 PostgreSQL 上的多样化包装器和功能
探索后端即服务、无服务器和数据库内 Web 开发
- SUPA:Firebase 开源替代方案
- NEON:具有数据库分支的无服务器 PostgreSQL
- EDGE:具有强大查询语言的 PostgreSQL
- OMNI:针对特定用例扩展的 PostgreSQL
6.7 - 可控制性
脚踏实地,仰望星空,用开源软件的信仰捍卫真正的软件自由
民主化自建能力
运营到地老天荒
再无供应商锁定
海量扩展随心装
真正自主掌控
撸起袖子自己上
国产化顺势而为
顶级专家来兜底
自由软件:民主化自建能力
100% 基于开源组件
继承 AGPLv3 自由精神
“普及自建顶级数据库服务的能力”
真正的软件自由:
- 开源基因:100% 基于开源软件构建
- 自由许可:AGPLv3 保障软件自由
- 无专利风险:避免专有软件的法律风险
- 社区驱动:开放透明的开发模式
本地优先:运营到地老天荒
可以离线和独立运行
本地软件仓库与版本快照
“离线断网也能独立运转至地老天荒”
完全自主的运行能力:
- 离线运行:无需依赖外部网络服务
- 版本锁定:本地软件仓库确保版本一致
- 自给自足:完整的软件依赖闭环
- 持续运营:长期稳定的独立运行
多云部署:再无供应商锁定
数据库 PaaS 自建
拒绝供应商锁定
使用 Terraform 进行跨云资源置备
真正的多云自由:
- 跨云部署:支持所有主流云平台
- 统一管理:跨云环境的统一管理
- 自由迁移:云平台间的自由迁移
- 议价权力:拥有真正的选择权
扩展自由:海量扩展随心装
提供 437 PostgreSQL 扩展
支持 RPM/DEB 软件包
“不再忍受云厂商安全策略/开源协议的桎梏”
丰富的扩展生态:
- 扩展完整:437 PostgreSQL 扩展
- 安装简便:标准软件包管理
- 无限制使用:无云厂商策略限制
- 持续更新:扩展的持续维护和更新
掌控数据:真正自主掌控
合理的资源定价
数据库超级用户权限
绕过 RDS 支持官僚主义
完全的数据主权:
- 数据所有权:完全的数据控制权
- 超级用户权限:不受限制的数据库访问
- 透明定价:清晰的资源成本
- 无中间商:直接的技术支持
二次开发:撸起袖子自己上
AGPLv3 许可证允许修改
对不同用户类型灵活
支持 DBaaS 和 OEM 用例
灵活的开发自由:
- 代码修改权:完全的源码修改权利
- 商业友好:支持各种商业用例
- 定制开发:深度的产品定制能力
- 技术独立:摆脱技术依赖
信创合规:国产化顺势而为
PostgreSQL 扩展项目排名第一
支持 PolarDB v2.0 内核
符合国产操作系统/芯片架构
完整的信创支持:
- 国产适配:支持国产操作系统和芯片
- 合规认证:满足信创合规要求
- 本土化:完整的本土化支持
- 安全可控:自主可控的技术栈
专业服务:顶级专家来兜底
顶级 PostgreSQL 专家支持
经济的订阅模式
提供保修和广泛支持
专业的技术保障:
- 专家团队:顶级 PostgreSQL 专家
- 及时响应:快速的技术支持响应
- 深度服务:从咨询到实施的全程支持
- 质量保证:专业的服务质量保证
6.8 - 可承担性
雷震天地,破而后立,以极致的性价比掀翻公有云数据库的饭桌!
用好PostgreSQL
逃离RDS杀猪盘
人人都能是DBA
无需云原生全家桶
解决自建关键卡点
交流讨论共建
会者不难按需付费
明码标价物有所值
开源免费:用好PostgreSQL
开源不等于免费,但用好了肯定更省钱
解决云数据库和DBA成本问题
开源不等于免费,有效使用可能代价昂贵。不同 PostgreSQL 托管解决方案及其成本比较:
- Oracle 许可证 + 支持费用:约 $3,878 / 年·vCPU
- AWS RDS PG 费用:约 $1,920 ~ $2,640 / 年·vCPU
- Pigsty 开源版本免费,硬件成本约 $27/年·vCPU
财务降本:逃离RDS杀猪盘
相比云数据库服务节省 50% ~ 95%+ 的费用
从云数据库到本地自建成本大幅下降
云数据库杀猪盘的真相:
- RDS 成本可达 $2,000-$2,600/年·vCPU
- 在云 EC2 上自托管,保持弹性并节省 RDS 成本
- 在 IDC 自托管:深度利用 Gen5 SSD 等尖端硬件
人力增效:人人都是DBA
沉淀顶级DBA经验
初级研发与运维可发挥中高级DBA效果
经济实惠的人力成本,将开发人员和运维人员转变为 DBA:
- 封装来自真实世界故障的精英 DBA 专业知识
- 初级开发和运维人员通过合适的工具可以表现为中高级 DBA
- 无需数据库专家即可构建企业级 RDS 服务
简化架构:无需云原生全家桶
使用熟悉的 Ansible
获得云原生好处,避免复杂度
简单性很重要,无需使用容器和 kubernetes:
- 云原生优势,无复杂性
- 无需 K8s 和数据库的稀有专家
- 通常只需要担心:空间满了就加磁盘
赋能下云:解决自建关键卡点
摆脱供应商锁定
获得真正的选择权和议价权
传统公有云服务正在迅速失去其价值主张:
- 不再依赖云服务 - 拥有您的基础设施
- 具有自建能力的客户拥有真正的选择
- 数据库对云迁出至关重要,Pigsty 提供 FOSS RDS 替代方案
社区支持:交流讨论,生态共建
活跃的用户社区
免费公益答疑
活跃的用户社区,提供免费的公共问答支持:
- 在 GitHub Issue 中提问,报告错误和缺陷
- 加入微信、Telegram 和 Discord 群组
- 每月办公时间收集反馈并回答问题
咨询服务:会者不难,按需付费
快速面诊
专业咨询和支持
按需提供专业咨询服务:
- 快速咨询:“一杯咖啡或一点运气”
- 专业咨询:$400 / 案例,约一小时
- 支持人日:$4K / 天,完整工作日
订阅服务:明码标价,物有所值
多个版本选择
从免费到企业级,满足不同需求
透明的订阅定价,价值主张明确:
- 标准版:基本支持和更新
- 专业版:增强功能和优先支持
- 企业版:完整功能访问,专门支持
7 - 关键特性
href="/zh/docs/intro/distro">
将 PostgreSQL 用于一切! \
用组装的超能力构建数据基础设施!
像专家一样自托管 PostgreSQL! \
无需专业知识即可运营生产级服务
开箱即用地获得 **437** PG 扩展的超能力
自愈架构和无忧服务访问
在 PGSQL 之上模拟 MySQL、Mongo、Oracle、SQL Server
自动配置备份和简化的 PITR
用代码 / 数据描述和实现一切
使用 Grafana 和 Prometheus 技术栈的预配置仪表板
将 Postgres 转变为全功能的后端即服务
使用 HA PG 强化软件:Gitlab、Odoo、Dify 等
7.1 - PG 扩展
Pigsty 允许您通过三个组件来利用 PostgreSQL 扩展生态系统的协同超能力:
另外查看我们的博客文章:PostgreSQL is eating the Database World
扩展
TIME
GIS
RAG
FTS
OLAP
FEAT
LANG
TYPE
UTIL
FUNC
ADMIN
STAT
SEC
FDW
SIM
ETL
| 类别 | 数量 | 描述 |
|---|---|---|
| TIME | 11 | TimescaleDB、版本控制与时态表、Crontab、异步与后台作业调度器 |
| GIS | 20 | 地理空间数据类型、操作符和索引、六边形索引、OGR 数据 FDW、GeoIP 与 MobilityDB |
| RAG | 10 | 具有 IVFFLAT、HNSW、DiskANN 索引的向量数据库、SQL 接口中的 AI 和 ML、相似性函数 |
| FTS | 20 | ElasticSearch 替代品,具有 BM25、2-gram/3-gram 模糊搜索、Zhparser 与 Hunspell 分词词典 |
| OLAP | 13 | DuckDB 与 FDW 和 PG Lakehouse 集成、从文件/S3 访问 Parquet、使用 Citus/Partman/PlProxy 分片 |
| FEAT | 56 | AGE 的 OpenCypher、GraphQL、JsonSchema、Hints 与 Hypo Index、HLL、Rum、IVM、ChemRDKit 和消息队列 |
| LANG | 31 | 开发、测试、打包和交付用各种 PL/语言编写的存储过程:Java、Js、Lua、R、Sh、PRQL |
| TYPE | 37 | 专用新数据类型如:prefix、sember、uint、SIUnit、RoaringBitmap、Rational、Sphere、Hash、RRule |
| UTIL | 31 | 实用工具如发送 HTTP 请求、执行 gzip/zstd 压缩、发送邮件、正则表达式、ICU、编码、文档、加密 |
| FUNC | 43 | 函数如 ID 生成器、聚合、草图、向量函数、数学函数和摘要函数 |
| ADMIN | 36 | 膨胀控制、脏读、缓冲区检查、DDL 生成、校验和验证、权限、优先级、目录的实用工具 |
| STAT | 34 | 可观测性目录、监控指标和视图、统计、查询计划、等待采样、慢日志 |
| SEC | 26 | 审计日志、强制密码、保持机密、TDE、SM 算法、登录钩子、日志错误、扩展白名单 |
| FDW | 22 | FDW 开发的包装器和 Multicorn、访问其他 DBMS:MySQL、Mongo、SQLite、MSSQL、Oracle、HDFS、DB2 |
| SIM | 16 | 协议模拟和异构 DBMS 兼容性:Oracle、MSSQL、DB2、MySQL、Memcached 和 Babelfish |
| ETL | 17 | 逻辑复制、解码、protobuf/JSON/Mongo 格式的 CDC、复制和加载及比较 Postgres 数据库 |
仓库
Pigsty 有一个仓库,在 10 个主流 Linux 发行版 上提供 200+ 个额外的 PostgreSQL 扩展。 它被设计为与官方 PostgreSQL 全球开发组(PGDG)仓库一起工作。
您可以使用 pig CLI 工具启用 pigsty infra 和 pgsql 仓库,或手动将它们添加到您的系统:
所有 RPM / DEB 包都使用 Pigsty 仓库中的 GPG 密钥 指纹(B9BD8B20)签名。
包管理器
“Postgres 安装天才,PostgreSQL 生态系统缺失的扩展包管理器”
在几秒钟内 开始使用 PIG:
然后就可以使用了,假设您想安装 pg_duckdb 扩展:
7.2 - PG 内核分支
Pigsty 支持各种 PostgreSQL 内核和兼容分支, 使您能够模拟不同的数据库系统,同时利用 PostgreSQL 的生态系统。 每个内核提供独特的功能和兼容性层。
数据库内核
带有 437 个扩展插件的原生 PostgreSQL 内核
PG 原生分布式扩展
SQL Server 线缆协议兼容
Oracle 语法和 PL/SQL 兼容
MySQL 线缆协议兼容
透明加密内核
OLTP 优化的云原生存储引擎
类 Aurora RAC 风味的信创内核
后端即服务,自托管 Firebase
MongoDB 线缆协议兼容的内核
选择合适的内核
灵活内核:为您的特定用例选择合适的内核 - 无论您需要 MSSQL 兼容性、Oracle 功能还是水平扩展能力。
| 内核 | 关键特性 | 描述 |
|---|---|---|
| PostgreSQL | 原始版本 | 原版 PostgreSQL 配备 437 扩展 |
| Citus | 水平扩展 | 通过原生扩展实现分布式 PostgreSQL |
| WiltonDB | SQL Server 迁移 | SQL Server 线协议兼容 |
| IvorySQL | Oracle 迁移 | Oracle 语法和 PL/SQL 兼容 |
| OpenHalo | MySQL 迁移 | MySQL 线协议兼容 |
| Percona | 透明数据加密 | 带有 pg_tde 的 Percona 发行版 |
| FerretDB | MongoDB 迁移 | MongoDB 线协议兼容 |
| OrioleDB | OLTP 优化 | Zheap,无膨胀,S3 存储 |
| PolarDB | Aurora 风格 RAC | RAC,中国国产合规 |
| Supabase | 后端即服务 | 基于 PostgreSQL 的 BaaS,Firebase 替代方案 |
| Cloudberry | MPP 数厂与数据分析 | 大规模并行处理数据仓库(等待2.0GA) |
Citus(分布式)
Citus 原生分布式
Citus 将 PostgreSQL 转换为分布式数据库系统,支持跨多个节点的水平扩展。使用 Pigsty 部署原生 HA Citus 集群,获得更好的吞吐量和性能。
关键特性
- 分布式表:自动在工作节点间分片表
- 分布式查询:在整个集群上执行查询
- 高可用性:内置复制和故障转移功能
- 实时分析:处理事务性和分析性工作负载
- Postgres 兼容性:保持完整的 PostgreSQL 功能兼容性
使用场景
- 需要水平扩展的多租户 SaaS 应用程序
- 大数据集上的实时分析
- 高吞吐量 OLTP 工作负载
- 需要扩展超出单节点限制的应用程序
需要规划:适当的分片键选择对于优化性能和避免跨分片查询至关重要。
Babelfish(MSSQL)
SQL Server 兼容
Beta
使用 WiltonDB 和 Babelfish 创建 SQL Server 兼容的 PostgreSQL 集群,提供与 Microsoft SQL Server 的协议级兼容性。
关键特性
- T-SQL 支持:原生执行 T-SQL 查询
- 协议兼容性:使用 SQL Server 驱动程序和工具连接
- 存储过程:支持 T-SQL 存储过程和函数
- 数据类型:与 SQL Server 数据类型和行为兼容
- 迁移工具:简化从 SQL Server 环境的迁移
使用场景
- 将传统 SQL Server 应用程序迁移到 PostgreSQL
- 需要 SQL Server 兼容性的多数据库环境
- 在保持应用程序兼容性的同时降低成本
- 从 SQL Server 迁移到开源替代方案的云迁移
迁移路径:非常适合希望降低许可成本同时保持现有 SQL Server 应用程序兼容性的组织。
IvorySQL(Oracle)
Oracle 兼容
社区版
使用由 HighGo 开源的 IvorySQL 内核运行 Oracle 兼容的 PostgreSQL 集群,提供 Oracle 语法和功能兼容性。
关键特性
- Oracle 语法支持:支持 Oracle SQL 语法和 PL/SQL
- 数据类型兼容:Oracle 数据类型映射和行为
- 包支持:Oracle 风格的包和过程
- 内置函数:Oracle 兼容的内置函数库
- 迁移友好:简化从 Oracle 的迁移过程
使用场景
- Oracle 到 PostgreSQL 的数据库迁移
- 降低 Oracle 许可成本
- 遗留 Oracle 应用程序现代化
- 需要 Oracle 功能的新项目
OpenHalo(MySQL)
MySQL 兼容
实验性
OpenHalo 提供 MySQL 协议兼容性,允许 MySQL 应用程序和工具连接到 PostgreSQL。
关键特性
- MySQL 协议:与 MySQL 客户端和驱动程序兼容
- SQL 方言:支持 MySQL 特定的 SQL 语法
- 函数映射:MySQL 函数到 PostgreSQL 等效项的映射
- 连接器支持:与现有 MySQL 工具和连接器工作
OrioleDB(云原生)
云原生存储
开发中
OrioleDB 是一个云原生存储引擎,为现代云环境优化,提供无膨胀存储和 S3 集成。
关键特性
- 无膨胀存储:消除 PostgreSQL 传统的膨胀问题
- 云存储集成:原生 S3 存储支持
- OLTP 优化:为事务性工作负载优化
- 现代架构:为云原生环境设计
PolarDB PG(共享存储)
共享存储
企业版
PolarDB for PostgreSQL 提供类似 Aurora 的共享存储架构,具有中国国产化特性。
关键特性
- 共享存储:计算与存储分离架构
- 读写分离:多个只读实例共享存储
- 快速扩容:快速添加只读实例
- 国产化:符合中国信创要求
Supabase(BaaS)
后端即服务
开源
Supabase 将 PostgreSQL 转换为完整的后端即服务平台,提供 Firebase 的开源替代方案。
关键特性
- 实时数据库:实时订阅和同步
- 认证服务:内置用户认证系统
- 存储服务:文件存储和 CDN
- 边缘函数:无服务器函数支持
- 仪表板:Web 管理界面
Greenplum(数据仓库)
MPP 架构
企业版
Greenplum 是基于 PostgreSQL 的大规模并行处理数据仓库,专为分析性工作负载设计。
关键特性
- MPP 架构:大规模并行处理
- 列式存储:优化分析查询性能
- 分布式计算:跨节点并行查询执行
- ETL 工具:内置数据加载和转换工具
- 企业功能:备份、恢复和高可用性
通过选择合适的 PostgreSQL 内核分支,您可以在保持 PostgreSQL 生态系统优势的同时获得特定的功能和兼容性。每个内核都为不同的使用场景和迁移需求提供了解决方案。
7.3 - 可观测性基础设施
Pigsty 提供 无与伦比的可观测性,具有基于行业最佳实践构建的现代监控堆栈。 自动监控每个组件,具有 3000+ 指标、30+ 仪表板。

完整洞察:从高级集群健康到单个表统计的所有内容进行监控。完整洞察您基础设施的过去、现在和未来。
架构概述

Pigsty 的可观测性基础设施在一个连贯的、生产就绪的堆栈中利用经过实战考验的开源组件:
具有高级交互式可视化的仪表板
具有强大查询语言的时间序列存储
具有基于标签索引的集中式日志记录
告警聚合、管理和升级
服务架构
graph TB
subgraph "Observability Stack"
Grafana[Grafana :3000]
Prometheus[Prometheus :9058]
Loki[Loki :3100]
AlertManager[AlertManager :9059]
Pushgateway[Pushgateway :9091]
Blackbox[Blackbox :9115]
end
subgraph "Data Sources"
PG[(PostgreSQL)]
Node[Node Metrics]
Redis[(Redis)]
MinIO[(MinIO)]
end
subgraph "Exporters"
PGExp[pg_exporter]
NodeExp[node_exporter]
RedisExp[redis_exporter]
MinIOExp[minio_exporter]
end
PG --> PGExp
Node --> NodeExp
Redis --> RedisExp
MinIO --> MinIOExp
PGExp --> Prometheus
NodeExp --> Prometheus
RedisExp --> Prometheus
MinIOExp --> Prometheus
Prometheus --> Grafana
Prometheus --> AlertManager
Loki --> Grafana监控仪表板
多层级仪表板层次结构
Pigsty 提供按逻辑下钻层次结构组织的 26+ PostgreSQL 仪表板:
目的:整个环境的高级运营可见性 受众:运营团队、管理仪表板
目的:集群范围的 PostgreSQL 性能和健康 受众:数据库管理员、SRE 团队
目的:深入了解单个 PostgreSQL 实例 受众:数据库开发人员、性能工程师
目的:应用级数据库性能分析 受众:应用程序开发人员、数据库分析师
仪表板功能
无缝探索 从概览到详细信息,具有上下文链接
灵活的时间窗口 从实时到数月的历史分析
动态过滤 按集群、实例、数据库或自定义标签
可视化告警关联 与指标和告警详情的直接链接
Grafana 部署
增强的 Grafana 堆栈
Pigsty 使用强大的插件和数据源扩展 Grafana,用于高级分析:
目的:监控仪表板的基本可视化功能
目的:用于复杂数据分析的丰富交互式可视化
目的:连接到传统指标之外的多样化数据源
目的:为 PostgreSQL 环境优化的定制用户体验
配置和定制
Prometheus 堆栈
完整的监控生态系统
Pigsty 部署完整的 Prometheus 生态系统以实现全面的可观测性:
步骤 1
Prometheus 服务器
核心指标数据库 具有高级查询和存储功能
步骤 2
AlertManager
智能告警路由 具有抑制、分组和升级功能
步骤 3
Pushgateway
批处理作业指标收集 用于短暂工作负载和 cron 作业
步骤 4
Blackbox Exporter
网络连接监控 具有 HTTP、TCP 和 ICMP 探测
预配置告警规则
pg_exporter:高级 PostgreSQL 监控
自定义指标引擎
Pigsty 的 pg_exporter 是一个高度可定制的 PostgreSQL 指标收集器,支持 所有 PostgreSQL 版本,具有细粒度指标控制:
优势:灵活、轻量级且高度可配置
好处:异构 PostgreSQL 环境的单一 exporter
主机与基础设施监控
Pigsty v3.7 在受管节点上安装 node_exporter。启用相应模块后,会将 Node、
HAProxy、Keepalived、Nginx、Etcd、MinIO、Redis、PostgreSQL、PgBouncer 与
pgBackRest 目标注册到 Prometheus。端口和开关以 v3.7 标签中的角色默认值及
各模块参数页为准。
外部数据库监控
pgsql-monitor.yml 可注册现有 PostgreSQL 或云 RDS。请提供仅具有必要
pg_monitor 权限的监控连接串;Pigsty 只注册 pg_exporter 与 Grafana 数据源,
不会置备或修改被监控数据库。
数据分析与可视化平台
Grafana 既可查询 Prometheus 指标,也可查询 PostgreSQL 数据。内置仪表板通过 变量和 URL 链接实现下钻与上卷;ECharts 等随包提供的插件也可展示应用或 业务数据。
低代码应用开发
Grafana 面板可结合 PostgreSQL 查询构建内部运维视图。这属于可视化能力, 并不是独立的 Pigsty 部署模块或应用 API。
可复用基础设施
infra.yml 可以独立于 PGSQL 部署 INFRA。Nginx、DNSMasq、Prometheus、
AlertManager、Grafana 与 Loki 等服务均由已记录的 *_enabled 参数控制,
因而可以复用既有基础设施或与其共存。
最佳实践
- 控制指标基数,并根据可用磁盘设置保留周期。
- 备份 Grafana 配置,定期验证告警通知渠道。
- 监控端点暴露到可信网络之外时,应配置访问控制与 HTTPS。
- 监控监控系统本身,并定期检查存储增长。
限制与注意事项
v3.7 的 Prometheus 与 Loki 默认是单节点服务。高指标基数、长保留周期和复杂 仪表板需要额外容量规划。外部长周期存储和高可用监控架构属于人工集成, 不是 v3.7 内置模块。
7.4 - 高可用性
Pigsty 使用 Patroni 为 PostgreSQL 实现高可用性,确保自动故障转移。

主节点故障 RTO ≈ 30s,RPO < 1MB,副本故障 RTO≈0(重置当前连接)
概述
Pigsty 的 PostgreSQL 集群具有由 Patroni、Etcd 和 HAProxy 支持的内置高可用性。
当您在 PostgreSQL 集群中有两个或更多实例时,您就能够从硬件故障中自愈,无需任何进一步配置——只要集群中的任何实例存活,集群就能提供服务。客户端只需连接到集群中的任何节点即可获得完整服务,无需担心复制拓扑变化。
默认情况下,主节点故障的恢复时间目标(RTO)约为 30s ~ 60s,数据恢复点目标(RPO)< 1MB;对于备用节点故障,RPO = 0,RTO ≈ 0(瞬时)。在一致性优先模式下,保证故障转移期间零数据丢失:RPO = 0。这些指标可以根据您的实际硬件条件和可靠性要求 按需配置。
Pigsty 集成了 HAProxy 负载均衡器进行自动流量切换,为客户端提供多种访问方法,如 DNS/VIP/LVS。除了偶发的中断外,故障转移和切换对业务端几乎不可感知,这意味着应用程序不需要修改连接字符串或重启。
关键指标
高可用性解决的问题
高可用性解决关键的运营挑战:
提升可用性:RPO ≈ 0,RTO < 30s,增强数据保护
无缝维护:最小化维护窗口,运营便利
自愈能力:无需人工干预即可从硬件故障中自动恢复
读扩展:在备用实例间分布只读查询
具体优势
- 增强数据安全性:将数据安全 CIA 的可用性方面提升到新高度
- 滚动维护能力:实现最小停机时间的无缝维护
- 硬件故障恢复:无需人工干预即可从硬件故障中自愈
- 负载共享:只读请求可以分布在备用实例间
高可用性的成本
实施 HA 会引入某些权衡和要求:
基础设施要求:HA 需要至少 3 个节点 和额外的基础设施依赖。
资源要求
- 最小集群规模:至少 3 个节点以实现适当的共识
- 额外基础设施:需要共识存储(Etcd)和负载均衡器
- 资源开销:额外的 CPU、内存和网络资源
- 运营复杂性:增加的监控和管理要求
限制
高可用性 无法防止:
- 人为错误和操作失误
- 导致数据损坏的软件缺陷
- 逻辑数据删除或损坏
对于这些场景,需要额外的恢复策略:
- 延迟集群 防护逻辑损坏
- 时间点恢复 进行细粒度数据恢复
- 定期备份 用于灾难恢复场景
架构
Pigsty 的 HA 架构利用多组件设计消除单点故障:
集群管理:编排 PostgreSQL 进程并处理自动故障转移
共识存储:提供分布式配置和领导者选举
负载均衡器:路由流量并提供服务发现
虚拟 IP:用于无缝连接的可选第二层 VIP 绑定
组件角色
集群编排器
- 管理 PostgreSQL 服务器进程
- 处理自动故障转移和切换
- 监控集群健康和拓扑
- 配置流复制
- 提供集群管理 REST API
分布式配置存储
- 存储集群配置和状态
- 提供领导者选举机制
- 确保所有节点的一致视图
- 优雅处理网络分区
- 维护集群成员信息
流量路由器和负载均衡器
- 将读/写流量路由到适当的节点
- 为数据库实例提供健康检查
- 提供多个服务端点
- 处理连接池和负载分布
- 支持 SSL 终止和连接限制
虚拟 IP 管理
- 管理第二层虚拟 IP 地址
- 提供无缝客户端连接
- 在故障转移期间处理 VIP 迁移
- 支持多个 VIP 接口
- 用于简化客户端访问的可选组件
实现
Pigsty 的 HA 实现遵循 PostgreSQL 集群的成熟模式:
复制架构
步骤 1
流复制
PostgreSQL 使用内置流复制在主节点和备用节点之间进行数据同步。
步骤 2
基于共识的领导
Patroni 使用 Etcd 进行分布式共识来选举集群领导者并管理拓扑变化。
步骤 3
自动故障转移
当主节点失败时,Patroni 自动提升最新的备用节点成为新的主节点。
步骤 4
流量重路由
HAProxy 检测拓扑变化并自动将流量路由到新的主实例。
故障场景
主节点故障处理过程
- 检测:Patroni 检测主节点故障(15-30 秒)
- 领导者选举:Etcd 协调新领导者选择
- 提升:最新的备用节点被提升为主节点
- 重新配置:剩余的备用节点重新配置到新主节点
- 流量切换:HAProxy 将流量重定向到新主节点
写服务中断:故障转移过程中 15-30 秒
备用节点故障处理过程
- 检测:立即检测到备用节点故障
- 流量重路由:HAProxy 从池中移除故障节点
- 服务连续性:只读查询在剩余备用节点上继续
- 自动恢复:节点恢复时自动重新加入集群
最小影响:只读查询仅经历短暂中断
网络分区处理
- 防止脑裂:Etcd 共识防止多个主节点
- 仲裁要求:需要大多数节点进行操作
- 优雅降级:少数分区中的只读模式
- 自动恢复:分区愈合时恢复正常操作
仲裁依赖:需要大多数共识节点保持运行
权衡
Pigsty 提供可配置参数来平衡恢复速度和数据一致性:
恢复时间目标(RTO)
pg_rto 参数控制故障转移时间和敏感性:
较低的 RTO 值:
- ✅ 更快的故障转移响应
- ✅ 减少服务中断
- ❌ 更高的误报风险
- ❌ 可能导致不必要的故障转移
较高的 RTO 值:
- ✅ 更稳定,较少误报
- ✅ 对网络故障有更好的容忍度
- ❌ 更长的服务中断
- ❌ 对真实故障的延迟响应
恢复点目标(RPO)
pg_rpo 参数限制故障转移期间的潜在数据丢失:
较低的 RPO 值:
- ✅ 更好的数据一致性
- ✅ 最小的数据丢失风险
- ❌ 可能延迟故障转移
- ❌ 可能影响可用性
较高的 RPO 值:
- ✅ 更快的故障转移过程
- ✅ 更好的可用性
- ❌ 更多数据丢失的可能性
- ❌ 一致性权衡
配置示例
使用场景:金融系统、关键交易数据
使用场景:高流量应用、读重型工作负载
使用场景:大多数生产环境
网络质量影响
网络条件显著影响 HA 行为:
- 高质量网络:可以安全使用较低的 RTO 值
- 不稳定网络:需要较高的 RTO 以防止误报
- WAN 部署:需要仔细调整超时参数
- 本地网络:可以优化更快的故障转移
监控和可观测性
Pigsty 为 HA 集群健康提供全面监控:
关键指标
监控集群拓扑、领导者状态和成员健康
跟踪所有副本的复制延迟和同步状态
记录并分析故障转移事件及其影响
监控查询性能和连接健康
仪表板集成
Pigsty 包含用于 HA 监控的预构建 Grafana 仪表板:
- 集群概览:实时集群拓扑和健康
- 复制监控:延迟指标和同步状态
- 故障转移分析:历史故障转移事件和时间
- 性能指标:正常和故障转移场景下的查询性能
最佳实践
部署建议
反亲和性:在不同的物理主机、机架或可用区部署集群节点。
- 硬件多样性:使用不同的硬件配置以避免常见故障模式
- 网络冗余:确保集群节点间有多条网络路径
- 存储考虑:使用本地存储获得最佳性能,特定用例使用共享存储
- 监控设置:在投产前实施全面监控
运营指南
- 定期测试:在非生产环境中执行受控的故障转移测试
- 容量规划:为故障转移场景适当调整集群节点大小
- 备份策略:维护独立于 HA 设置的定期备份
- 文档:保持紧急程序运行手册的更新
常见陷阱
避免这些常见错误:
- 节点间网络带宽不足
- 复制延迟监控不充分
- 不定期测试故障转移程序
- 防火墙配置不正确
总结
Pigsty 的高可用性解决方案提供:
- 自动故障转移,RTO 不到一分钟
- 可配置一致性,具有 RPO 控制
- 自愈能力,用于硬件故障
- 负载均衡,用于读扩展
- 最小运营开销,具有自动化管理
Patroni、Etcd 和 HAProxy 的组合创建了一个强大的、生产就绪的 HA 解决方案,自动处理大多数故障场景,同时提供基于特定要求调整行为的灵活性。
高可用性不仅仅是技术——它是构建您的业务可以依赖的弹性系统。
7.5 - 灾难恢复
时间点恢复(PITR)允许将 PostgreSQL 集群回滚到过去的任何特定时刻,防止软件缺陷或人为错误导致的数据丢失。Pigsty 使用 pgBackRest 进行 PITR,具有可配置的备份策略,使用本地文件系统或 MinIO 等对象存储。

数据库的时间旅行:将您的集群回滚到任何时间点,防止高可用性无法解决的软件缺陷、人为错误和数据损坏场景。
概述
Pigsty 提供 企业级时间点恢复,具有零配置设置、自动备份和灵活的恢复选项。基于 pgBackRest 构建,支持 MinIO/S3,防护数据损坏、人为错误和逻辑灾难。
通过连续 WAL 归档最小化恢复点目标
增强数据完整性保护,防止损坏
通过灵活的恢复选项改进灾难恢复能力
PITR 工作原理
PITR 需要两个关键组件协同工作以实现时间点恢复:
基础备份 [#base-backups]
使用 pgBackRest 创建数据库集群快照,支持多种备份类型:
- **完整备份**:完整的数据库集群快照
- **增量备份**:仅自上次备份以来的变更
- **差异备份**:自上次完整备份以来的变更
- **计划备份**:通过 Crontab 配置的定期备份
WAL 归档 [#wal-archiving]
连续归档预写日志(WAL)段文件:
- **连续归档**:实时 WAL 文件保存
- **自动管理**:WAL 文件和清理自动处理
- **可选功能**:如果不需要 PITR 可以禁用
实现
Pigsty 提供两种默认备份策略,具有灵活的配置选项:
本地文件系统策略 [#local-filesystem-strategy]
- **频率**:每日完整备份
- **存储**:本地文件系统存储
- **使用场景**:单节点或本地开发环境
MinIO/S3 策略 [#minio-s3-strategy]
- **频率**:每周完整备份,每日增量备份
- **存储**:对象存储(MinIO、S3)
- **使用场景**:具有分布式存储的生产环境
配置选项
备份配置非常灵活,可以指定选项:
- 仓库类型:本地、S3 或其他支持的后端
- 保留策略:保留备份的时间长度
- 加密:安全备份存储
- 存储位置:多个备份目标
恢复选项
恢复操作应谨慎执行,因为它们将替换当前的数据库状态。
恢复命令允许恢复到各种时间点:
步骤 1
### 最新 WAL 归档 [#latest-wal-archive]
恢复到 WAL 归档中可用的最近点:
```bash
pg-pitr
```
步骤 2
### 特定时间戳 [#specific-timestamp]
恢复到确切的时间点:
```bash
pg-pitr --time="2022-12-30 14:44:44+08"
```
步骤 3
### 命名恢复点 [#named-restore-point]
恢复到之前创建的命名点:
```bash
pg-pitr --name="my-restore-point"
```
步骤 4
### 特定 LSN 或事务 ID [#specific-lsn-or-transaction-id]
恢复到特定的日志序列号或事务:
```bash
pg-pitr --lsn="0/1234567"
pg-pitr --xid="12345"
```
虽然 PITR 对数据恢复很强大,但理想情况下应该与高可用性解决方案结合使用,以全面保护数据免受逻辑和物理故障的影响。
7.6 - 基础设施即代码
Pigsty 提供 声明式 接口:在 配置 文件中描述一切,Pigsty 使用幂等的 playbooks 将其操作到期望的状态。它的工作原理类似于 Kubernetes CRD 和 Operator,但适用于任何节点上的数据库和基础设施:裸机或虚拟机。
基础设施即代码,数据库即代码:声明式 API 和幂等 Playbooks,GitOPS 工作得如魅力般。
声明模块
您可以在单个节点上声明模块:
并使用 playbooks 应用:
声明集群
要创建具有流复制的三节点 HA postgres 集群:
并使用以下命令应用:
声明集群内部
您可以深度定制数据库集群:
声明访问控制
定义高级访问控制规则:
Citus 分布式集群
声明一个水平分布的 Citus 集群:
Redis 集群
声明不同类型的 Redis 集群:
Etcd 集群
声明一个 3 节点 etcd 共识集群:
MinIO 集群
声明一个 3 节点 MinIO 对象存储集群:
Pigsty 使您能够声明式地描述整个基础设施并通过代码管理它,为您的数据库和基础设施操作提供一致性、可重复性和可扩展性。
7.7 - 无容器
Pigsty 运行在裸 Linux 上,我们支持主流 Linux 发行版,如 EL / Debian / Ubuntu,以及兼容的 Linux 发行版,如 Rocky Linux、AlmaLinux 等……
我们这样做是有目的的。为每个主版本 x PG 版本 x 操作系统架构编译和打包所有 postgres 相关包和数百个扩展到 RPM/DEB 是困难的……
但我相信这是正确的做法。所以我们不走 Docker、Podman 或 Kubernetes 这样的捷径。
7.8 - 应用模板
自托管 Supabase
运行 Odoo 开源 ERP
运行 Dify AI 工作流
运行官方管理 GUI 工具
7.10 - 本地优先
8 - 参考
Pigsty (/ˈpɪɡ staɪ/) 是一个电池级、FOSS PostgreSQL 发行版 作为本地优先的 RDS 替代方案。
轻松创建自愈的高可用 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 介绍。
8.1 - PG 发行版
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 集群
8.2 - RDS 替代
什么是 RDS?
您可以像 systemctl start postgresql 这样轻松地开始使用原始 PostgreSQL 内核,但这远不是生产级服务。
这就是人们为 AWS RDS 等托管 PostgreSQL 服务支付每 vCPU·月 160 美元的主要原因,甚至为传统的"企业"数据库服务支付更多费用。
构建和管理生产级 PostgreSQL 服务的专业知识既稀少又昂贵。
如果……
但是,如果您可以用几个命令在自己的服务器上构建企业级 PostgreSQL 服务,而且不需要许可费用,会怎么样? Pigsty 使您能够做到这一点。它为您提供具有 PITR、监控和告警、连接池等功能的 HA PostgreSQL 集群

这一切都从几个命令开始,您可以自己构建生产级 PostgreSQL 服务, 无需昂贵的许可证或专业知识。
8.3 - 整体架构
模块化架构和声明式接口!
- Pigsty 部署通过配置清单描述,并使用 ansible playbooks 实现。
- Pigsty 在 Linux 通用节点上工作,即裸机或虚拟机。
- Pigsty 使用模块化设计,可以自由组合以适应不同场景。
- 配置控制在哪里和如何使用参数安装模块
- Playbooks 将以幂等方式将节点调整到所需状态。
模块
Pigsty 使用模块化设计,有六个默认模块:PGSQL、INFRA、NODE、ETCD、REDIS 和 MINIO。
PGSQL:由 Patroni、Pgbouncer、HAproxy、PgBackrest 等驱动的自主 HA Postgres 集群…INFRA:本地 yum/apt 仓库、Prometheus、Grafana、Loki、AlertManager、PushGateway、Blackbox Exporter…NODE:将节点调整到所需状态,名称、时区、NTP、ssh、sudo、haproxy、docker、promtail、keepalivedETCD:分布式键值存储将用作高可用 Postgres 集群的 DCS。REDIS:独立主副本、哨兵、集群模式的 Redis 服务器与 Redis exporter。MINIO:S3 兼容的简单对象存储服务器,可用作 Postgres 的可选备份中心。
您可以以声明式方式自由组合它们。如果您想要主机监控,INFRA 和 NODE 就足够了。额外的 ETCD 和 PGSQL 用于 HA PG 集群。在多个节点上部署它们将形成 HA 集群。您可以重用 pigsty 基础设施并开发您的模块,考虑可选的 REDIS 和 MINIO 作为示例。
单例元数据
Pigsty 默认将安装在单个节点(裸机/虚拟机)上。install.yml playbook 将在当前节点上安装 INFRA、ETCD、PGSQL 和可选的 MINIO 模块,这将为您提供功能齐全的可观测性基础设施(Prometheus、Grafana、Loki、AlertManager、PushGateway、BlackboxExporter 等……)和一个开箱即用的 PostgreSQL 单例实例(名为 meta)。
此节点现在具有自监控系统、可视化工具集和具有自动配置 PITR 的 Postgres 数据库。您可以将此节点用于开发环境、测试、运行演示以及进行数据可视化和分析。或者,进一步向其添加更多节点!
监控
安装的 单例元数据 可用作管理节点和监控中心,将更多节点和数据库服务器纳入其监控和控制范围。
如果您想安装 Prometheus / Grafana 可观测性堆栈,Pigsty 为您提供最佳实践!它具有适用于 节点 和 PostgreSQL 的细粒度仪表板,无论这些节点或 PostgreSQL 服务器是否由 Pigsty 管理,您都可以通过简单的配置立即获得生产级监控和告警。
HA PG 集群
使用 Pigsty,您可以随心所欲地拥有自己的本地生产级 HA PostgreSQL RDS。
要创建这样的 HA PostgreSQL 集群,您所要做的就是描述它并运行 playbook:
这将为您提供以下集群,监控、副本、备份全部设置完成。
硬件故障由基于 patroni、etcd 和 haproxy 的自愈 HA 架构覆盖,在主节点故障的情况下将在 30 秒内执行自动故障转移。借助由 haproxy 支持的自愈流量控制,在切换或副本故障的情况下,客户端甚至可能根本不会注意到有故障。
软件故障、人为错误和数据中心故障由 pgbackrest 和可选的 MinIO 集群覆盖。这使您能够执行时间点恢复到任何时间(只要您的存储能够支持)
数据库即代码
Pigsty 遵循 IaC 和 GitOPS 哲学:Pigsty 部署由声明式 配置清单 描述,并通过幂等 playbooks 实现。
用户以声明式方式使用 参数 描述所需状态,playbooks 以幂等方式将目标节点调整为该状态。这就像 Kubernetes CRD 和 Operator,但适用于裸机和虚拟机。
以默认配置片段为例,它描述了一个安装了 INFRA、NODE、ETCD 和 PGSQL 模块的节点 10.10.10.10。
要实现它,请使用以下 playbooks:
执行常规管理任务将很简单。例如,如果您希望向现有的 HA PostgreSQL 集群添加新副本/数据库/用户,您只需在配置中添加一个主机并在其上运行该 playbook,例如:
您甚至可以使用这种方法管理许多 PostgreSQL 实体:用户/角色、数据库、服务、HBA 规则、扩展、模式等……
查看 PGSQL 配置 了解详情。
8.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+ 监控面板,覆盖了数据库监控、主机监控、连接池监控、负载均衡监控等方方面面,为用户提供无与伦比的可观测性体验。

Pigsty 提供了 638 与 PostgreSQL 有关的监控指标,而 AWS RDS 只有 99 个,阿里云 RDS 更是只有个位数指标:
此外,也有一些项目提供了监控 PostgreSQL 的能力,但都相对比较简单初级:
- pgwatch: 123 类指标
- pgmonitor : 156 类指标
- datadog : 69 类指标
- pgDash
- ClusterControl
- pganalyze
- Aliyun RDS : 8 类指标
- AWS RDS : 99 类指标
- Azure RDS
可维护性
| 指标 | 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 能力的软件与供应商
- Aiven: 闭源商业云托管方案
- Percona: 商业咨询,简易PG发行版
- ClusterControl:商业数据库管控软件
其他 Kubernetes Operator
Pigsty 拒绝在生产环境中使用 Kubernetes 管理数据库,因此与这些方案在生态位上存在差异。
- PGO
- StackGres
- CloudNativePG
- TemboOperator
- PostgresOperator
- PerconaOperator
- Kubegres
- KubeDB
- KubeBlocks
更多信息请参阅:
PostgreSQL 发行版生态
8.5 - 模块
核心模块
Pigsty 由多个模块组成。PINE 技术栈:PGSQL / INFRA / NODE / ETCD 对于自托管 Postgres RDS 服务是 必需的。
具有 PITR、IaC、ACL、监控和 437 扩展的 HA PG 集群
用于可观测性的 Nginx、仓库、DNS、NTP、Prometheus 和 Grafana 堆栈
将节点注册到所需状态并监控它,以及 VIP、HAProxy
可靠的分布式共识存储(DCS),为 PGSQL HA 提供支持
额外模块
Pigsty 还有一些 可选的 “奖励” 模块,它们与 PostgreSQL 配合良好,为您的数据基础设施带来额外价值。
S3 兼容的对象存储,可选的备份存储
高性能内存缓存,可选的数据结构服务器
容器运行时,可选用于运行无状态应用程序和工具
在 PostgreSQL 上兼容 MongoDB 协议,可选中间件
内核模块
Pigsty 允许使用 8 种特殊的 PostgreSQL 内核 分支,作为可选的就地替换:
原生分布式扩展
SQL Server 协议兼容
Oracle 语法和 PL/SQL 兼容
MySQL 协议兼容性
OLTP 优化的云原生存储引擎
类似 Aurora 的共享存储,符合中国合规要求
后端即服务,自托管 Firebase
大规模并行处理数据仓库
8.6 - FAQ
9 - 版本
| 版本 | 发布日期 | 摘要 | 发布页面 |
|---|---|---|---|
| v3.7.0 | 2025-12-02 | PG18 成为默认版本,437 个扩展,EL10 与 Debian13 的完整支持, PGEXT.CLOUD | v3.7.0 |
| v3.6.1 | 2025-08-15 | 例行 PG 小版本更新,PGDG 中国区域镜像,EL9,D13 存根 | v3.6.1 |
| v3.6.0 | 2025-07-30 | pgactive,MinIO / ETCD 改进,安装简化,配置梳理 | v3.6.0 |
| v3.5.0 | 2025-06-16 | PG18 beta,421 扩展,监控升级,代码重构 | v3.5.0 |
| v3.4.1 | 2025-04-05 | OpenHalo & OrioleDB,MySQL兼容,pgAdmin改进 | v3.4.1 |
| v3.4.0 | 2025-03-30 | 备份改进,自动证书,AGE,Ivory 全平台,本地化,架构与参数改进 | v3.4.0 |
| v3.3.0 | 2025-02-24 | 404 扩展,扩展目录,App 剧本,Nginx 定制,DocumentDB 支持 | v3.3.0 |
| v3.2.2 | 2025-01-23 | 390扩展,Omnigres支持,Mooncake,Citus13与PG17支持 | v3.2.2 |
| v3.2.1 | 2025-01-12 | 350扩展,Ivory4,Citus强化,Odoo模板 | v3.2.1 |
| v3.2.0 | 2024-12-24 | 扩展管理 CLI ,Grafana 强化,ARM64 扩展补完 | v3.2.0 |
| v3.1.0 | 2024-11-24 | PG 17 升默认大版本,配置简化,Ubuntu24与ARM 支持,Supabase,MinIO 改进 | v3.1.0 |
| v3.0.4 | 2024-10-30 | PG 17 扩展,OLAP 全家桶,pg_duckdb | v3.0.4 |
| v3.0.3 | 2024-09-27 | PostgreSQL 17,Etcd 运维优化,IvorySQL 3.4,PostGIS 3.5 | v3.0.3 |
| v3.0.2 | 2024-09-07 | 精简安装模式,PolarDB 15支持,监控视图更新 | v3.0.2 |
| v3.0.1 | 2024-08-31 | 例行问题修复,Patroni 4支持,Oracle兼容性改进 | v3.0.1 |
| v3.0.0 | 2024-08-25 | 333个扩展插件,可插拔内核,MSSQL,Oracle,PolarDB 兼容性 | v3.0.0 |
| v2.7.0 | 2024-05-20 | 扩展大爆炸,新增20+强力扩展插件,与多款Docker应用 | v2.7.0 |
| v2.6.0 | 2024-02-28 | PG 16 作为默认大版本,引入 ParadeDB 与 DuckDB 等扩展 | v2.6.0 |
| v2.5.1 | 2023-12-01 | 例行小版本更新,PG16重要扩展支持 | v2.5.1 |
| v2.5.0 | 2023-09-24 | Ubuntu/Debian支持:bullseye, bookworm, jammy, focal | v2.5.0 |
| v2.4.1 | 2023-09-24 | Supabase/PostgresML支持与各种新扩展:graphql, jwt, pg_net, vault | v2.4.1 |
| v2.4.0 | 2023-09-14 | PG16,监控RDS,服务咨询支持,新扩展:中文分词全文检索/图/HTTP/嵌入等 | v2.4.0 |
| v2.3.1 | 2023-09-01 | 带HNSW的PGVector,PG 16 RC1, 文档翻新,中文文档,例行问题修复 | v2.3.1 |
| v2.3.0 | 2023-08-20 | 主机VIP, ferretdb, nocodb, MySQL存根, CVE修复 | v2.3.0 |
| v2.2.0 | 2023-08-04 | 仪表盘 & 置备重做,UOS 兼容性 | v2.2.0 |
| v2.1.0 | 2023-06-10 | 支持 PostgreSQL 12 ~ 16beta | v2.1.0 |
| v2.0.2 | 2023-03-31 | 新增 pgvector 支持,修复 MinIO CVE | v2.0.2 |
| v2.0.1 | 2023-03-21 | v2 错误修复,安全增强,升级 Grafana 版本 | v2.0.1 |
| v2.0.0 | 2023-02-28 | 架构大升级,兼容性、安全性、可维护性显著增强 | v2.0.0 |
| v1.5.1 | 2022-06-18 | Grafana 安全性修复 | v1.5.1 |
| v1.5.0 | 2022-05-31 | Docker 应用程序支持 | v1.5.0 |
| v1.4.1 | 2022-04-20 | 错误修复 & 英文文档完整翻译 | v1.4.1 |
| v1.4.0 | 2022-03-31 | MatrixDB 支持,分离 INFRA/NODES/PGSQL/REDIS模块 | v1.4.0 |
| v1.3.0 | 2021-11-30 | PGCAT 重整 & PGSQL 增强 & Redis Beta支持 | v1.3.0 |
| v1.2.0 | 2021-11-03 | 默认 PGSQL 版本升级至 14 | v1.2.0 |
| v1.1.0 | 2021-10-12 | 主页, JupyterLab, PGWEB, Pev2 & pgbadger | v1.1.0 |
| v1.0.0 | 2021-07-26 | v1 正式版, 监控系统重整 | v1.0.0 |
| v0.9.0 | 2021-04-04 | Pigsty 图形界面, 命令行界面, 日志集成 | v0.9.0 |
| v0.8.0 | 2021-03-28 | 服务置备,定制对外暴露的数据库服务 | v0.8.0 |
| v0.7.0 | 2021-03-01 | 仅监控部署,监控现有 PostgreSQL 实例 | v0.7.0 |
| v0.6.0 | 2021-02-19 | 架构增强,将PG与Consul解耦 | v0.6.0 |
| v0.5.0 | 2021-01-07 | 支持在配置中定义业务数据库/用户 | v0.5.0 |
| v0.4.0 | 2020-12-14 | 支持 PostgreSQL 13,添加官方文档 | v0.4.0 |
| v0.3.0 | 2020-10-22 | 虚拟机置备方案正式定稿 | v0.3.0 |
| v0.2.0 | 2020-07-10 | PG监控系统第六版正式发布 | v0.2.0 |
| v0.1.0 | 2020-06-20 | 在生产仿真测试环境中验证通过 | v0.1.0 |
| v0.0.5 | 2020-08-19 | 离线安装模式:无需互联网访问即可交付 | v0.0.5 |
| v0.0.4 | 2020-07-27 | 将 Ansible 剧本重构为 Role | v0.0.4 |
| v0.0.3 | 2020-06-22 | 接口设计改进 | v0.0.3 |
| v0.0.2 | 2020-04-30 | 首次提交 | v0.0.2 |
| v0.0.1 | 2019-05-15 | 概念原型 | v0.0.1 |
9.1 - Pigsty 发布
Pigsty v3.7.0
亮点特性
- PostgreSQL 18 深度支持,成为默认 PG 大版本,扩展已就位!
- 新增 EL10 / Debian 13 操作系统支持,总数达 14 个!
- 新增 PostgresQL 扩展数量,总数达到 437 个!
- 支持了 Ansible 2.19 破坏性重构以后的版本!
- Supabase,PolarDB, IvorySQL, Percona 内核更新至最新版本!
- 优化了 PG 默认参数的设置逻辑,更充分利用资源。
版本更新
- PostgreSQL 18.1, 17.7, 16.11, 15.15, 14.20, 13.23
- Patroni 4.1.0
- Pgbouncer 1.25.0
- pg_exporter 1.0.3
- pgbackrest 2.57.0
- Supabase 2025-11
- PolarDB 15.15.5.0
- FerretDB 2.7.0
- DuckDB 1.4.2
- Etcd 3.6.6
- pig 0.7.4
更多软件版本更新信息,请参考:
API变化
- 为并行执行的相关参数设置了更合理的优化策略,详见 调参说明
- 在
rich与full模板中,不再默认安装 citus 扩展,因为 citus 尚未支持 PG 18 - PG 参数模板中,新增 duckdb 系列扩展存根。
- 为
min_wal_size,max_wal_size,max_slot_wal_keep_size设置 200,2000,3000 GB 的封顶上限值。 - 为
temp_file_limit设置 200 GB 的封顶上限,OLAP 设置为 2 TB。 - 适当增大连接池默认链接数量
- 新增
prometheus_port参数,且默认值为9058,避开与 EL10 RHEL Web Console 端口的冲突。 - 修改
alertmanager_port参数的默认值为9059,避开与 Kafka SSL 端口的潜在冲突。 - 新增
pg_pkg的pg_pre子任务,在安装 PG 包前移除 el9+ 上导致 LLVM 冲突的bpftool,python3-perf - 在 Debian / Ubuntu 的默认仓库定义中新增 llvm 仓库模块
- 修复了
infra-rm.yml移除软件包的逻辑
兼容性修复
- 修复了 Ubuntu/Debian 信任 CA 时 Warning 返回码错误的问题。
- 修复了 Ansible 2.19 引入的大量兼容性问题,确保在新老版本上正常运行。
- 为 seq 类变量添加了 int 类型转换,确保兼容
- 将大量 with_items 修改为 loop 语法,确保兼容
- 为密钥交换变量添加一层列表嵌套,避免在新版本下针对字符串进行字符迭代。
- 将 range 用例显式转换为 list 后使用
- 修改了 name,port 等标记保留的变量命名
- 将
play_hosts修改为ansible_play_hosts - 为部分字符串类型添加了 string 强制类型转换,避免运行时错误。
- EL10 逻辑适配:
- 修复了 EL10 缺少 ansible-collection-community-crypto 无法生成密钥的问题
- 修复了 EL10 缺少 ansible 逻辑包的问题
- 移除 modulemd_tools flamegraph timescaledb-tool
- 使用 java-21-openjdk 替代 java-17-openjdk
- aarch64 YUM 仓库名称问题
- Debian 13 逻辑适配
- 使用
bind9-dnsutils替代dnsutils - Ubuntu 24 修复
- 临时移除了上游依赖崩溃的 tcpdump 包
校验和
v3.6.1
亮点特性
- PostgreSQL 17.6, 16.10, 15.14, 14.19, 13.22, 以及 18 Beta 3 支持
- 在中国大陆地区使用 Pigsty 提供的 PGDG APT/YUM 镜像解决更新断供问题。
- 新的网站首页: https://pgsty.com
- 增加了 el10, debian 13 的实现存根,以及 el10 的 Terraform 镜像
基础设施软件包更新
- Grafana 12.1.0
- pg_exporter 1.0.2
- pig 0.6.1
- vector 0.49.0
- redis_exporter 1.75.0
- mongo_exporter 0.47.0
- victoriametrics 1.123.0
- victorialogs: 1.28.0
- grafana-victoriametrics-ds 0.18.3
- grafana-victorialogs-ds 0.19.3
- grafana-infinity-ds 3.4.1
- etcd 3.6.4
- ferretdb 2.5.0
- tigerbeetle 0.16.54
- genai-toolbox 0.12.0
数据库软件包更新
- pg_search 0.17.3
API变更
- 从
node_kernel_modules默认值中移除br_filter内核模块。 - 在添加 PGDG YUM 源时使用操作大版本号,不再使用小版本号。
校验和
v3.6.0
亮点特性
- 全新文档站: https://doc.pgsty.com
- 新增
pgsql-pitr剧本与备份/恢复教程,改善 PITR 体验, - 新增内核支持:Percona PG TDE (PG17)
- 优化 Supabase 自建体验,更新至最新版本,并解决了一系列官方模板的问题
- 简化安装步骤,默认使用在线安装,更加高效简单,bootstrap 过程(安装ansible)嵌入安装脚本中
设计改进
- 改善了 Etcd 模块的实现,新增独立的
etcd-rm.yml剧本与扩缩容 SOP 脚本。 - 改善了 MinIO 模块的实现,支持 HTTP 模式,创建不同属性的三个桶供开箱即用
- 重新调整梳理了所有配置模板,使用更为便利
- 针对中国大陆使用速度更快的 Docker Registry 镜像站
- 优化了 tuned 操作系统参数模板,针对现代硬件与 NVMe 磁盘优化
- 新增扩展
pgactive用于多主复制与亚秒级故障切换 - 调整
pg_fs_main/pg_fs_backup默认值,简化文件目录结构设计
问题修复
- 修复了 pgbouncer 配置文件的错误 by @housei-zzy
- 修复了 OrioleDB 在 Debian 平台上的问题
- 修复了 tuned shm 配置参数的问题
- 离线软件包直接使用 PGDG 源,避免使用断开同步的镜像站点
- 修复了 IvorySQL libxcrypt 依赖的问题
- 替换了破损与缓慢的 EPEL 软件仓库站点
- 修复了
haproxy_enabled标记位的功能
基础设施软件包更新
新增 Victoria Metrics / Victoria Logs 相关包
- genai-toolbox 0.9.0 (new)
- victoriametrics 1.120.0 -> 1.121.0 (重构)
- vmutils 1.121.0 (重命名 victoria-metrics-utils)
- grafana-victoriametrics-ds 0.15.1 -> 0.17.0
- victorialogs 1.24.0 -> 1.25.1 (重构)
- vslogcli 1.24.0 -> 1.25.1
- vlagent 1.25.1 (新增)
- grafana-victorialogs-ds 0.16.3 -> 0.18.1
- prometheus 3.4.1 -> 3.5.0
- grafana 12.0.0 -> 12.0.2
- vector 0.47.0 -> 0.48.0
- grafana-infinity-ds 3.2.1 -> 3.3.0
- keepalived_exporter 1.7.0
- blackbox_exporter 0.26.0 -> 0.27.0
- redis_exporter 1.72.1 -> 1.77.0
- rclone 1.69.3 -> 1.70.3
数据库软件包更新
- PostgreSQL 18 Beta2 更新
- pg_exporter 1.0.1,更新至最新依赖并提供 Docker 镜像
- pig 0.6.0,更新了最新扩展与仓库列表,带有
pig install子命令 - vip-manager 3.0.0 -> 4.0.0
- ferretdb 2.2.0 -> 2.3.1
- dblab 0.32.0 -> 0.33.0
- duckdb 1.3.1 -> 1.3.2
- etcd 3.6.1 -> 3.6.3
- ferretdb 2.2.0 -> 2.4.0
- juicefs 1.2.3 -> 1.3.0
- tigerbeetle 0.16.41 -> 0.16.50
- pev2 1.15.0 -> 1.16.0
PG扩展包更新
- OrioleDB 1.5 beta12
- OriolePG 17.11
- plv8 3.2.3 -> 3.2.4
- postgresql_anonymizer 2.1.1 -> 2.3.0
- pgvectorscale 0.7.1 -> 0.8.0
- wrappers 0.5.0 -> 0.5.3
- supautils 2.9.1 -> 2.10.0
- citus 13.0.3 -> 13.1.0
- timescaledb 2.20.0 -> 2.21.1
- vchord 0.3.0 -> 0.4.3
- pgactive 2.1.5 (new)
- documentdb 0.103.0 -> 0.105.0
- pg_search 0.17.0
API变更
pg_fs_backup:重命名为pg_fs_backup,默认值为/data/backups。pg_rm_bkup:重命名为pg_rm_backup,默认值为true。pg_fs_main:现在默认值调整为/data/postgres。nginx_cert_validity:新增参数,用于控制 Nginx 自签名证书的有效期,默认为397d。minio_buckets:默认值调整为创建名为pgsql、meta、data的三个桶。minio_users:移除dba用户,新增s3user_meta和s3user_data用户,分别对应meta和data桶。minio_https:新增参数,允许配置 MinIO 使用 HTTP 模式。minio_provision:新增参数,允许跳过 MinIO 置备阶段(跳过桶和用户的创建)。minio_safeguard:新增参数,启用后会在执行minio-rm.yml时中止操作。minio_rm_data:新增参数,控制在执行minio-rm.yml时是否删除 minio 数据目录。minio_rm_pkg:新增参数,控制在执行minio-rm.yml时是否卸载 minio 软件包。etcd_learner:新增参数,允许 etcd 以学习者身份初始化。etcd_rm_data:新增参数,控制在执行etcd-rm.yml时是否删除 etcd 数据目录。etcd_rm_pkg:新增参数,控制在执行etcd-rm.yml时是否卸载 etcd 软件包。
校验和
v3.5.0
亮点特性
- 支持 PG 18 (Beta),扩展更新,总数达到 421 个
- OrioleDB 与 OpenHalo 内核在全平台上可用
- 可使用
pig do子命令代替bin脚本 - Supabase 自建加强,解决若干遗留问题,例如复制延迟与密钥分发
- 代码重构与架构优化,优化了 Postgres 与 Pgbouncer 默认参数
- 更新了 Grafana 12, pg_exporter 1.0 与相关插件,翻修面板
- 支持 PostgreSQL 18
- 通过 pg_exporter 1.0.0 支持 PG18 监控指标
- 通过 pig 0.4.1 支持 PG18 安装 Alias。
- 提供
pg18配置模板 - 重构
pgsql模块 - PGSQL 重构,将 PG 监控抽离为单独的
pg_monitor角色,移除clean逻辑 - 去除冗余重复的任务,合并同类项,精简配置。移除
dir/utils任务块 - 所有扩展默认安装至
extensions模式中(与 supabase 安全实践保持一致) - 重命名模板文件,移除所有
.j2后缀 - 为所有模板中的
monitor函数添加SET命令清空search_path,遵循 Supabase 安全最佳实践。 - 调整 pgbouncer 默认参数,增大默认链接池大小,设置链接池清理查询。
- 新增参数
pgbouncer_ignore_param,允许配置 pgbouncer 忽略的参数列表 - 新增任务
pg_key用于生成pgsodium所需的服务端密钥 - 针对 PG 17 默认启用
sync_replication_slots - 重新调整了子任务标签,使其更符合配置小节的拆分逻辑
- 重构
pg_remove模块 - 重命名参数:
pg_rm_data,pg_rm_bkup,pg_rm_pkg用于控制删除的内容 - 重新调整角色代码结构,使用更清楚的标签进行划分
- 新增
pg_monitor模块 pgbouncer_exporter现在不再和pg_exporter共享配置文件- 新增了 TimescaleDB, Citus,pg_wait_event 的监控指标。
- 使用
pg_exporter1.0.0 ,更新了 PG16/17/18 相关监控指标。 - 使用更为紧凑,全新设计的指标收集器配置文件。
- Supabase 加强 (感谢来自 @lawso017 的贡献!)
- 将 Supabase 容器镜像与数据库模式更新至最新版本
- 现在默认支持
pgsodium服务端密钥加载 - 通过 supa-kick 定时任务解决 logflare 无法及时更新复制进度的问题
- 为 monitor 模式中的函数添加
set search_path子句以遵循安全最佳实践 - CLI 新增
pig do命令,允许通过命令行工具替代bin/中的 Shell 脚本 - 监控系统更新
- 更新 Grafana 大版本至 12.0.0,更新相关插件/数据源软件包
- 更新 Postgres 数据源 uid 命名方式(以适应新的
uid长度限制与字符限制) - 新增了 Static Datasource
- 更新了现有 Dashboard,修复若干遗留问题
基础设施软件包更新
- pig 0.4.2
- duckdb 1.3.0
- etcd 3.6.0
- vector 0.47.0
- minio 20250422221226
- mcli 20250416181326
- pev 1.5.0
- rclone 1.69.3
- mtail 3.0.8 (new)
可观测性软件包更新
- grafana 12.0.0
- grafana-victorialogs-ds 0.16.3
- grafana-victoriametrics-ds 0.15.1
- grafana-infinity-ds 3.2.1
- grafana_plugins 12.0.0
- prometheus 3.4.0
- pushgateway 1.11.1
- nginx_exporter 1.4.2
- pg_exporter 1.0.0
- pgbackrest_exporter 0.20.0
- redis_exporter 1.72.1
- keepalived_exporter 1.6.2
- victoriametrics 1.117.1
- victoria_logs 1.22.2
数据库软件包更新
- PostgreSQL 17.5, 16.9, 15.13, 14.18, 13.21
- PostgreSQL 18beta1 支持
- pgbouncer 1.24.1
- pgbackrest 2.55
- pgbadger 13.1
Postgres 扩展包更新
- spat 0.1.0a4 新扩展
- pgsentinel 1.1.0 新扩展
- pgdd 0.6.0 (pgrx 0.14.1) 新扩展
- convert 0.0.4 (pgrx 0.14.1) 新扩展
- pg_tokenizer.rs 0.1.0 (pgrx 0.13.1)
- pg_render 0.1.2 (pgrx 0.12.8)
- pgx_ulid 0.2.0 (pgrx 0.12.7)
- pg_idkit 0.3.0 (pgrx 0.14.1)
- pg_ivm 1.11.0
- orioledb 1.4.0 beta11 新增 debian/ubuntu 支持
- openhalo 14.10 新增 debian/ubuntu 支持
- omnigres 20250507 (在 d12/u22 编译最新版本失败)
- citus 12.0.3
- timescaledb 2.20.0 (移除 PG14 支持)
- supautils 2.9.2
- pg_envvar 1.0.1
- pgcollection 1.0.0
- aggs_for_vecs 1.4.0
- pg_tracing 0.1.3
- pgmq 1.5.1
- tzf-pg 0.2.0 (pgrx 0.14.1)
- pg_search 0.15.18 (pgrx 0.14.1)
- anon 2.1.1 (pgrx 0.14.1)
- pg_parquet 0.4.0 (0.14.1)
- pg_cardano 1.0.5 (pgrx 0.12) -> 0.14.1
- pglite_fusion 0.0.5 (pgrx 0.12.8) -> 14.1
- vchord_bm25 0.2.1 (pgrx 0.13.1)
- vchord 0.3.0 (pgrx 0.13.1)
- pg_vectorize 0.22.1 (pgrx 0.13.1)
- wrappers 0.4.6 (pgrx 0.12.9)
- timescaledb-toolkit 1.21.0 (pgrx 0.12.9)
- pgvectorscale 0.7.1 (pgrx 0.12.9)
- pg_session_jwt 0.3.1 (pgrx 0.12.6) -> 0.12.9
- pg_timetable 5.13.0
- ferretdb 2.2.0
- documentdb 0.103.0 (新增 aarch64 支持)
- pgml 2.10.0 (pgrx 0.12.9)
- sqlite_fdw 2.5.0 (fix pg17 deb)
- tzf 0.2.2 0.14.1 (rename src)
- pg_vectorize 0.22.2 (pgrx 0.13.1)
- wrappers 0.5.0 (pgrx 0.12.9)
校验和
v3.4.1
GitHub 发布页面:v3.4.1
- 在 EL 系统上增加了对 MySQL 协议兼容 PostgreSQL 内核的支持:openHalo
- 在 EL 系统上增加了对 OLTP 增强 PostgreSQL 内核的支持:orioledb
- 优化了 pgAdmin 9.2 应用模板,具有自动服务器列表更新和 pgpass 密码填充功能
- 将 PG 默认最大连接数增加到 250、500、1000
- 从 EL8 中删除了有依赖错误的
mysql_fdw扩展
基础设施更新
- pig 0.3.4
- etcd 3.5.21
- restic 0.18.0
- ferretdb 2.1.0
- tigerbeetle 0.16.34
- pg_exporter 0.8.1
- node_exporter 1.9.1
- grafana 11.6.0
- zfs_exporter 3.8.1
- mongodb_exporter 0.44.0
- victoriametrics 1.114.0
- minio 20250403145628
- mcli 20250403170756
扩展更新
- 将 pg_search 升级到 0.15.13
- 将 citus 升级到 13.0.3
- 将 timescaledb 升级到 2.19.1
- 将 pgcollection RPM 升级到 1.0.0
- 将 pg_vectorize RPM 升级到 0.22.1
- 将 pglite_fusion RPM 升级到 0.0.4
- 将 aggs_for_vecs RPM 升级到 1.4.0
- 将 pg_tracing RPM 升级到 0.1.3
- 将 pgmq RPM 升级到 1.5.1
校验和
v3.4.0
GitHub 发布页面:v3.4.0
介绍博客:Pigsty v3.4 MySQL 兼容性和全面增强
新功能
- 增加了新的 pgBackRest 备份监控指标和仪表板
- 增强了 Nginx 服务器配置选项,支持自动 Certbot 签发
- 现在优先使用 PostgreSQL 内置的
C/C.UTF-8区域设置 - IvorySQL 4.4 现在在所有平台上完全支持(RPM/DEB 在 x86/ARM 上)
- 增加了新的软件包:Juicefs、Restic、TimescaleDB EventStreamer
- Apache AGE 图数据库扩展现在在 EL 上完全支持 PostgreSQL 13–17
- 改进了
app.ymlplaybook:无需额外配置即可启动标准 Docker 应用 - 升级 Supabase、Dify 和 Odoo 应用模板到最新版本
- 增加 electric 应用模板,本地优先的 PostgreSQL 同步引擎
基础设施包
- +restic 0.17.3
- +juicefs 1.2.3
- +timescaledb-event-streamer 0.12.0
- Prometheus 3.2.1
- AlertManager 0.28.1
- blackbox_exporter 0.26.0
- node_exporter 1.9.0
- mysqld_exporter 0.17.2
- kafka_exporter 1.9.0
- redis_exporter 1.69.0
- pgbackrest_exporter 0.19.0-2
- DuckDB 1.2.1
- etcd 3.5.20
- FerretDB 2.0.0
- tigerbeetle 0.16.31
- vector 0.45.0
- VictoriaMetrics 1.113.0
- VictoriaLogs 1.17.0
- rclone 1.69.1
- pev2 1.14.0
- grafana-victorialogs-ds 0.16.0
- grafana-victoriametrics-ds 0.14.0
- grafana-infinity-ds 3.0.0
PostgreSQL 相关
- Patroni 4.0.5
- PolarDB 15.12.3.0-e1e6d85b
- IvorySQL 4.4
- pgbackrest 2.54.2
- pev2 1.14
- WiltonDB 13.17
PostgreSQL 扩展
- pgspider_ext 1.3.0(新扩展)
- apache age 13–17 el rpm (1.5.0)
- timescaledb 2.18.2 → 2.19.0
- citus 13.0.1 → 13.0.2
- documentdb 1.101-0 → 1.102-0
- pg_analytics 0.3.4 → 0.3.7
- pg_search 0.15.2 → 0.15.8
- pg_ivm 1.9 → 1.10
- emaj 4.4.0 → 4.6.0
- pgsql_tweaks 0.10.0 → 0.11.0
- pgvectorscale 0.4.0 → 0.6.0 (pgrx 0.12.5)
- pg_session_jwt 0.1.2 → 0.2.0 (pgrx 0.12.6)
- wrappers 0.4.4 → 0.4.5 (pgrx 0.12.9)
- pg_parquet 0.2.0 → 0.3.1 (pgrx 0.13.1)
- vchord 0.2.1 → 0.2.2 (pgrx 0.13.1)
- pg_tle 1.2.0 → 1.5.0
- supautils 2.5.0 → 2.6.0
- sslutils 1.3 → 1.4
- pg_profile 4.7 → 4.8
- pg_snakeoil 1.3 → 1.4
- pg_jsonschema 0.3.2 → 0.3.3
- pg_incremental 1.1.1 → 1.2.0
- pg_stat_monitor 2.1.0 → 2.1.1
- ddl_historization 0.7 → 0.0.7(错误修复)
- pg_sqlog 3.1.7 → 1.6(错误修复)
- pg_random 删除开发后缀(错误修复)
- asn1oid 1.5 → 1.6
- table_log 0.6.1 → 0.6.4
接口变更
- 增加了新的 Docker 参数:
docker_data和docker_storage_driver(#521 由 @waitingsong 提供) - 增加了新的基础设施参数:
alertmanager_port,让您指定 AlertManager 端口 - 增加了新的基础设施参数:
certbot_sign,在 nginx 初始化期间申请证书?(默认为 false) - 增加了新的基础设施参数:
certbot_email,指定通过 Certbot 请求证书时使用的邮箱 - 增加了新的基础设施参数:
certbot_options,指定 Certbot 的额外参数 - 更新 IvorySQL,从 IvorySQL 4.4 开始将其默认二进制文件放在
/usr/ivory-4下 - 将
pg_lc_ctype和其他区域相关参数的默认值从en_US.UTF-8更改为C - 对于 PostgreSQL 17,如果使用
UTF8编码与C或C.UTF-8区域,PostgreSQL 的内置本地化规则现在优先 configure自动检测 PG 版本和环境是否都支持C.utf8,并相应调整区域相关选项- 将默认 IvorySQL 二进制路径设置为
/usr/ivory-4 - 更新
pg_packages的默认值为pgsql-main patroni pgbouncer pgbackrest pg_exporter pgbadger vip-manager - 更新
repo_packages的默认值为[node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-utility, extra-modules] - 从
/etc/profile.d/node.sh中删除LANG和LC_ALL环境变量设置 - 现在使用
bento/rockylinux-8和bento/rockylinux-9作为 EL 的 Vagrant box 镜像 - 增加了新别名
extra_modules,包含额外的可选模块 - 更新 PostgreSQL 别名:
postgresql、pgsql-main、pgsql-core、pgsql-full - GitLab 仓库现在包含在可用模块中
- Docker 模块已合并到基础设施模块中
node.ymlplaybook 现在包含node_pip任务,在每个节点上配置 pip 镜像pgsql.ymlplaybook 现在包含pgbackrest_exporter任务,用于收集备份指标Makefile现在允许使用META/PKG环境变量- 增加
/pg/spool目录作为 pgBackRest 的临时存储 - 默认禁用 pgBackRest 的
link-all选项 - 默认为 MinIO 仓库启用块级增量备份
错误修复
- 修复
pg-backup中的退出状态码(#532 由 @waitingsong 提供) - 在
pg-tune-hugepage中,限制 PostgreSQL 仅使用大页面(#527 由 @waitingsong 提供) - 修复
pg-role任务中的逻辑错误 - 纠正大页面配置参数的类型转换
- 修复
slim模板中node_repo_modules的默认值问题
校验和
v3.3.0
- 可用扩展总数增加到 404!
- PostgreSQL 二月小版本更新:17.4、16.8、15.12、14.17、13.20
- 新功能:
app.yml脚本,用于自动安装 Odoo、Supabase、Dify 等应用。 - 新功能:在
infra_portal中进一步自定义 Nginx 配置。 - 新功能:增加 Certbot 支持,快速申请免费 HTTPS 证书。
- 新功能:
pg_default_extensions现在支持纯文本扩展列表。 - 新功能:默认仓库现在包含 mongo、redis、groonga、haproxy 等。
- 新参数:
node_aliases,为节点添加命令别名。 - 修复:解决 Bootstrap 脚本中的默认 EPEL 仓库地址问题。
- 改进:为 Debian Security 仓库添加阿里云镜像。
- 改进:IvorySQL 内核的 pgBackRest 备份支持。
- 改进:PolarDB 的 ARM64 和 Debian/Ubuntu 支持。
- pg_exporter 0.8.0 现在支持 pgbouncer 1.24 中的新指标。
- 新功能:
git、docker、systemctl等常用命令的自动补全 #506 #507 由 @waitingsong 提供。 - 改进:优化
pgbouncer配置模板中的ignore_startup_parameters#488 由 @waitingsong 提供。 - 新主页设计:Pigsty 的网站现在拥有全新的外观。
- 扩展目录:RPM/DEB 二进制包的详细信息和下载链接。
- 扩展构建:
pigCLI 现在自动设置 PostgreSQL 扩展构建环境。
更多版本信息请参考 GitHub 发布页面。
v2.7.0
2024-05-16:扩展大爆发,新的 docker 应用
https://github.com/pgsty/pigsty/releases/tag/v2.7.0
v2.6.0
2024-02-29:PG 16 作为默认版本,ParadeDB 和 DuckDB
https://github.com/pgsty/pigsty/releases/tag/v2.6.0
v2.5.1
2023-12-01:常规更新,pg16 主要扩展
https://github.com/pgsty/pigsty/releases/tag/v2.5.1
v2.5.0
2023-10-24:Ubuntu/Debian 支持:bullseye、bookworm、jammy、focal
https://github.com/pgsty/pigsty/releases/tag/v2.5.0
v2.4.1
2023-09-24:Supabase/PostgresML 支持,graphql、jwt、pg_net、vault
https://github.com/pgsty/pigsty/releases/tag/v2.4.1
v2.4.0
2023-09-14:PG16、RDS 监控、新扩展
https://github.com/pgsty/pigsty/releases/tag/v2.4.0
v2.3.1
2023-09-01:带 HNSW 的 PGVector、PG16 RC1、中文文档、错误修复
https://github.com/pgsty/pigsty/releases/tag/v2.3.1
v2.3.0
2023-08-20:PGSQL/REDIS 更新、NODE VIP、Mongo/FerretDB、MYSQL 存根
https://github.com/pgsty/pigsty/releases/tag/v2.3.0
v2.2.0
2023-08-04:仪表板和置备大修,UOS 兼容性
https://github.com/pgsty/pigsty/releases/tag/v2.2.0
v2.1.0
2023-06-10:PostgreSQL 12 ~ 16beta 支持
https://github.com/pgsty/pigsty/releases/tag/v2.1.0
v2.0.2
2023-03-31:添加 pgvector 支持并修复 MinIO CVE
https://github.com/pgsty/pigsty/releases/tag/v2.0.2
v2.0.1
2023-03-21:v2 错误修复,安全增强和升级 grafana 版本
https://github.com/pgsty/pigsty/releases/tag/v2.0.1
v2.0.0
2023-02-28:兼容性安全性可维护性增强
https://github.com/pgsty/pigsty/releases/tag/v2.0.0
v1.5.1
2022-06-18:Grafana 安全热修复
https://github.com/pgsty/pigsty/releases/tag/v1.5.1
v1.5.0
2022-05-31:Docker 应用
https://github.com/pgsty/pigsty/releases/tag/v1.5.0
v1.4.1
2022-04-20:错误修复和英文文档的完整翻译。
https://github.com/pgsty/pigsty/releases/tag/v1.4.1
v1.4.0
2022-03-31:MatrixDB 支持,分离的 INFRA、NODES、PGSQL、REDIS
https://github.com/pgsty/pigsty/releases/tag/v1.4.0
v1.3.0
2021-11-30:PGCAT 大修和 PGSQL 增强以及 Redis 支持测试版
https://github.com/pgsty/pigsty/releases/tag/v1.3.0
v1.2.0
2021-11-03:将默认 Postgres 升级到 14,监控现有 pg
https://github.com/pgsty/pigsty/releases/tag/v1.2.0
v1.1.0
2021-10-12:主页、JupyterLab、PGWEB、Pev2 和 Pgbadger
https://github.com/pgsty/pigsty/releases/tag/v1.1.0
v1.0.0
2021-07-26:v1 GA,监控系统大修
https://github.com/pgsty/pigsty/releases/tag/v1.0.0
v0.9.0
2021-04-04:Pigsty GUI、CLI、日志集成
https://github.com/pgsty/pigsty/releases/tag/v0.9.0
v0.8.0
2021-03-28:服务置备
https://github.com/pgsty/pigsty/releases/tag/v0.8.0
v0.7.0
2021-03-01:仅监控部署
https://github.com/pgsty/pigsty/releases/tag/v0.7.0
v0.6.0
2021-02-19:架构增强
https://github.com/pgsty/pigsty/releases/tag/v0.6.0
v0.5.0
2021-01-07:数据库定制模板
https://github.com/pgsty/pigsty/releases/tag/v0.5.0
v0.4.0
2020-12-14:PostgreSQL 13 支持,官方文档
https://github.com/pgsty/pigsty/releases/tag/v0.4.0
v0.3.0
2020-10-22:置备解决方案 GA
https://github.com/pgsty/pigsty/releases/tag/v0.3.0
v0.2.0
2020-07-10:PGSQL 监控 v6 GA
https://github.com/pgsty/pigsty/commit/385e33a62a19817e8ba19997260e6b77d99fe2ba
v0.1.0
2020-06-20:在测试环境中验证
https://github.com/pgsty/pigsty/commit/1cf2ea5ee91db071de00ec805032928ff582453b
v0.0.5
2020-08-19:离线安装模式
https://github.com/pgsty/pigsty/commit/0fe9e829b298fe5e56307de3f78c95071de28245
v0.0.4
2020-07-27:将 playbooks 重构为 ansible 角色
https://github.com/pgsty/pigsty/commit/90b44259818d2c71e37df5250fe8ed1078a883d0
v0.0.3
2020-06-22:界面增强
https://github.com/pgsty/pigsty/commit/4c5c68ccd57bc32a9e9c98aa3f264aa19f45c7ee
v0.0.2
2020-04-30:首次提交
https://github.com/pgsty/pigsty/commit/dd646775624ddb33aef7884f4f030682bdc371f8
v0.0.1
2019-05-15:概念验证
https://github.com/Vonng/pg/commit/fa2ade31f8e81093eeba9d966c20120054f0646b
9.2 - 最新版本
Pigsty v3.7.0
亮点特性
- PostgreSQL 18 深度支持,成为默认 PG 大版本,扩展已就位!
- 新增 EL10 / Debian 13 操作系统支持,总数达 14 个!
- 新增 PostgresQL 扩展数量,总数达到 437 个!
- 支持了 Ansible 2.19 破坏性重构以后的版本!
- Supabase,PolarDB, IvorySQL, Percona 内核更新至最新版本!
- 优化了 PG 默认参数的设置逻辑,更充分利用资源。
版本更新
- PostgreSQL 18.1, 17.7, 16.11, 15.15, 14.20, 13.23
- Patroni 4.1.0
- Pgbouncer 1.25.0
- pg_exporter 1.0.3
- pgbackrest 2.57.0
- Supabase 2025-11
- PolarDB 15.15.5.0
- FerretDB 2.7.0
- DuckDB 1.4.2
- Etcd 3.6.6
- pig 0.7.4
更多软件版本更新信息,请参考:
API变化
- 为并行执行的相关参数设置了更合理的优化策略,详见 调参说明
- 在
rich与full模板中,不再默认安装 citus 扩展,因为 citus 尚未支持 PG 18 - PG 参数模板中,新增 duckdb 系列扩展存根。
- 为
min_wal_size,max_wal_size,max_slot_wal_keep_size设置 200,2000,3000 GB 的封顶上限值。 - 为
temp_file_limit设置 200 GB 的封顶上限,OLAP 设置为 2 TB。 - 适当增大连接池默认链接数量
- 新增
prometheus_port参数,且默认值为9058,避开与 EL10 RHEL Web Console 端口的冲突。 - 修改
alertmanager_port参数的默认值为9059,避开与 Kafka SSL 端口的潜在冲突。 - 新增
pg_pkg的pg_pre子任务,在安装 PG 包前移除 el9+ 上导致 LLVM 冲突的bpftool,python3-perf - 在 Debian / Ubuntu 的默认仓库定义中新增 llvm 仓库模块
- 修复了
infra-rm.yml移除软件包的逻辑
兼容性修复
- 修复了 Ubuntu/Debian 信任 CA 时 Warning 返回码错误的问题。
- 修复了 Ansible 2.19 引入的大量兼容性问题,确保在新老版本上正常运行。
- 为 seq 类变量添加了 int 类型转换,确保兼容
- 将大量 with_items 修改为 loop 语法,确保兼容
- 为密钥交换变量添加一层列表嵌套,避免在新版本下针对字符串进行字符迭代。
- 将 range 用例显式转换为 list 后使用
- 修改了 name,port 等标记保留的变量命名
- 将
play_hosts修改为ansible_play_hosts - 为部分字符串类型添加了 string 强制类型转换,避免运行时错误。
- EL10 逻辑适配:
- 修复了 EL10 缺少 ansible-collection-community-crypto 无法生成密钥的问题
- 修复了 EL10 缺少 ansible 逻辑包的问题
- 移除 modulemd_tools flamegraph timescaledb-tool
- 使用 java-21-openjdk 替代 java-17-openjdk
- aarch64 YUM 仓库名称问题
- Debian 13 逻辑适配
- 使用
bind9-dnsutils替代dnsutils
- 使用
- Ubuntu 24 修复
- 临时移除了上游依赖崩溃的 tcpdump 包
校验和
9.3 - 测试版本
你可以通过以下方式获取 Pigsty 的最新 Beta 版本:
9.4 - PIG 发布
pig 是一个开源的 PostgreSQL(和扩展)包管理器,支持 主流 Linux 发行版。
在 (amd64 / arm64) 上使用原生 apt/yum/dnf 安装 PostgreSQL 13~18 以及 437 个扩展。
最新稳定版本是 v0.7.4, 查看 GitHub 仓库 和 pig 文档 了解更多详情。
| 版本 | 日期 | 摘要 | GitHub |
|---|---|---|---|
| v0.7.4 | 2025-12-01 | 更新 ivory/pgtde 内核与 pgdg extras 仓库 | v0.7.4 |
| v0.7.3 | 2025-11-24 | 修复 el10 & debian13 仓库配置 | v0.7.3 |
| v0.7.2 | 2025-11-20 | 437 个扩展,修复 pig build 的一些问题 | v0.7.2 |
| v0.7.1 | 2025-11-10 | 新网站,改进容器内的使用体验 | v0.7.1 |
| v0.7.0 | 2025-11-05 | 强化 build 能力,大批量包更新 | v0.7.0 |
| v0.6.2 | 2025-10-03 | 正式提供 PG 18 支持 | v0.6.2 |
| v0.6.1 | 2025-08-14 | CI/CD, el10 存根, PGDG 中国镜像 | v0.6.1 |
| v0.6.0 | 2025-07-17 | 423 个扩展,percona pg_tde,mcp 工具箱 | v0.6.0 |
| v0.5.0 | 2025-06-30 | 422 个扩展,新的扩展目录 | v0.5.0 |
| v0.4.2 | 2025-05-27 | 421 个扩展,halo 和 oriole deb | v0.4.2 |
| v0.4.1 | 2025-05-07 | 414 个扩展,pg18 别名支持 | v0.4.1 |
| v0.4.0 | 2025-05-01 | do 和 pt 子命令,halo 和 orioledb | v0.4.0 |
| v0.3.4 | 2025-04-05 | 常规更新 | v0.3.4 |
| v0.3.3 | 2025-03-25 | 别名、仓库、依赖 | v0.3.3 |
| v0.3.2 | 2025-03-21 | 新扩展 | v0.3.2 |
| v0.3.1 | 2025-03-19 | 轻微错误修复 | v0.3.1 |
| v0.3.0 | 2025-02-24 | 新主页和扩展目录 | v0.3.0 |
| v0.2.2 | 2025-02-22 | 404 个扩展 | v0.2.2 |
| v0.2.0 | 2025-02-14 | 400 个扩展 | v0.2.0 |
| v0.1.4 | 2025-02-12 | 常规错误修复 | v0.1.4 |
| v0.1.3 | 2025-01-23 | 390 个扩展 | v0.1.3 |
| v0.1.2 | 2025-01-12 | anon 扩展和其他 350 个扩展 | v0.1.2 |
| v0.1.1 | 2025-01-09 | 更新扩展列表 | v0.1.1 |
| v0.1.0 | 2024-12-29 | repo、ext、sty 和自更新 | v0.1.0 |
| v0.0.1 | 2024-12-23 | 创世发布 | v0.0.1 |
v0.7.4
- 更新扩展版本与元数据:
pg_search,pgmq,pg_stat_monitor - 更新 PGDG 仓库 URL 变化,
extras仓库现在位于 yum 仓库顶层 - 将 ivorysql 更新至 5.0 版本,与 PG 18 兼容
- 将 Percona Postgres TDE 内核更新至 18.1
Checksums
v0.7.3
- 新增 pig repo reload 命令,更新仓库元数据
- 修复 EL PGDG sysupdate aarch64 仓库问题。
- 修复 EL10.aarch64 PGDG 仓库重命名问题。
- 订正了若干扩展版本
- 更新 Pigsty 版本至 3.7.0
校验和
v0.7.2
-
批量更新扩展,数量达到 437 个
-
新增 PGDG EL10 Sysupdate 仓库
-
新增 LLVM APT 仓库
-
在 pig build 命令中使用可选的本地 extension.csv 扩展定义问题。
-
更新的扩展: vchord pg_later pgvectorscale pglite_fusion pgx_ulid pg_search citus timescaledb pg_profile pg_stat_monitor documentdb
-
新增的扩展:pglinter pg_typeid pg_enigma pg_retry pg_biscuit pg_weighted_statistics
校验和
v0.7.1
- 全新的网站: https://pgext.cloud
- 修复了不必要的 sudo 使用问题,现在可以方便的在容器中使用
- 允许 pig ext link 命令使用形如 pg17 pg18 的参数形式
- 新增环境变量
PIG_NO_SUDO,强制不使用 sudo 执行命令 - RPM 变更日志: 为几乎所有扩展新增 PG 18 支持
- DEB 变更日志: 为几乎所有扩展新增 PG 18 支持
- Infra 变更日志: 例行更新至最新版本
校验和
v0.7.0
- 提供针对 Debian 13 和 EL 10 发行版的支持
- 大批量扩展更新至最新版本,带有 PostgreSQL 18 支持。
- 几乎所有 Rust 扩展现已通过 pgrx 0.16.1 支持 PG 18
pig build命令彻底重做pig build pkg <pkg>现在会一条龙完成扩展的下载,依赖安装,构建pig build pgrx命令现在从pig build rust中分离pig build pgrx [-v pgrx_version]现在可以直接使用现有的 PG 安装pig build dep现在会处理 EL 和 Debian 系统下的扩展依赖pig build ext命令现在有了更为紧凑和美观的输出,可在 EL 下不依赖 build 脚本直接构建 RPMpig build spec现在支持直接从Pigsty仓库下载 spec 文件包pig build repo/pig repo add/pig repo set现在默认使用node,pgsql,infra仓库模块,取代原本的node,pgdg,pigsty
- 大量优化了错误日志记录。
- 基于 hugo 与 hextra 全新目录网站
校验和
v0.6.2
- 使用 PG 18 官方正式仓库取代原本的 Testing Beta 仓库 instead of testing repo
- 在接收 Pigsty 版本字符串的时候,自动添加
v前缀 - 改进了网络检查与下载的逻辑
校验和
v0.6.1
- 新增 el10 与 debian 13 trixie 的支持存根
- 专门的新文档网站: https://pgext.cloud/pig
- 使用 go 1.25 重新构建,新增 CI/CD 管道
- 在中国大陆使用 PIGSTY PGDG 镜像
- 移除空的
pgdg-el10fix仓库 - 使用 Pigsty WiltonDB 镜像
- 修复 EL 10 专用的 EPEL 仓库
- pig version 输出构建环境信息
v0.6.0
- 新扩展目录:https://ext.pgsty.com
- 新子命令:
pig install简化pig ext install - 添加新内核支持:带 pg_tde 的 percona
- 添加新包:Google GenAI MCP 数据库工具箱
- 添加新仓库:percona 仓库和 clickhouse 仓库
- 将扩展摘要信息链接更改为 https://ext.pgsty.com
- 修复 orioledb 在 Debian/Ubuntu 系统上的问题
- 修复 EL 发行版上的 epel 仓库
- 将 golang 升级到 1.24.5
- 将 pigsty 升级到 v3.6.0
校验和
v0.5.0
- 将扩展列表更新至 422 个
- 新扩展:来自 AWS 的 pgactive
- 将 timescaledb 升级到 2.20.3
- 将 citus 升级到 13.1.0
- 将 vchord 升级到 0.4.3
- 修复错误:pgvectorscale debian/ubuntu pg17 失败
- 将 kubernetes 仓库升级到 1.33
- 将默认 pigsty 版本升级到 3.5.0
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.5.0
v0.4.2
- 将扩展列表更新至 421 个
- 为 Debian / Ubuntu 添加 openhalo/orioledb 支持
- pgdd 0.6.0 (pgrx 0.14.1)
- convert 0.0.4 (pgrx 0.14.1)
- pg_idkit 0.3.0 (pgrx 0.14.1)
- pg_tokenizer.rs 0.1.0 (pgrx 0.13.1)
- pg_render 0.1.2 (pgrx 0.12.8)
- pgx_ulid 0.2.0 (pgrx 0.12.7)
- pg_ivm 1.11.0 适用于 debian/ubuntu
- orioledb 1.4.0 beta11
- 重新添加 el7 仓库
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.4.2
v0.4.1
- 将扩展列表更新至 414 个
- 在
pig ext scan映射中添加citus_wal2json和citus_pgoutput - 添加 PG 18 beta 仓库
- 添加 PG 18 包别名
扩展包更新
- omnigres 20250507
- citus 12.0.3
- timescaledb 2.19.3
- supautils 2.9.1
- pg_envvar 1.0.1
- pgcollection 1.0.0
- aggs_for_vecs 1.4.0
- pg_tracing 0.1.3
- pgmq 1.5.1
- tzf-pg 0.2.0 (pgrx 0.14.1)
- pg_search 0.15.18 (pgrx 0.14.1)
- anon 2.1.1 (pgrx 0.14.1)
- pg_parquet 0.4.0 (0.14.1)
- pg_cardano 1.0.5 (pgrx 0.12) -> 0.14.1
- pglite_fusion 0.0.5 (pgrx 0.12.8) -> 14.1
- vchord_bm25 0.2.1 (pgrx 0.13.1)
- vchord 0.3.0 (pgrx 0.13.1)
- pg_vectorize 0.22.1 (pgrx 0.13.1)
- wrappers 0.4.6 (pgrx 0.12.9)
- timescaledb-toolkit 1.21.0 (0.12.9)
- pgvectorscale 0.7.1 (pgrx 0.12.9)
- pg_session_jwt 0.3.1 (pgrx 0.12.6) -> 0.12.9
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.4.1
v0.4.0
- 更新扩展列表,可用扩展达到 407 个
- 添加
pig do子命令用于执行 Pigsty playbook 任务 - 添加
pig pt子命令用于包装 Patroni 命令行工具 - 添加扩展别名:
openhalo和orioledb - 添加
gitlab-ce/gitlab-ee仓库区分 - 使用最新 Go 1.24.2 构建并升级依赖项版本
- 修复特定条件下
pig ext status的 panic 问题 - 修复
pig ext scan无法匹配多个扩展的问题
扩展包更新
- 将 pg_search 更新到 0.15.13
- 将 citus 更新到 13.0.3
- 将 timescaledb 更新到 2.19.1
- 将 pgcollection RPM 更新到 1.0.0
- 将 pg_vectorize RPM 更新到 0.22.1
- 将 pglite_fusion RPM 更新到 0.0.4
- 将 aggs_for_vecs RPM 更新到 1.4.0
- 将 pg_tracing RPM 更新到 0.1.3
- 将 pgmq RPM 更新到 1.5.1
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.4.0
v0.3.4
- 常规扩展元数据更新
- 使用阿里云 epel 镜像代替损坏的清华大学 tuna 镜像
- 升级 pigsty 版本字符串
- 在仓库列表中添加
gitlab仓库
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.3.4
v0.3.3
- 添加
pig build dep命令安装扩展构建依赖项 - 更新默认仓库列表
- 为
mssql模块(wiltondb/babelfish)使用 pigsty.io 镜像 - 将 docker 模块合并到
infra - 从 el7 目标中移除 pg16/17
- 允许在 el7 中安装扩展
- 更新包别名
pgsql、pgsql-main、pgsql-core、pgsql-mini、pgsql-fullivorysql现在映射到ivorysql4timescaledb-utilspgbackrest_exporter- 移除
pgsql-simple - 拉取 #13 将 github.com/golang-jwt/jwt/v5 从 5.2.1 升级到 5.2.2
- 将 polardb 升级到 15.12.3.0-e1e6d85b
pig repo set现在会自动更新元缓存- 清理嵌入的 pigsty tarball
更改内容
- 由 @dependabot 在 https://github.com/pgsty/pig/pull/13 中将 github.com/golang-jwt/jwt/v5 从 5.2.1 升级到 5.2.2
新贡献者
- @dependabot 在 https://github.com/pgsty/pig/pull/13 中首次贡献
完整变更日志:https://github.com/pgsty/pig/compare/v0.3.2…v0.3.3
发布:https://github.com/pgsty/pig/releases/tag/v0.3.3
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.3.3
v0.3.2
增强功能
- 新扩展
- 使用
upx减少二进制大小 - 移除嵌入的 pigsty 以减少二进制大小
- 允许指定
-y强制重新安装 rust 在pig build rust中 - 允许指定
-v指定要安装的pgrx版本
新扩展
405 个 PG 扩展列表:
- apache age 13 - 17 el rpm (1.5.0)
- pgspider_ext 1.3.0 (新扩展)
- timescaledb 2.18.2 -> 2.19.0
- citus 13.0.1 -> 13.0.2
- documentdb 1.101-0 -> 1.102-0
- pg_analytics: 0.3.4 -> 0.3.7
- pg_search: 0.15.2 -> 0.15.8
- pg_ivm 1.9 -> 1.10
- emaj 4.4.0 -> 4.6.0
- pgsql_tweaks 0.10.0 -> 0.11.0
- pgvectorscale 0.4.0 -> 0.6.0 (pgrx 0.12.5)
- pg_session_jwt 0.1.2 -> 0.2.0 (pgrx 0.12.6)
- wrappers 0.4.4 -> 0.4.5 (pgrx 0.12.9)
- pg_parquet 0.2.0 -> 0.3.1 (pgrx 0.13.1)
- vchord 0.2.1 -> 0.2.2 (pgrx 0.13.1)
- pg_tle 1.2.0 -> 1.5.0
- supautils 2.5.0 -> 2.6.0
- sslutils 1.3 -> 1.4
- pg_profile 4.7 -> 4.8
- pg_snakeoil 1.3 -> 1.4
- pg_jsonschema 0.3.2 -> 0.3.3
- pg_incremental: 1.1.1 -> 1.2.0
- pg_stat_monitor 2.1.0 -> 2.1.1
- 修复 ddl_historization 版本 0.7 -> 0.0.7
- 修复 pg_sqlog 3.1.7 -> 1.6
- 修复 pg_random 移除 dev 后缀
- asn1oid 1.5 -> 1.6
- table_log 0.6.1 -> 0.6.4
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.3.2
v0.3.1
常规错误修复
- 修复仓库格式字符串
- 修复扩展信息链接
- 更新 pg_mooncake 元数据
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.3.1
v0.3.0
pig 项目现在有了新的 主页,以及 PostgreSQL 扩展 目录。
您可以使用简单的命令安装 PostgreSQL 内核以及 404 个扩展。此外, pig v0.3 也嵌入并随最新的 Pigsty v3.3.0 一起发布。
新功能
pig build 子命令具有设置扩展构建环境的 能力
以及其他工具,如构建代理:
pig 0.3.0 随 Pigsty 3.3.0 一起发布
新扩展
pgext.cloud 目录正在迁移到 https://pgext.cloud/list,包含更多信息!
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.3.0
v0.2.2
Pig v0.2.2 中提供 404 个扩展
- documentdb 0.101-0
- pgcollection (新) 0.9.1
- pg_bzip (新) 1.0.0
- pg_net 0.14.0 (部分发行版)
- pg_curl 2.4.2
- vault 0.3.1 (SQL -> C)
- table_version 1.10.3 -> 1.11.0
- pg_duration 1.0.2
- timescaledb 2.18.2
- pg_analytics 0.3.4
- pg_search 0.15.2
- pg_graphql 1.5.11
- vchord 0.1.1 -> 0.2.1 ((+13))
- vchord_bm25 0.1.0 -> 0.1.1
- pg_mooncake 0.1.1 -> 0.1.2
- pg_duckdb 0.2.0 -> 0.3.1
- pgddl 0.29
- pgsql_tweaks 0.11.0
发布:https://github.com/pgsty/pig/releases/tag/v0.2.2
v0.2.0
使用以下命令安装最新的 pig 版本:
新扩展
- pg_documentdb_core 和 ferretdb
- VectorChord-bm25 (vchord_bm25) 0.1.0
- pg_tracing 0.1.2
- pg_curl 2.4
- pgxicor 0.1.0
- pgsparql 1.0
- pgjq 0.1.0
- hashtypes 0.1.5
- db_migrator 1.0.0
- pg_cooldown 0.1
更新扩展版本
- citus 13.0.0 -> 13.0.1
- pg_mooncake 0.1.0 -> 0.1.1
- timescaledb 2.17.2 -> 2.18.1
- supautils 2.5.0 -> 2.6.0
- VectorChord 0.1.0 -> 0.2.0
- pg_bulkload 3.1.22 (+pg17)
- pg_store_plan 1.8 (+pg17)
- pg_search 0.14 -> 0.15.1
- pg_analytics 0.3.0 -> 0.3.2
- pgroonga 3.2.5 -> 4.0.0
- zhparser 2.2 -> 2.3
- pg_vectorize 0.20.0 -> 0.21.1
发布:https://github.com/pgsty/pig/releases/tag/v0.2.0
v0.1.4
使用以下命令安装最新的 pig 版本:
新扩展
- pg_documentdb_core 和 ferretdb
- VectorChord-bm25 (vchord_bm25) 0.1.0
- pg_tracing 0.1.2
- pg_curl 2.4
- pgxicor 0.1.0
- pgsparql 1.0
- pgjq 0.1.0
- hashtypes 0.1.5
- db_migrator 1.0.0
- pg_cooldown 0.1
更新扩展版本
- citus 13.0.0 -> 13.0.1
- pg_mooncake 0.1.0 -> 0.1.1
- timescaledb 2.17.2 -> 2.18.1
- supautils 2.5.0 -> 2.6.0
- VectorChord 0.1.0 -> 0.2.0
- pg_bulkload 3.1.22 (+pg17)
- pg_store_plan 1.8 (+pg17)
- pg_search 0.14 -> 0.15.1
- pg_analytics 0.3.0 -> 0.3.2
- pgroonga 3.2.5 -> 4.0.0
- zhparser 2.2 -> 2.3
- pg_vectorize 0.20.0 -> 0.21.1
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.1.4
v0.1.3
v0.1.3,常规更新,现在可用 390 个扩展!
- 新扩展:
Omnigres33 个扩展,postgres 作为平台 - 新扩展:
pg_mooncake:postgres 中的 duckdb - 新扩展:
pg_xxhash - 新扩展:
timescaledb_toolkit - 新扩展:
pg_xenophile - 新扩展:
pg_drop_events - 新扩展:
pg_incremental - 将
citus升级到 13.0.0,支持 PostgreSQL 17。 - 将
pgml升级到 2.10.0 - 将
pg_extra_time升级到 2.0.0 - 将
pg_vectorize升级到 0.20.0
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.1.3
v0.1.2
351 个 PostgreSQL 扩展,包括强大的 postgresql-anonymizer 2.0
现在您可以使用以下方式安装 pig:
添加新扩展
- 添加 pg_anon 2.0.0
- 添加 omnisketch 1.0.2
- 添加 ddsketch 1.0.1
- 添加 pg_duration 1.0.1
- 添加 ddl_historization 0.0.7
- 添加 data_historization 1.1.0
- 添加 schedoc 0.0.1
- 添加 floatfile 1.3.1
- 添加 pg_upless 0.0.3
- 添加 pg_task 1.0.0
- 添加 pg_readme 0.7.0
- 添加 vasco 0.1.0
- 添加 pg_xxhash 0.0.1
更新扩展
- lower_quantile 1.0.3
- quantile 1.1.8
- sequential_uuids 1.0.3
- pgmq 1.5.0 (subdir)
- floatvec 1.1.1
- pg_parquet 0.2.0
- wrappers 0.4.4
- pg_later 0.3.0
- 修复 topn for deb.arm64
- 在 debian 上添加 age 17
- powa + pg17, 5.0.1
- h3 + pg17
- ogr_fdw + pg17
- age + pg17 1.5 在 debian
- pgtap + pg17 1.3.3
- repmgr
- topn + pg17
- pg_partman 5.2.4
- credcheck 3.0
- ogr_fdw 1.1.5
- ddlx 0.29
- postgis 3.5.1
- tdigest 1.4.3
- pg_repack 1.5.2
发布:https://github.com/pgsty/pig/releases/tag/v0.1.2
v0.1.0
pig CLI v0.1 发布,具有以下新功能:
安装脚本
扩展管理
您可以使用 import 子命令下载扩展及其依赖项,使用 link 激活不同的 postgres 主版本,并使用 build 子命令准备构建环境
仓库管理
您现在可以创建本地仓库并从中创建 tarball(离线包),将其复制到某处(例如,没有互联网访问),并从该离线包创建仓库:
Pigsty 管理
pig 也可以用作 Pigsty 的 CLI 工具——电池级免费 PostgreSQL RDS
自更新
要将 pig 本身更新到最新版本,您可以使用以下命令:
信息
现在 pig info 提供有关您的 OS 和 PG 环境的更多详细信息:
享受 PostgreSQL!
更改内容
- 由 @kianmeng 在 https://github.com/pgsty/pig/pull/4 中修复拼写错误
新贡献者
- @kianmeng 在 https://github.com/pgsty/pig/pull/4 中首次贡献
完整变更日志:https://github.com/pgsty/pig/compare/v0.0.1…v0.1.0
校验和
发布:https://github.com/pgsty/pig/releases/tag/v0.1.0
v0.0.1
入门
首先安装 pig 包,您也可以通过命令安装:
然后就可以使用了,假设您想安装 pg_duckdb 扩展:
就是这样!全部设置好了!您可以使用 pig ext status 子命令检查:
查看高级用法详情和 列出 340 个可用扩展。
安装
pig 工具是一个独立的 go 二进制文件,没有依赖项。您可以直接下载二进制文件或使用以下命令添加仓库并通过包管理器安装(推荐)。
对于 Ubuntu 22.04 / 24.04 和 Debian 12 或任何兼容平台:
对于 EL 8/9 和兼容平台:
对于中国大陆用户:考虑将
repo.pigsty.io替换为repo.pigsty.cc
兼容性
pig 运行在:RHEL 8/9、Ubuntu 22.04/24.04 和 Debian 12,支持 amd64/arm64 架构
| 代码 | 发行版 | x86_64 |
aarch64 |
|---|---|---|---|
| el9 | RHEL 9 / Rocky9 / Alma9 / … | PG 17 - 13 | PG 17 - 13 |
| el8 | RHEL 8 / Rocky8 / Alma8 / … | PG 17 - 13 | PG 17 - 13 |
| u24 | Ubuntu 24.04 (noble) |
PG 17 - 13 | PG 17 - 13 |
| u22 | Ubuntu 22.04 (jammy) |
PG 17 - 13 | PG 17 - 13 |
| d12 | Debian 12 (bookworm) |
PG 17 - 13 | PG 17 - 13 |
以下是上述发行版的一些坏情况和限制:
citus在aarch64和 ubuntu 24.04 上不可用pljava在el8上缺失jdbc_fdw在el8.aarch64和el9.aarch64上缺失pllua在el8.aarch64上对 pg 13,14,15 缺失topn在el8.aarch64和el9.aarch64上对 pg13 缺失,以及所有deb.aarch64pg_partman和timeseries在u24上对 pg13 缺失wiltondb在d12上缺失
发布:https://github.com/pgsty/pig/releases/tag/v0.0.1
9.5 - PG Exporter
为 Prometheus 提供的高级 PostgreSQL 和 pgBouncer 指标 exporter
PG Exporter 通过声明式配置、动态规划和可定制收集器为您的 PostgreSQL 带来终极监控体验。 它提供 600+ 指标和每个实例约 3K 时间序列,涵盖 PostgreSQL 可观测性所需的一切。 查看 GitHub 仓库 了解更多详情。
pg_exporter 的最新稳定版本是 v1.0.3
| 版本 | 日期 | 摘要 | GitHub |
|---|---|---|---|
| v1.0.3 | 2025-11-20 | Go 1.25.4 例行更新,修复不支持的 libpq 环境变量 | v1.0.3 |
| v1.0.2 | 2025-08-14 | CI/CD 构建管道,使用 Go 1.25, https://exp.pgsty.com |
v1.0.2 |
| v1.0.1 | 2025-07-17 | DockerHub 镜像,Go 1.24.5,禁用 pg_tsdb_hypertable | v1.0.1 |
| v1.0.0 | 2025-05-06 | PostgreSQL 18 支持,新的 WAL/checkpointer/I/O 指标 | v1.0.0 |
| v0.9.0 | 2025-04-26 | TimescaleDB、Citus、pg_wait_sampling 收集器 | v0.9.0 |
| v0.8.1 | 2025-03-29 | 依赖项更新,docker 镜像标签 | v0.8.1 |
| v0.8.0 | 2025-02-14 | PgBouncer 1.24 支持,Go 1.24,日志重构 | v0.8.0 |
| v0.7.1 | 2024-12-29 | 常规更新,配置作为 Reader 支持 | v0.7.1 |
| v0.7.0 | 2024-08-09 | PostgreSQL 17 支持,谓词查询功能 | v0.7.0 |
| v0.6.0 | 2023-10-18 | PostgreSQL 16 支持,ARM64 包,安全修复 | v0.6.0 |
| v0.5.0 | 2022-05-13 | RPM/DEB 构建,列缩放,指标增强 | v0.5.0 |
| v0.4.1 | 2022-03-08 | 收集器更新,connect-timeout 参数 | v0.4.1 |
| v0.4.0 | 2021-05-28 | PostgreSQL 14 支持,自动发现功能 | v0.4.0 |
| v0.3.2 | 2021-02-01 | Shadow DSN 修复,文档更新 | v0.3.2 |
| v0.3.1 | 2020-12-04 | 旧版 PostgreSQL 版本的配置修复 | v0.3.1 |
| v0.3.0 | 2020-10-29 | PostgreSQL 13 支持,REST API,虚拟服务器 | v0.3.0 |
| v0.2.0 | 2020-03-21 | YUM 包,配置重载支持 | v0.2.0 |
| v0.1.2 | 2020-02-20 | 动态配置重载,批量模式 | v0.1.2 |
| v0.1.1 | 2020-01-10 | 启动挂起错误修复 | v0.1.1 |
| v0.1.0 | 2020-01-08 | 初始稳定版本 | v0.1.0 |
| v0.0.4 | 2019-12-20 | 生产测试版本 | v0.0.4 |
| v0.0.3 | 2019-12-13 | 生产环境测试 | v0.0.3 |
| v0.0.2 | 2019-12-09 | 早期测试版本 | v0.0.2 |
| v0.0.1 | 2019-12-09 | 带有 PgBouncer 模式的初始版本 | v0.0.1 |
v1.0.3
校验和
https://github.com/pgsty/pg_exporter/releases/download/v1.0.3/checksums.txt
v1.0.2
- 使用 Go 1.25 构建,更新依赖至最新版本。
- 新网站首页:https://exp.pgsty.com
- 使用 goreleaser 自动化构建,集成 GitHub Actions CI/CD
- 添加 windows amd64 构建目标
- 添加 linux ppc64le 构建目标
校验和
https://github.com/pgsty/pg_exporter/releases/download/v1.0.2/checksums.txt
1.0.1
- 添加 dockerhub 镜像:pgsty/pg_exporter
- 将 go 依赖项升级到最新版本,使用 go 1.24.5 构建
- 默认禁用
pg_tsdb_hypertable收集器,因为timescaledb目录已更改。
校验和
https://github.com/pgsty/pg_exporter/releases/tag/v1.0.1
1.0.0
添加 PostgreSQL 18 指标支持
- 新收集器分支
pg_wal_18: - 移除
write、sync、write_time、sync_time指标 - 移动到
pg_stat_io - 新收集器分支
pg_checkpointer_18: - 新指标
num_done - 新指标
slru_written - 新收集器分支
pg_db_18: - 新指标
parallel_workers_to_launch - 新指标
parallel_workers_launched - 新收集器分支
pg_table_18: table_parallel_workers_to_launchtable_parallel_workers_launched- 新收集器分支
pg_io_18: - 关于 WAL 统计的新系列
- 新指标
read_bytes - 新指标
write_bytes - 新指标
extend_bytes - 由于固定值移除
op_bytes - 新收集器分支
pg_vacuuming_18 - 新指标
delay_time
https://github.com/pgsty/pg_exporter/releases/tag/v1.0.0
0.9.0
默认收集器
- 为
timescaledbhypertable 新增指标收集器 - 为
citus分布节点新增指标收集器 - 为
pg_wait_sampling等待事件配置文件新增指标收集器 pg_slot全面改进:添加 16/17 pg_replication_slot 指标- 允许
pg_slot收集器在副本上运行(自 16/17) - 重构
pg_wait收集器以聚合所有进程 - 限制 pg_clustering、pg_indexing、pg_vacuuming 在主节点上运行
- 将所有
reset_time标记为GAUGE而不是COUNTER - 修复
pg_recovery_prefetch_skip_fpw类型从GAUGE到COUNTER - 修复
pg_recv.state类型从LABEL到GAUGE - 以紧凑模式格式化收集器
- 新的默认指标
pg_exporter_build_info/pgbouncer_exporter_build_info - 向
pg_meta收集器添加server_encoding - 向
pg_setting收集器添加 12 个新设置指标
- wal_block_size
- segment_size
- wal_segment_size
- wal_level
- wal_log_hints
- work_mem
- hugepage_count
- hugepage_status
- max_wal_size
- min_wal_size
- max_slot_wal_keep_size
Exporter 代码库
- 使用最小 pg 版本后缀规范化收集器分支名称
- 向二进制包添加许可证文件
- 将
pgsty/pg_exporter仓库移动到pgsty/pg_exporter - 重构
server.go以减少Compatible和PostgresPrecheck复杂性 - 使用额外的数字前缀重命名指标收集器以更好地排序
- 将依赖项升级到最新版本
- 在所有非致命收集器之前执行致命收集器,并快速失败
https://github.com/pgsty/pg_exporter/releases/tag/v0.9.0
0.8.1
- 将依赖项升级到最新版本
- 将 golang.org/x/net 从 0.35.0 升级到 0.36.0 #67
- 更新 docker 镜像构建标签
https://github.com/pgsty/pg_exporter/releases/tag/v0.8.1
0.8.0
- 添加 PgBouncer 1.24 新指标支持(stat、pool、database)
- 修复:如果日志目录设置不当,
310-pg_size.yml失败 #64 由 @Süleyman Vurucu 提供 - 使用最新的 Go 1.24 构建并升级所有依赖项
- 使用标准
log/slog而不是go-kit重构日志记录 - 完整变更日志:https://github.com/pgsty/pg_exporter/compare/v0.7.1…v0.8.0
https://github.com/pgsty/pg_exporter/releases/tag/v0.8.0
0.7.1
使用 dependabot 进行常规更新
- 功能:支持将配置指定为 Reader,由 @ringerc 在 #62 中提供
- 将 golang.org/x/crypto 从 0.21.0 升级到 0.31.0,由 @dependabot 在 #63 中提供
- 修复一些拼写错误
- 完整变更日志:https://github.com/pgsty/pg_exporter/compare/v0.7.0…v0.7.1
https://github.com/pgsty/pg_exporter/releases/tag/v0.7.1
0.7.0
为最新的 go 版本重构代码库。
- PostgreSQL 17 指标支持 由 @Vonng 提供
- pg_exporter:谓词查询功能 由 @ringerc 提供
- 在 dockerfile 中进行清洁构建 由 @ringerc 提供
- pg_exporter:在"bind: address already in use"后不要 panic 由 @ringerc 提供
- pg_exporter:修复 /stat 端点格式 由 @ringerc 提供
- pg_exporter:在 yaml 导出时省略默认查询属性 由 @ringerc 提供
- 从发现中排除模板数据库并模式限定发现查询 由 @ringerc 提供
- 修复一些拼写错误和一些指标描述错误 由 @ringerc 提供
- 从无维护的 lib/pq 驱动程序切换到带有 stdlib 包装器的 pgx 由 @ringerc 提供
https://github.com/pgsty/pg_exporter/releases/tag/v0.7.0
0.6.0
-
安全增强:修复 安全 dependent-bot 问题
-
添加 pg16 收集器
-
添加
arm64和aarch64包 -
移除
pg_query收集器的monitor模式要求(您必须通过 search_path 确保这一点,或者只是在默认的public模式中安装pg_stat_statements) -
将 pgbouncer 版本解析消息级别从 info 修复为 debug
-
修复
pg_table_10_12收集器缺少relid问题。
https://github.com/pgsty/pg_exporter/releases/tag/v0.6.0
0.5.0
Exporter 增强
- 使用
nfpm构建 rpm 和 deb - 添加
column.default,当指标值为 NULL 时替换 - 添加
column.scale,当指标值为 float/int 时乘以缩放因子(例如 µs 到秒) - 修复
/stat端点输出 - 添加 docker 容器
pgsty/pg_exporter
指标收集器
- 将 bgwriter 和 pg_wal 时间单位缩放为秒
- 移除 pg_class 收集器并将其移动到 pg_table 和 pg_inex
- 向 pg_table 添加 pg_class 指标
- 向 pg_index 添加 pg_class 指标
- 默认启用 pg_table_size
- 将 pg_query pg_db pg_bgwriter pg_ssl pgbouncer_stat 时间指标缩放为秒
https://github.com/pgsty/pg_exporter/releases/tag/v0.5.0
0.4.1
- 更新默认收集器
- 在对象监控中省略 citus 和 timescaledb 模式
- 避免重复的 pg_statio 元组
- 支持 pgbouncer v1.16
- 错误修复:
pg_repl收集器在 pg 12 上重叠
- 新参数:
-Tconnect-timeoutPG_EXPORTER_CONNECT_TIMEOUT这在监控远程 Postgres 实例时很有用。 - 现在在 rpm 包中
pg_exporter.yaml重命名为pg_exporter.yml。
https://github.com/pgsty/pg_exporter/releases/tag/v0.4.1
0.4.0
- 添加 PG 14 支持
- 默认指标配置全面改进。(但您仍然可以使用旧配置)
- 添加
auto-discovery、include-database和exclude-database选项 - 添加多数据库监控实现(使用
auto-discovery = on)
https://github.com/pgsty/pg_exporter/releases/tag/v0.4.0
0.3.2
- 修复 shadow DSN 边界情况
- 修复拼写错误和文档
https://github.com/pgsty/pg_exporter/releases/tag/v0.3.2
0.3.1
修复默认配置问题(特别是对于低于 13 的版本)
- 设置
primary_conninfo直到 PG13 才存在 - 向
pg_func收集器添加funcid标签以避免函数名重复标签 - 将版本字符串修复为
pg_exporter
https://github.com/pgsty/pg_exporter/releases/tag/v0.3.1
0.3.0
https://github.com/pgsty/pg_exporter/releases/tag/v0.3.0
- 更改默认配置,支持 PostgreSQL 13 新指标(
pg_slru、pg_shmem、pg_query13、pg_backup等…) - 添加一系列新的 REST API 用于健康/恢复状态检查
- 添加一个虚拟服务器,提供假的
pg_up 0指标,在 PgExporter 初始化之前提供服务。 - 如果未给出
sslmode,则向 URL 添加sslmode=disable - 修复拼写错误和错误
0.2.0
- 添加 yum 包和 linux 服务定义
- 向查询配置添加 ‘skip’ 标志
- 修复
pgbouncer_up指标 - 添加配置重载支持
https://github.com/pgsty/pg_exporter/releases/tag/v0.2.0
0.1.2
- 修复 pgbouncer_up 指标
- 添加动态配置重载
- 移除 ‘shard’ 相关逻辑
- 向默认设置添加 ‘bulky’ 模式
https://github.com/pgsty/pg_exporter/releases/tag/v0.1.2
0.1.1
修复 pg_exporter 在启动期间如果任何查询失败会挂起的错误。
https://github.com/pgsty/pg_exporter/releases/tag/v0.1.1
0.1.0
它工作,看起来不错。
https://github.com/pgsty/pg_exporter/releases/tag/v0.1.0
0.0.4
在真实的生产环境中测试了约 2 周,有 200+ 个节点。看起来不错!
https://github.com/pgsty/pg_exporter/releases/tag/v0.0.4
0.0.3
v0.0.3 发布,在生产环境中测试
此版本已在生产环境中测试。
这个项目仍在快速发展中,我想说如果您想在生产中使用它,请谨慎尝试。
https://github.com/pgsty/pg_exporter/releases/tag/v0.0.3
0.0.2
现在可以尝试了
https://github.com/pgsty/pg_exporter/releases/tag/v0.0.2
0.0.1
添加 pgbouncer 模式
9.6 - RPM 发布
查看 pgsty/rpm 仓库的构建规范和 pigsty-pgsql 的使用方法
2025-11-20
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| vchord | 0.5.3 | 1.0.0 | |
| pg_later | 0.3.1 | 0.4.0 | |
| pgvectorscale | 0.8.0 | 0.9.0 | -pg13, +pg18 |
| pglite_fusion | 0.0.5 | 0.0.6 | |
| pgx_ulid | 0.2.1 | 0.2.2 | |
| pg_search | 0.19.5 | 0.19.7 | resume PIGSTY building |
| citus | 13.2.0 | 13.2.0 | official tag |
| timescaledb | 2.23.0 | 2.23.1 | |
| pg_profile | 4.10 | 4.11 | |
| pglinter | 1.0.0 | new | |
| pg_typeid | 0.3.0 | head with pg18 support | |
| pg_enigma | 0.4.0 | vonng patched pgrx version | |
| pg_retry | 1.0.0 | new, pg17-18 | |
| pg_biscuit | 1.0 | new, pg16-18 | |
| pg_weighted_statistics | 1.0.0 | new, pg13-18 | |
| pg_stat_monitor | 2.2.0 | 2.3.0 | fix PGDG pg18 missing |
| documentdb | 0.106 | 0.107 | ferretdb fork |
| PolarDB | 15.15 | 15.15.5.0-38948055 |
2025-11-10
为几乎所有扩展添加 PostgreSQL 18 支持
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| omni_csv | - | 0.1.1 | new |
| omni_datasets | - | 0.1.0 | new |
| omni_shmem | - | 0.1.0 | new |
| pg_csv | - | 1.0.1 | new |
| pg_dbms_errlog | - | 2.2 | new |
| pg_rrule | - | 0.2.0 | new |
| plxslt | - | 0.20140221 | new |
| anon | 2.3.0 | 2.4.1 | +pg18 |
| collection | 1.0.0 | 1.1.0 | +pg18 |
| credcheck | 3.0 | 4.2 | +pg18 |
| emaj | 4.7.0 | 4.7.1 | +pg18 |
| explain_ui | 0.0.1 | 0.0.2 | +pg18 |
| firebird_fdw | 1.4.0 | 1.4.1 | +pg18 |
| logerrors | 2.1.3 | 2.1.5 | +pg18 |
| multicorn | 3.0 | 3.2 | +pg18 |
| omni | 0.2.9 | 0.2.14 | +pg18 |
| omni_email | 0 | 0.1.0 | +pg18 |
| omni_httpc | 0.1.5 | 0.1.10 | +pg18 |
| omni_httpd | 0.4.6 | 0.4.11 | +pg18 |
| omni_id | 0.4.2 | 0.4.3 | +pg18 |
| omni_kube | 0.1.1 | 0.4.2 | +pg18 |
| omni_ledger | 0.1.2 | 0.1.3 | +pg18 |
| omni_sql | 0.5.1 | 0.5.3 | +pg18 |
| omni_sqlite | 0.1.2 | 0.2.2 | +pg18 |
| omni_types | 0.3.4 | 0.3.6 | +pg18 |
| omni_vfs | 0.2.1 | 0.2.2 | +pg18 |
| omni_worker | 0.1.0 | 0.2.1 | +pg18 |
| periods | 1.2.2 | 1.2.3 | +pg18 |
| pg_bestmatch | 0.0.1 | 0.0.2 | +pg18 |
| pg_cardano | 1.0.5 | 1.1.1 | +pg18 |
| pg_checksums | 1.1 | 1.3 | +pg18 |
| pg_duckdb | 0.3.1 | 1.1.0 | +pg18 |
| pg_failover_slots | 1.1.0 | 1.2.0 | +pg18 |
| pg_graphql | 1.5.11 | 1.5.12 | +pg18 |
| pg_idkit | 0.3.1 | 0.4.0 | +pg18 |
| pg_later | 0.3.0 | 0.3.1 | +pg18 |
| pg_mooncake | 0.1.2 | 0.2.0 | +pg18 |
| pg_net | 0.9.2 | 0.20.0 | +pg18 |
| pg_parquet | 0.4.3 | 0.5.1 | +pg18 |
| pg_render | 0.1.2 | 0.1.3 | +pg18 |
| pg_session_jwt | 0.3.1 | 0.3.3 | +pg18 |
| pg_smtp_client | 0.2.0 | 0.2.1 | +pg18 |
| pg_sphere | 1.5.1 | 1.5.2 | +pg18 |
| pg_statement_rollback | 1.4 | 1.5 | +pg18 |
| pg_store_plans | 1.8 | 1.9 | +pg18 |
| pg_tle | 1.5.1 | 1.5.2 | +pg18 |
| pg_tokenizer | 0.1.0 | 0.1.1 | +pg18 |
| pg_uuidv7 | 1.6.0 | 1.7.0 | +pg18 |
| pgactive | 2.1.6 | 2.1.7 | +pg18 |
| pglogical | 2.4.5 | 2.4.6 | +pg18 |
| pglogical_origin | 2.4.5 | 2.4.6 | +pg18 |
| pgmq | 1.5.1 | 1.7.0 | +pg18 |
| pgsmcrypto | 0.1.0 | 0.1.1 | +pg18 |
| pgx_ulid | 0.2.0 | 0.2.1 | +pg18 |
| pldbgapi | 1.8 | 1.9 | +pg18 |
| pljava | 1.6.8 | 1.6.10 | +pg18 |
| plprql | 1.0.0 | 18.0.0 | +pg18 |
| roaringbitmap | 0.5.4 | 0.5.5 | +pg18 |
| semver | 0.32.1 | 0.40.0 | +pg18 |
| supautils | 2.10.0 | 3.0.2 | +pg18 |
| tds_fdw | 2.0.4 | 2.0.5 | +pg18 |
| timescaledb | 2.22.0 | 2.23.0 | +pg18 |
| timescaledb_toolkit | 1.21.0 | 1.22.0 | +pg18 |
| timeseries | 0.1.6 | 0.1.7 | +pg18 |
| tzf | 0.2.2 | 0.2.3 | +pg18 |
| vchord | 0.5.1 | 0.5.3 | +pg18 |
| vchord_bm25 | 0.2.1 | 0.2.2 | +pg18 |
| vectorize | 0.22.2 | 0.25.0 | +pg18 |
| wrappers | 0.5.4 | 0.5.6 | +pg18 |
| gzip | 1.0.1 | 1.0.0 | +pg18 |
| hypopg | 1.4.1 | 1.4.2 | +pg18 |
| mobilitydb | 1.2.0 | 1.3.0 | +pg18 |
| mongo_fdw | 5.5.1 | 5.5.3 | +pg18 |
| orafce | 4.14.4 | 4.14.6 | +pg18 |
| pg_hint_plan | 1.7.1 | 1.8.0 | +pg18 |
| pg_ivm | 1.11 | 1.13 | +pg18 |
| pg_partman | 5.2.4 | 5.3.1 | +pg18 |
| pg_search | 0.18.1 | 0.19.2 | +pg18 |
| pg_show_plans | 2.1.6 | 2.1.7 | +pg18 |
| pgpcre | 1 | 0.20190509 | +pg18 |
| pgroonga | 4.0.0 | 4.0.4 | +pg18 |
| pgroonga_database | 4.0.0 | 4.0.4 | +pg18 |
| plpgsql_check | 2.8.2 | 2.8.3 | +pg18 |
| uint | 1.20231206 | 1.20250815 | +pg18 |
| uint128 | 1.1.0 | 1.1.1 | +pg18 |
| omni_* | 20250525 | 20251108 | +pg18 |
| acl | 1.0.4 | +pg18 | |
| aggs_for_arrays | 1.3.3 | +pg18 | |
| aggs_for_vecs | 1.4.0 | +pg18 | |
| arraymath | 1.1 | +pg18 | |
| asn1oid | 1.6 | +pg18 | |
| aws_s3 | 0.0.1 | +pg18 | |
| base36 | 1.0.0 | +pg18 | |
| base62 | 0.0.1 | +pg18 | |
| bzip | 1.0.0 | +pg18 | |
| chkpass | 1.0 | +pg18 | |
| convert | 0.0.4 | +pg18 | |
| count_distinct | 3.0.2 | +pg18 | |
| country | 0.0.3 | +pg18 | |
| cryptint | 1.0.0 | +pg18 | |
| currency | 0.0.3 | +pg18 | |
| data_historization | 1.1.0 | +pg18 | |
| db_migrator | 1.0.0 | +pg18 | |
| dbt2 | 0.61.7 | +pg18 | |
| ddl_historization | 0.0.7 | +pg18 | |
| ddsketch | 1.0.1 | +pg18 | |
| decoder_raw | 1.0 | +pg18 | |
| decoderbufs | 3.2.0 | +pg18 | |
| emailaddr | 0 | +pg18 | |
| envvar | 1.0.1 | +pg18 | |
| faker | 0.5.3 | +pg18 | |
| financial | 1.0.1 | +pg18 | |
| fio | 1.0 | +pg18 | |
| first_last_agg | 0.1.4 | +pg18 | |
| floatfile | 1.3.1 | +pg18 | |
| floatvec | 1.1.1 | +pg18 | |
| geoip | 0.3.0 | +pg18 | |
| hashlib | 1.1 | +pg18 | |
| hashtypes | 0.1.5 | +pg18 | |
| hll | 2.18 | +pg18 | |
| hunspell_* | 1.0 | +pg18 | |
| imgsmlr | 1.0 | +pg18 | |
| index_advisor | 0.2.0 | +pg18 | |
| kafka_fdw | 0.0.3 | +pg18 | |
| login_hook | 1.7 | +pg18 | |
| oracle_fdw | 2.8.0 | +pg18 | |
| pg_auth_mon | 3.0 | +pg18 | |
| pg_background | 1.3 | +pg18 | |
| pg_bigm | 1.2 | +pg18 | |
| pg_cron | 1.6.7 | +pg18 | |
| pg_profile | 4.10 | +pg18 | |
| pg_stat_kcache | 2.3.0 | +pg18 | |
| pgdd | 0.6.0 | +pg18 | |
| pgjwt | 0.2.0 | +pg18 | |
| pgnodemx | 1.7 | +pg18 | |
| pgsodium | 3.1.9 | +pg18 | |
| pgtap | 1.3.3 | +pg18 | |
| plprofiler | 4.2.5 | +pg18 | |
| plproxy | 2.11.0 | +pg18 | |
| plr | 8.4.8 | +pg18 | |
| plv8 | 3.2.4 | +pg18 | |
| pointcloud | 1.2.5 | +pg18 | |
| powa | 5.0.1 | +pg18 | |
| prefix | 1.2.10 | +pg18 | |
| q3c | 2.0.1 | +pg18 | |
| redis_fdw | 1.0 | +pg18 | |
| session_variable | 3.4 | +pg18 | |
| set_user | 4.1.0 | +pg18 | |
| system_stats | 3.2 | +pg18 | |
| temporal_tables | 1.2.2 | +pg18 | |
| topn | 2.7.0 | +pg18 | |
| unit | 7.10 | +pg18 | |
| zhparser | 2.3 | +pg18 | |
| zstd | 1.1.2 | +pg18 |
2025-09-04
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| timesacledb | 2.21.1 | 2.22.0 | |
| citus | 13.1.0 | 13.2.0 | |
| documentdb | 0.105.0 | 0.106.0 | work with ferretdb 2.5 |
| ddlx | 0.29 | 0.30 | + pg18 |
| icu_ext | 1.9.0 | 1.10.0 | + pg18 |
| asn1oid | 1.5 | 1.6 | + pg18 |
| uint128 | 1.0.0 | 1.1.0 | + pg18 |
| toastinfo | 1.5 | 1.6 | + pg18 |
| vchord | 0.4.3 | 0.5.1 | pgrx 0.16.0 |
| pg_idkit | 0.3.0 | 0.3.1 | pgrx 0.15.0 |
| pg_search | 0.17.3 | 0.18.0 | pgrx 0.15.0 |
| pg_parquet | 0.4.0 | 0.4.3 | pgrx 0.16.0 |
| wrappers | 0.5.3 | 0.5.4 | pgrx 0.14.3 |
| pg_rewrite | - | 2.0.0 | + Debian/Ubuntu (PGDG) |
| pg_tracing | - | 0.1.3-2 | + pg 14/18 |
| pg_curl | 2.4 | 2.4.5 | new version epoch |
| pg_rewrite | - | 2.0.0 | Import from PGDG |
| pg_tracing | - | 1.3.0 | + pg14 / pg18 |
| pgactive | 2.1.5 | 2.1.6 | + pg18 |
| sentinel | 1.1 | 1.2 | 1.2 |
| pg_tle | 1.5.1-1 | 1.5.1-2 | + pg18 |
| redis_fdw | + pg18 | ||
| pgextwlist | 1.17 | 1.19 | + pg18 |
| wal2json | 1.6 | + pg18 | |
| pgvector | 0.8.1 | + pg18 |
2025-07-24
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| OrioleDB | beta11 1.4 | beta12 1.5 | 与 oriolepg 17.11 配合 |
| OriolePG | 17.9 | 17.11 | 与 orioledb 1.5 beta12 配合 |
| documentdb | 0.104.0 | 0.105.0 | 与 ferretdb 2.4 配合 |
| timescaledb | 2.20.0 | 2.21.1 | |
| supautils | 2.9.2 | 2.10.0 | .so 位置变更 |
| plv8 | 3.2.3 | 3.2.4 | |
| postgresql_anonymizer | 3.1.1 | 2.3.0 (pgrx 0.14.3) | |
| wrappers | 0.5.0 | 0.5.3 (pgrx 0.14.3) | pgrx 版本变更 |
| pgvectorscale | 0.7.1 | 0.8.0 (pgrx 0.12.9) | |
| pg_search | 0.15.8 | 0.17.0 (download) | 修复 el icu 依赖问题 |
2025-06-24
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| citus | 13.0.3 | 13.1.0 | |
| timescaledb | 2.20.0 | 2.21.0 | |
| vchord | 0.3.0 | 0.4.3 | |
| pgactive | - | 2.1.5 | 需要 pgfeutils |
| documentdb | 0.103.0 | 0.104.0 | 添加 arm 支持 |
2025-05-26
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| pgdd | 0.5.0 | 0.6.0 | |
| convert | - | 0.0.4 | |
| pg_idkit | 0.2.0 | 0.3.0 | |
| pg_tokenizer.rs | - | 0.1.0 | |
| pg_render | - | 0.1.2 | |
| pgx_ulid | - | 0.2.0 | |
| orioledb | 1.4.0b10 | 1.4.0b11 |
2025-05-22
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| openhalodb | - | 14.10 | |
| spat | - | 0.1.0a4 | |
| pgsentinel | - | 1.1.0 | |
| timescaledb | - | 2.20.0 | |
| sqlite_fdw | - | 2.5.0 | |
| documentdb | - | 0.103.0 | |
| tzf | - | 0.2.2 | |
| pg_vectorize | - | 0.22.2 | |
| wrappers | - | 0.5.0 |
2025-05-07
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| omnigres | - | 20250507 | |
| citus | - | 12.0.3 | |
| timescaledb | - | 2.19.3 | |
| supautils | - | 2.9.1 | |
| pg_envvar | - | 1.0.1 | |
| pgcollection | - | 1.0.0 | |
| aggs_for_vecs | - | 1.4.0 | |
| pg_tracing | - | 0.1.3 | |
| pgmq | - | 1.5.1 | |
| tzf-pg | - | 0.2.0 | |
| pg_search | - | 0.15.18 | |
| anon | - | 2.1.1 | |
| pg_parquet | - | 0.4.0 | |
| pg_cardano | - | 1.0.5 | |
| pglite_fusion | - | 0.0.5 | |
| vchord_bm25 | - | 0.2.1 | |
| vchord | - | 0.3.0 | |
| timescaledb-toolkit | - | 1.21.0 | |
| pgvectorscale | - | 0.7.1 | |
| pg_session_jwt | - | 0.3.1 |
2025-03-20
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| timescaledb | - | 2.19.0 | |
| citus | - | 13.0.2 | |
| documentdb | - | 1.102 | |
| pg_analytics | - | 0.3.7 | |
| pg_search | - | 0.15.8 | |
| emaj | - | 4.6.0 | |
| pgsql_tweaks | - | 0.11.0 | |
| pgvectorscale | - | 0.6.0 | |
| pg_session_jwt | - | 0.2.0 | |
| wrappers | - | 0.4.5 | |
| pg_parquet | - | 0.3.1 | |
| vchord | - | 0.2.2 | |
| pg_tle | 1.2.0 | 1.5.0 | |
| supautils | 2.5.0 | 2.6.0 | |
| sslutils | 1.3 | 1.4 | |
| pg_profile | 4.7 | 4.8 | |
| pg_jsonschema | 0.3.2 | 0.3.3 | |
| pg_incremental | 1.1.1 | 1.2.0 | |
| ddl_historization | 0.7 | 0.0.7 | |
| pg_sqlog | 3.1.7 | 1.6 | |
| pg_random | - | - | |
| pg_stat_monitor | 2.1.0 | 2.1.1 | |
| pg_profile | 4.7 | 4.8 |
2024-10-16
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| pg_timeseries | - | 0.1.6 | |
| pgmq | - | 1.4.4 | |
| pg_protobuf | - | 16 17 | |
| pg_uuidv7 | - | 1.6 | |
| pg_readonly | - | latest | |
| pgddl | - | 0.28 | |
| pg_safeupdate | - | latest | |
| pg_stat_monitor | - | 2.1 | |
| pg_profile | - | 4.7 | |
| system_stats | - | 3.2 | |
| pg_auth_mon | - | 3.0 | |
| login_hook | - | 1.6 | |
| logerrors | - | 2.1.3 | |
| pg-orphaned | - | latest | |
| pgnodemx | - | 1.7 | |
| sslutils | - | 1.4 (+16,17) |
9.7 - DEB 发布
查看 pgsty/deb 仓库的构建规范和 pigsty-pgsql 的使用方法
2025-11-20
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| vchord | 0.5.3 | 1.0.0 | |
| pg_later | 0.3.1 | 0.4.0 | |
| pgvectorscale | 0.8.0 | 0.9.0 | -pg13, +pg18 |
| pglite_fusion | 0.0.5 | 0.0.6 | |
| pgx_ulid | 0.2.1 | 0.2.2 | |
| pg_search | 0.19.5 | 0.19.7 | resume PIGSTY building |
| citus | 13.2.0 | 13.2.0 | official tag |
| timescaledb | 2.23.0 | 2.23.1 | |
| pg_profile | 4.10 | 4.11 | |
| pglinter | 1.0.0 | new | |
| pg_typeid | 0.3.0 | head with pg18 support | |
| pg_enigma | 0.4.0 | vonng patched pgrx version | |
| pg_retry | 1.0.0 | new, pg17-18 | |
| pg_biscuit | 1.0 | new, pg16-18 | |
| pg_weighted_statistics | 1.0.0 | new, pg13-18 | |
| documentdb | 0.106 | 0.107 | ferretdb fork |
| PolarDB | 15.15 | 15.15.5.0-38948055 |
2025-11-10
为几乎所有扩展添加 PostgreSQL 18 支持
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| omni_csv | - | 0.1.1 | new |
| omni_datasets | - | 0.1.0 | new |
| omni_shmem | - | 0.1.0 | new |
| pg_csv | - | 1.0.1 | new |
| pljs | - | 1.0.3 | new |
| plxslt | - | 0.20140221 | new |
| credcheck | 3.0 | 4.2 | +pg18 |
| dbt2 | 0.45.0 | 0.61.7 | +pg18 |
| h3 | 4.1.3 | 4.2.3 | +pg18 |
| h3_postgis | 4.1.3 | 4.2.3 | +pg18 |
| mongo_fdw | 1.1 | 5.5.3 | +pg18 |
| multicorn | 3.0 | 3.2 | +pg18 |
| orafce | 4.14.4 | 4.14.6 | +pg18 |
| pg_hint_plan | 1.7.0 | 1.8.0 | +pg18 |
| pg_search | 0.18.1 | 0.19.2 | +pg18 |
| pg_show_plans | 2.1.6 | 2.1.7 | +pg18 |
| pgactive | 2.1.6 | 2.1.7 | +pg18 |
| pgpcre | 1 | 0.20190509 | +pg18 |
| plpgsql_check | 2.8.2 | 2.8.3 | +pg18 |
| roaringbitmap | 0.5.4 | 0.5.5 | +pg18 |
| uint | 1.20231206 | 1.20250815 | +pg18 |
| uint128 | 1.1.0 | 1.1.1 | +pg18 |
| anon | 2.3.0 | 2.4.1 | +pg18 |
| collection | 1.0.0 | 1.1.0 | +pg18 |
| emaj | 4.7.0 | 4.7.1 | +pg18 |
| explain_ui | 0.0.1 | 0.0.2 | +pg18 |
| firebird_fdw | 1.4.0 | 1.4.1 | +pg18 |
| login_hook | 1.6 | 1.7 | +pg18 |
| logerrors | 2.1.3 | 2.1.5 | +pg18 |
| mobilitydb | 1.2.0 | 1.3.0 | +pg18 |
| omni | 0.2.9 | 0.2.14 | +pg18 |
| omni_httpc | 0.1.5 | 0.1.10 | +pg18 |
| omni_httpd | 0.4.6 | 0.4.11 | +pg18 |
| omni_kube | 0.1.1 | 0.4.2 | +pg18 |
| omni_sql | 0.5.1 | 0.5.3 | +pg18 |
| omni_sqlite | 0.1.2 | 0.2.2 | +pg18 |
| omni_worker | 0.1.0 | 0.2.1 | +pg18 |
| pg_cardano | 1.0.5 | 1.1.1 | +pg18 |
| pg_checksums | 1.2 | 1.3 | +pg18 |
| pg_cron | 1.6.5 | 1.6.7 | +pg18 |
| pg_duckdb | 0.3.1 | 1.1.0 | +pg18 |
| pg_failover_slots | 1.1.0 | 1.2.0 | +pg18 |
| pg_graphql | 1.5.11 | 1.5.12 | +pg18 |
| pg_idkit | 0.3.1 | 0.4.0 | +pg18 |
| pg_mooncake | 0.1.2 | 0.2.0 | +pg18 |
| pg_net | 0.9.2 | 0.20.0 | +pg18 |
| pg_parquet | 0.4.3 | 0.5.1 | +pg18 |
| pg_partman | 5.2.4 | 5.3.0 | +pg18 |
| pg_session_jwt | 0.3.1 | 0.3.3 | +pg18 |
| pg_sphere | 1.5.1 | 1.5.2 | +pg18 |
| pg_stat_monitor | 2.2.0 | 2.3.0 | +pg18 |
| pg_statement_rollback | 1.4 | 1.5 | +pg18 |
| pg_store_plans | 1.8 | 1.9 | +pg18 |
| pg_task | 1.0.0 | 2.1.12 | +pg18 |
| pg_tle | 1.5.1 | 1.5.2 | +pg18 |
| pg_uuidv7 | 1.6.0 | 1.7.0 | +pg18 |
| pglogical | 2.4.5 | 2.4.6 | +pg18 |
| pgmq | 1.5.1 | 1.7.0 | +pg18 |
| pgroonga | 4.0.0 | 4.0.4 | +pg18 |
| pgsql_tweaks | 0.11.3 | 1.0.2 | +pg18 |
| pldbgapi | 1.8 | 1.9 | +pg18 |
| plprql | 1.0.0 | 18.0.0 | +pg18 |
| supautils | 2.10.0 | 3.0.2 | +pg18 |
| timescaledb | 2.22.0 | 2.23.0 | +pg18 |
| timescaledb_toolkit | 1.21.0 | 1.22.0 | +pg18 |
| vchord | 0.5.1 | 0.5.3 | +pg18 |
| vectorize | 0.22.2 | 0.25.0 | +pg18 |
| wrappers | 0.5.4 | 0.5.6 | +pg18 |
| acl | 1.0.4 | - | +pg18 |
| aggs_for_arrays | 1.3.3 | - | +pg18 |
| aggs_for_vecs | 1.4.0 | - | +pg18 |
| base36 | 1.0.0 | - | +pg18 |
| hashlib | 1.1 | - | +pg18 |
| hll | 2.18 | - | +pg18 |
| imgsmlr | 1.0 | - | +pg18 |
| index_advisor | 0.2.0 | - | +pg18 |
| kafka_fdw | 0.0.3 | - | +pg18 |
| pg_auth_mon | 3.0 | - | +pg18 |
| pg_background | 1.3 | - | +pg18 |
| pg_bigm | 1.2 | - | +pg18 |
| pg_profile | 4.10 | - | +pg18 |
| pg_stat_kcache | 2.3.0 | - | +pg18 |
| pgdd | 0.6.0 | - | +pg18 |
| pgjwt | 0.2.0 | - | +pg18 |
| pgmp | 1.0.5 | - | +pg18 |
| plprofiler | 4.2.5 | - | +pg18 |
| plv8 | 3.2.4 | - | +pg18 |
| redis_fdw | 1.0 | - | +pg18 |
| repmgr | 5.5.0 | - | +pg18 |
| system_stats | 3.2 | - | +pg18 |
| topn | 2.7.0 | - | +pg18 |
| zhparser | 2.3 | - | +pg18 |
2025-09-06
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| timesacledb | 2.21.1 | 2.22.0 | |
| citus | 13.1.0 | 13.2.0 | |
| documentdb | 0.105.0 | 0.106.0 | work with ferretdb 2.5 |
| ddlx | 0.29 | 0.30 | + pg18 |
| uint128 | 1.0.0 | 1.1.0 | + pg18 |
| vchord | 0.4.3 | 0.5.1 | pgrx 0.16.0 |
| pg_idkit | 0.3.0 | 0.3.1 | pgrx 0.15.0 |
| pg_search | 0.17.3 | 0.18.0 | pgrx 0.15.0 |
| pg_parquet | 0.4.0 | 0.4.3 | pgrx 0.16.0 |
| wrappers | 0.5.3 | 0.5.4 | pgrx 0.14.3 |
| pg_rewrite | - | 2.0.0 | + Debian/Ubuntu |
| pg_tracing | - | 0.1.3-2 | + pg 14/18 |
| pg_curl | 2.4 | 2.4.5 | |
| pg_ivm | 1.11 | 1.12 | + pg18 |
| pg_rewrite | - | 2.0.0 | new extension |
| pg_tracing | - | 1.3.0 | + pg14 / pg18 |
| pgactive | 2.1.5 | 2.1.6 | + pg18 |
| pgsentinel | 1.1 | 1.2 | 1.2 |
| pg_tle | 1.5.1-1 | 1.5.1-2 | + pg18 |
| redis_fdw | + pg18 | ||
| emaj | 4.6 | 4.7 | |
| table_version | 1.11.0 | 1.11.1 |
2025-07-24
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| OrioleDB | beta11 1.4 | beta12 1.5 | 与 oriolepg 17.11 配合 |
| OriolePG | 17.9 | 17.11 | 与 orioledb 1.5 beta12 配合 |
| documentdb | 0.104.0 | 0.105.0 | 与 ferretdb 2.4 配合 |
| timescaledb | 2.20.0 | 2.21.1 | |
| supautils | 2.9.2 | 2.10.0 | .so 位置变更 |
| plv8 | 3.2.3 | 3.2.4 | |
| postgresql_anonymizer | 3.1.1 | 2.3.0 (pgrx 0.14.3) | |
| wrappers | 0.5.0 | 0.5.3 (pgrx 0.14.3) | pgrx 版本变更 |
| pgvectorscale | 0.7.1 | 0.8.0 (pgrx 0.12.9) | |
| pg_search | 0.15.8 | 0.17.0 (download) | 修复 el icu 依赖问题 |
| pg_profile | 4.8.0 | 4.10.0 |
2025-07-04
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| orioledb | 1.4 beta11 | 重新构建 | |
| pgvectorscale | 0.7.1 | 0.7.1 | 重新构建修复错误 |
| pg_stat_monitor | 2.1.1 | 2.2.0 | |
| pgsql-tweaks | 0.11.1 | 0.11.3 | |
| pg_tle | 1.5.0 | 1.5.1 | |
| pg_curl | 2.4 | 2.4.5 |
2025-06-24
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| citus | 13.0.3 | 13.1.0 | |
| timescaledb | 2.20.0 | 2.21.0 | |
| vchord | 0.3.0 | 0.4.3 | |
| pgactive | - | 2.1.5 | 需要 pgfeutils |
| documentdb | 0.103.0 | 0.104.0 | 添加 arm 支持 |
2025-05-26
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| pgdd | 0.5.0 | 0.6.0 | |
| convert | - | 0.0.4 | |
| pg_idkit | 0.2.0 | 0.3.0 | |
| pg_tokenizer.rs | - | 0.1.0 | |
| pg_render | - | 0.1.2 | |
| pgx_ulid | - | 0.2.0 | |
| pg_ivm | 1.10.0 | 1.11.0 | |
| orioledb | 1.4.0b10 | 1.4.0b11 |
2025-05-22
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| openhanded | - | 14.10 | |
| spat | - | 0.1.0a4 | |
| pgsentinel | - | 1.1.0 | |
| timescaledb | - | 2.20.0 | |
| sqlite_fdw | - | 2.5.0 | |
| documentdb | - | 0.103.0 | |
| tzf | - | 0.2.2 | |
| pg_vectorize | - | 0.22.2 | |
| wrappers | - | 0.5.0 |
2025-05-07
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| omnigres | - | 20250507 | |
| citus | - | 12.0.3 | |
| timescaledb | - | 2.19.3 | |
| supautils | - | 2.9.1 | |
| pg_envvar | - | 1.0.1 | |
| pgcollection | - | 1.0.0 | |
| aggs_for_vecs | - | 1.4.0 | |
| pg_tracing | - | 0.1.3 | |
| pgmq | - | 1.5.1 | |
| tzf-pg | - | 0.2.0 | |
| pg_search | - | 0.15.18 | |
| anon | - | 2.1.1 | |
| pg_parquet | - | 0.4.0 | |
| pg_cardano | - | 1.0.5 | |
| pglite_fusion | - | 0.0.5 | |
| vchord_bm25 | - | 0.2.1 | |
| vchord | - | 0.3.0 | |
| timescaledb-toolkit | - | 1.21.0 | |
| pgvectorscale | - | 0.7.1 | |
| pg_session_jwt | - | 0.3.1 |
2025-03-20
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| timescaledb | - | 2.19.0 | |
| citus | - | 13.0.2 | |
| documentdb | - | 1.102 | |
| pg_analytics | - | 0.3.7 | |
| pg_search | - | 0.15.8 | |
| pg_ivm | - | 1.10 | |
| emaj | - | 4.6.0 | |
| pgsql_tweaks | - | 0.11.0 | |
| pgvectorscale | - | 0.6.0 | |
| pg_session_jwt | - | 0.2.0 | |
| wrappers | - | 0.4.5 | |
| pg_parquet | - | 0.3.1 | |
| vchord | - | 0.2.2 | |
| pg_tle | 1.2.0 | 1.5.0 | |
| supautils | 2.5.0 | 2.6.0 | |
| sslutils | 1.3 | 1.4 | |
| pg_profile | 4.7 | 4.8 | |
| pg_jsonschema | 0.3.2 | 0.3.3 | |
| pg_incremental | 1.1.1 | 1.2.0 | |
| ddl_historization | 0.7 | 0.0.7 | |
| pg_sqlog | 3.1.7 | 1.6 | |
| pg_random | - | - | |
| pg_stat_monitor | 2.1.0 | 2.1.1 | |
| pg_profile | 4.7 | 4.8 |
2024-10-16
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| pg_ivm | - | 1.9 | |
| pg_timeseries | - | 0.1.6 | |
| pgmq | - | 1.4.4 | |
| pg_protobuf | - | 16 17 | |
| pg_uuidv7 | - | 1.6 | |
| pg_readonly | - | latest | |
| pgddl | - | 0.28 | |
| pg_safeupdate | - | latest | |
| pg_stat_monitor | - | 2.1 | |
| pg_profile | - | 4.7 | |
| system_stats | - | 3.2 | |
| pg_auth_mon | - | 3.0 | |
| login_hook | - | 1.6 | |
| logerrors | - | 2.1.3 | |
| pg-orphaned | - | latest | |
| pgnodemx | - | 1.7 | |
| sslutils | - | 1.4 (+16,17) |
9.8 - INFRA 发布
查看 pgsty/infra-pkg 仓库的构建规范和 pigsty-infra 的使用方法
2025-11-23
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| pgschema | - | 1.4.2 | new |
| pgflo | - | 0.0.15 | new |
| vector | 0.51.0 | 0.51.1 | bugfix release |
| sealos | 5.0.1 | 5.1.1 | |
| etcd | 3.6.5 | 3.6.6 | |
| duckdb | 1.4.1 | 1.4.2 | |
| pg_exporter | 1.0.2 | 1.0.3 | |
| pig | 0.7.1 | 0.7.2 | |
| grafana | 12.1.0 | 12.3.0 | |
| pg_timetable | 6.1.0 | 6.2.0 | |
| genai-toolbox | 0.16.0 | 0.21.0 | |
| timescaledb-tools | 0.18.0 | 0.18.1 | move to infra |
| timescaledb-event-streamer | 0.12.0 | 0.20.0 | |
| tigerbeetle | 0.16.60 | 0.16.65 | |
| victoria-metrics | 1.129.1 | 1.130.0 | |
| victorialogs | 1.37.2 | 1.38.0 | |
| grafana-victorialogs-ds | 0.21.4 | 0.22.1 | |
| grafana-victoriametrics-ds | 0.19.6 | 0.19.7 | |
| grafana-plugins | 12.0.0 | 12.3.0 |
2025-11-11
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| grafana | 12.1.0 | 12.2.1 | 下载地址发生变化 |
| prometheus | 3.6.0 | 3.7.3 | |
| pushgateway | 1.11.1 | 1.11.2 | |
| alertmanager | 0.28.1 | 0.29.0 | |
| nginx_exporter | 1.5.0 | 1.5.1 | |
| node_exporter | 1.9.1 | 1.10.2 | |
| pgbackrest_exporter | 0.20.0 | 0.21.0 | |
| redis_exporter | 1.77.0 | 1.80.0 | |
| duckdb | 1.4.0 | 1.4.1 | |
| dblab | 0.33.0 | 0.34.2 | |
| pg_timetable | 5.13.0 | 6.1.0 | |
| vector | 0.50.0 | 0.51.0 | |
| rclone | 1.71.1 | 1.71.2 | |
| victoria-metrics | 1.126.0 | 1.129.1 | |
| victoria-logs | 1.35.0 | 1.37.2 | |
| grafana-victorialogs-ds | 0.21.0 | 0.21.4 | |
| grafana-victoriametrics-ds | 0.19.4 | 0.19.6 | |
| grafana-infinity-ds | 3.5.0 | 3.6.0 | |
| genai-toolbox | 0.16.0 | 0.18.0 | |
| pev2 | 1.16.0 | 1.17.0 | |
| pig | 0.6.2 | 0.7.1 |
2025-10-18
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| prometheus | 3.5.0 | 3.6.0 | |
| nginx_exporter | 1.4.2 | 1.5.0 | |
| mysqld_exporter | 0.17.2 | 0.18.0 | |
| redis_exporter | 1.75.0 | 1.77.0 | |
| mongodb_exporter | 0.47.0 | 0.47.1 | |
| victoria-metrics | 1.121.0 | 1.126.0 | |
| vicotira-logs | 1.25.1 | 1.35.0 | |
| duckdb | 1.3.2 | 1.4.0 | |
| etcd | 3.6.4 | 3.6.5 | |
| restic | 0.18.0 | 0.18.1 | |
| tigerbeetle | 0.16.54 | 0.16.60 | |
| grafana-victorialogs-ds | 0.19.3 | 0.21.0 | |
| grafana-victoriametrics-ds | 0.18.3 | 0.19.4 | |
| grafana-infinity-ds | 3.3.0 | 3.5.0 | |
| genai-toolbox | 0.9.0 | 0.16.0 | |
| grafana | 12.1.0 | 12.2.0 | |
| vector | 0.49.0 | 0.50.0 | |
| rclone | 1.70.3 | 1.71.1 | |
| minio | 20250723155402 | 20250907161309 | |
| mcli | 20250721052808 | 20250813083541 |
2025-08-15
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| grafana | 12.0.0 | 12.1.0 | |
| pg_exporter | 1.0.1 | 1.0.2 | |
| pig | 0.6.0 | 0.6.1 | |
| vector | 0.48.0 | 0.49.0 | |
| redis_exporter | 1.74.0 | 1.75.0 | |
| mongo_exporter | 0.46.0 | 0.47.0 | |
| victoriametrics | 1.121.0 | 1.123.0 | |
| victorialogs: | 1.25.0 | 1.28.0 | |
| grafana-victoriametrics-ds | 0.17.0 | 0.18.3 | |
| grafana-victorialogs-ds | 0.18.3 | 0.19.3 | |
| grafana-infinity-ds | 3.3.0 | 3.4.1 | |
| etcd | 3.6.1 | 3.6.4 | |
| ferretdb | 2.3.1 | 2.5.0 | |
| tigerbeetle | 0.16.50 | 0.16.54 | |
| genai-toolbox | 0.9.0 | 0.12.0 |
2025-07-24
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| FerretDB | - | 2.4.0 | 与 documentdb 1.105 配合 |
| etcd | - | 3.6.3 | |
| minio | - | 20250723155402 | |
| mcli | - | 20250721052808 | |
| ivorysql | - | 4.5-0ffca11-20250709 | 修复 libxcrypt 依赖问题 |
2025-07-16
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| genai-toolbox | 0.8.0 | 0.9.0 | 各种 DBMS 的 MCP 工具箱 |
| victoriametrics | 1.120.0 | 1.121.0 | 拆分为各种包 |
| victorialogs | 1.24.0 | 1.25.0 | 拆分为各种包 |
| prometheus | 3.4.2 | 3.5.0 | |
| duckdb | 1.3.1 | 1.3.2 | |
| etcd | 3.6.1 | 3.6.2 | |
| tigerbeetle | 0.16.48 | 0.16.50 | |
| grafana-victoriametrics-ds | 0.16.0 | 0.17.0 | |
| rclone | 1.69.3 | 1.70.3 | |
| pig | 0.5.0 | 0.6.0 | |
| pev2 | 1.15.0 | 1.16.0 | |
| pg_exporter | 1.0.0 | 1.0.1 |
2025-07-04
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| prometheus | 3.4.1 | 3.4.2 | - |
| grafana | 12.0.1 | 12.0.2 | - |
| vector | 0.47.0 | 0.48.0 | - |
| rclone | 1.69.0 | 1.70.2 | - |
| vip-manager | 3.0.0 | 4.0.0 | - |
| blackbox_exporter | 0.26.0 | 0.27.0 | - |
| redis_exporter | 1.72.1 | 1.74.0 | - |
| duckdb | 1.3.0 | 1.3.1 | - |
| etcd | 3.6.0 | 3.6.1 | - |
| ferretdb | 2.2.0 | 2.3.1 | - |
| dblab | 0.32.0 | 0.33.0 | - |
| tigerbettle | 0.16.41 | 0.16.48 | - |
| grafana-victorialogs-ds | 0.16.3 | 0.18.1 | - |
| grafana-victoriametrics-ds | 0.15.1 | 0.16.0 | - |
| grafana-inifinity-ds | 3.2.1 | 3.3.0 | - |
| victorialogs | 1.22.2 | 1.24.0 | - |
| victoriametrics | 1.117.1 | 1.120.0 | - |
2025-06-01
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| grafana | - | 12.0.1 | - |
| prometheus | - | 3.4.1 | - |
| keepalived_exporter | - | 1.7.0 | - |
| redis_exporter | - | 1.73.0 | - |
| victoriametrics | - | 1.118.0 | - |
| victorialogs | - | 1.23.1 | - |
| tigerbeetle | - | 0.16.42 | - |
| grafana-victorialogs-ds | - | 0.17.0 | - |
| grafana-infinity-ds | - | 3.2.2 | - |
2025-05-22
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| dblab | - | 0.32.0 | - |
| prometheus | - | 3.4.0 | - |
| duckdb | - | 1.3.0 | - |
| etcd | - | 3.6.0 | - |
| pg_exporter | - | 1.0.0 | - |
| ferretdb | - | 2.2.0 | - |
| rclone | - | 1.69.3 | - |
| minio | - | 20250422221226 | 最后一个带管理 GUI 的版本 |
| mcli | - | 20250416181326 | - |
| nginx_exporter | - | 1.4.2 | - |
| keepalived_exporter | - | 1.6.2 | - |
| pgbackrest_exporter | - | 0.20.0 | - |
| redis_exporter | - | 1.27.1 | - |
| victoriametrics | - | 1.117.1 | - |
| victorialogs | - | 1.22.2 | - |
| pg_timetable | - | 5.13.0 | - |
| tigerbeetle | - | 0.16.41 | - |
| pev2 | - | 1.15.0 | - |
| grafana | - | 12.0.0 | - |
| grafana-victorialogs-ds | - | 0.16.3 | - |
| grafana-victoriametrics-ds | - | 0.15.1 | - |
| grafana-infinity-ds | - | 3.2.1 | - |
| grafana_plugins | - | 12.0.0 | - |
2025-04-23
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| mtail | - | 3.0.8 | 新 |
| pig | - | 0.4.0 | - |
| pg_exporter | - | 0.9.0 | - |
| prometheus | - | 3.3.0 | - |
| pushgateway | - | 1.11.1 | - |
| keepalived_exporter | - | 1.6.0 | - |
| redis_exporter | - | 1.70.0 | - |
| victoriametrics | - | 1.115.0 | - |
| victoria_logs | - | 1.20.0 | - |
| duckdb | - | 1.2.2 | - |
| pg_timetable | - | 5.12.0 | - |
| vector | - | 0.46.1 | - |
| minio | - | 20250422221226 | - |
| mcli | - | 20250416181326 | - |
2025-04-05
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| pig | - | 0.3.4 | - |
| etcd | - | 3.5.21 | - |
| restic | - | 0.18.0 | - |
| ferretdb | - | 2.1.0 | - |
| tigerbeetle | - | 0.16.34 | - |
| pg_exporter | - | 0.8.1 | - |
| node_exporter | - | 1.9.1 | - |
| grafana | - | 11.6.0 | - |
| zfs_exporter | - | 3.8.1 | - |
| mongodb_exporter | - | 0.44.0 | - |
| victoriametrics | - | 1.114.0 | - |
| minio | - | 20250403145628 | - |
| mcli | - | 20250403170756 | - |
2025-03-23
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| etcd | - | 3.5.20 | - |
| pgbackrest_exporter | - | 0.19.0 | 重新构建 |
| victorialogs | - | 1.17.0 | - |
| vslogcli | - | 1.17.0 | - |
2025-03-17
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| kafka | - | 4.0.0 | - |
| Prometheus | - | 3.2.1 | - |
| AlertManager | - | 0.28.1 | - |
| blackbox_exporter | - | 0.26.0 | - |
| node_exporter | - | 1.9.0 | - |
| mysqld_exporter | - | 0.17.2 | - |
| kafka_exporter | - | 1.9.0 | - |
| redis_exporter | - | 1.69.0 | - |
| DuckDB | - | 1.2.1 | - |
| etcd | - | 3.5.19 | - |
| FerretDB | - | 2.0.0 | - |
| tigerbeetle | - | 0.16.31 | - |
| vector | - | 0.45.0 | - |
| VictoriaMetrics | - | 1.114.0 | - |
| VictoriaLogs | - | 1.16.0 | - |
| rclone | - | 1.69.1 | - |
| pev2 | - | 1.14.0 | - |
| grafana-victorialogs-ds | - | 0.16.0 | - |
| grafana-victoriametrics-ds | - | 0.14.0 | - |
| grafana-infinity-ds | - | 3.0.0 | - |
| timescaledb-event-streamer | - | 0.12.0 | 新 |
| restic | - | 0.17.3 | 新 |
| juicefs | - | 1.2.3 | 新 |
2025-02-12
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| pushgateway | 1.10.0 | 1.11.0 | - |
| alertmanager | 0.27.0 | 0.28.0 | - |
| nginx_exporter | 1.4.0 | 1.4.1 | - |
| pgbackrest_exporter | 0.18.0 | 0.19.0 | - |
| redis_exporter | 1.66.0 | 1.67.0 | - |
| mongodb_exporter | 0.43.0 | 0.43.1 | - |
| VictoriaMetrics | 1.107.0 | 1.111.0 | - |
| VictoriaLogs | v1.3.2 | 1.9.1 | - |
| DuckDB | 1.1.3 | 1.2.0 | - |
| Etcd | 3.5.17 | 3.5.18 | - |
| pg_timetable | 5.10.0 | 5.11.0 | - |
| FerretDB | 1.24.0 | 2.0.0 | - |
| tigerbeetle | 0.16.13 | 0.16.27 | - |
| grafana | 11.4.0 | 11.5.1 | - |
| vector | 0.43.1 | 0.44.0 | - |
| minio | 20241218131544 | 20250207232109 | - |
| mcli | 20241121172154 | 20250208191421 | - |
| rclone | 1.68.2 | 1.69.0 | - |
2024-11-19
| 名称 | 旧版本 | 新版本 | 备注 |
|---|---|---|---|
| Prometheus | 2.54.0 | 3.0.0 | - |
| VictoriaMetrics | 1.102.1 | 1.106.1 | - |
| VictoriaLogs | v0.28.0 | 1.0.0 | - |
| MySQL Exporter | 0.15.1 | 0.16.0 | - |
| Redis Exporter | 1.62.0 | 1.66.0 | - |
| MongoDB Exporter | 0.41.2 | 0.42.0 | - |
| Keepalived Exporter | 1.3.3 | 1.4.0 | - |
| DuckDB | 1.1.2 | 1.1.3 | - |
| etcd | 3.5.16 | 3.5.17 | - |
| tigerbeetle | 16.8 | 0.16.13 | - |
| grafana | - | 11.3.0 | - |
| vector | - | 0.42.0 | - |
10 - 服务
Pigsty 旨在聚集PG生态的合力,帮助用户用好世界上最流行,最先进的开源数据库 —— PostgreSQL。 Pigsty 完全开源免费,并遵循开源软件惯例,不提供任何质保,用户自行承担使用风险。
我们深知专业支持对于企业客户的重要性,因此,Pigsty 提供付费订阅服务,提供质量保证与服务承诺, 提供更广泛的支持范围与顶级专家的咨询与协助。
按需专家服务,3000 元/主题,约一小时,聊透相关主题,例如:
- 根据您的需求与环境,提供架构设计建议与 Pigsty 配置文件
- 自托管 Supabase、odoo、dify、gitlab 等的指导
- 关于数据库、云、可观测性以及相关主题的咨询
- 调查故障原因,优化慢查询(紧急故障故障响应不适用)
- 制作或提供支持范围内的离线安装包
按需专家咨询服务 不提供 响应时间承诺。 如果您需要长期、可靠的 SLA 承诺支持,请参考 订阅计划。
- 在关键场景中运行数据库,需要严格 SLA 保障兜底。
- 希望对 Pigsty 与 PostgreSQL 相关疑难杂症提供兜底。
- 希望获取关于 PostgreSQL / Pigsty 生产环境最佳实践的指导。
- 希望有专家帮助解读监控图表,分析定位性能瓶颈与故障根因,给出意见。
- 希望根据现有资源与业务需求,规划满足安全/容灾/合规要求的数据库架构。
- 需要将其他数据库迁移至 PostgreSQL 数据库,或对历史遗留实例迁移与改造。
- 建设基于Prometheus / Grafana 技术栈的可观测性体系,数据大盘,可视化应用。
- 希望支持国产信创操作系统/国产信创 ARM 芯片架构,提供中文/本地化界面支持。
- 下云并寻求 RDS for PostgreSQL 的开源替代 —— 云中立,无供应商锁定的解决方案。
- 希望获取关于 Redis / ETCD / MinIO,以及 TimescaleDB / Citus 等扩展的专业支持。
- 希望规避 AGPL v3 协议对衍生作品强制使用同协议开源的的限制,进行二次开发与 OEM 贴牌。
- 希望将 Pigsty 作为 SaaS / PaaS / DBaaS 对外销售,或基于此发行版提供技术服务/咨询/云服务。
如果您需要更多信息,请 通过邮件联系作者 冯若航([email protected])。
订阅
Pigsty 提供 3 种订阅计划:标准版、专业版 和 企业版,供您按需选择:
| 项目 / 计划 | OSS | 标准版 | 专业版 | 企业版 |
|---|---|---|---|---|
| 许可证 | AGPLv3 | 商业 | 商业 | 商业 |
| 节点限制 | 无限制 | ≤ 5 | ≤ 15 | ≤ 45, 最多无限制 |
| 保证 | 无保证 | +Pigsty | +内核 | +扩展 |
| Pigsty 错误修复 | 最新次要版本 | 最新主要版本 | 全部 | 全部 |
| PG 支持 | 17 | 17,16 | 17,16,15,14,13 | 回到 9.x+ |
| PG 扩展 | +调试符号 | +所有版本 | +定制构建 | |
| 操作系统支持 | EL9, D12, U22 | +ARM64 | +EL8, U24 | +EL7,D11,U20 定制 |
| 架构支持 | x86_64 | x86_64, ARM64 | x86_64, ARM64 | x86_64, ARM64 |
| 离线包 | el9,d12,u22@x64 | +ARM64 | +操作系统次要版本 | 定制 |
| 核心模块 | ||||
| 异种内核 | x86, 在线 | +ARM64 | +离线安装 | +扩展支持 |
| 额外模块 | +ARM64 | +专业模块 | +试点模块 | |
| 高级 CLI | 是 | 是 | 是 | |
| DBA 小时 | 一次性设置 | 最多 5 小时/月 | 最多 10 小时/月 | |
| 专家支持 | 可用 | 1 人·天/年 | 2 人·天/年 | |
| 支持等级 | 标准 | 专业 | 企业 | |
| 支持 SLA | 5x8, 当日 | 5x8, < 4 小时 | 7x24, < 30 分钟 | |
| 价格 | 免费 | 10,000 美元/年 | 30,000 美元/年 | 60,000 美元/年 |
节点数量定义为在 Pigsty 部署的配置清单 中的独立 IP 地址总数,即 Pigsty 管理的节点总数。
Pigsty OSS
AGPLv3 许可证下免费,无保证
Pigsty 建立在开源基础上,也回馈开源社区。它是对 PostgreSQL 社区和所有用户的礼物——您可以在不付费的情况下获得 Pigsty 的完整核心功能。当然,与典型的开源软件一样,Pigsty 开源版本不提供任何保证服务,也不对其使用产生的任何后果承担责任。如果您需要保证,请考虑我们的订阅服务。
Pigsty 开源版本在 AGPLv3 许可证下发布,这是一个 copyleft、严格的开源许可证。 如果您是普通最终用户(即公有云供应商或数据库供应商以外的用户),我们不会对您对 Pigsty 的二次开发追究任何行动。 在实践中,对于大多数最终用户,它实际上是在更宽松的 Apache 2.0 许可证下许可的。
如果您发现 Pigsty 的任何缺陷,我们强烈鼓励您在 GitHub 上提交 Issue 来帮助我们改进。如果您有任何问题,可以在社区中寻求帮助。
对于开源版本,我们为三个精确定位的操作系统发行版——EL 9.5、Debian 12.10、Ubuntu 22.04.5——提供 PostgreSQL 17 的预构建标准离线包,都是最新的次要版本(作为开源支持的一种形式,也为 Debian 12 提供 aarch64 离线包)。
通过使用 Pigsty 开源版本,入门级开发人员和 DevOps 工程师可以访问专业 DBA 70%+ 的能力。即使没有专门的数据库专家,您也可以轻松建立高可用、高性能、易于维护、安全可靠的 PostgreSQL 数据库集群。如果在云中自托管,您可以立即节省 EC2/ESSD 和 RDS 服务之间的价格差异,实现高达 90+% 的显著成本降低。
| 代码 | 发行版主要版本 | 次要版本 | x86_64 |
aarch64 |
PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|---|---|---|
| EL9 | RHEL 9 / Rocky9 / Alma9 | 9.5 |
el9.x86_64 |
el9.aarch64 |
● | ||||
| D12 | Debian 12 (bookworm) |
12.10 |
d12.x86_64 |
d12.aarch64 |
● | ||||
| U22 | Ubuntu 22.04 (jammy) |
22.04.5 |
u22.x86_64 |
u22.aarch64 |
● |
● = 主要支持; ○ = 不可用; ◐ = 可用,DIY 无支持
Pigsty 标准版
中小企业、初创公司和自由职业者的经济选择
Pigsty 标准版订阅为中小企业提供了负担得起的安全网——我们为 Pigsty 软件本身提供保证和支持覆盖。标准版订阅使用专门的商业许可证,提供书面合同承诺,免除 Pigsty 的 AGPLv3 衍生作品开源义务。
我们为标准版订阅客户提供一次性架构咨询服务。根据您的环境和可用资源,我们将提出合适的数据库架构设计。无论您想使用 PostgreSQL 构建业务系统还是自托管 Odoo、Dify、Supabase、Gitlab 或其他应用程序,我们都可以提供全面支持,包括离线安装和网络解决方案。
Pigsty 标准版订阅包括基本的专家工单和问答服务。我们承诺在工作时间内回应您的问题。对于需要额外支持的更复杂问题,我们的专家支持(人·天)服务也可以购买。我们的 PostgreSQL 专业知识可以帮助您避免许多陷阱,为您节省时间、精力和成本。
对于主流开源 Linux 发行版(EL9、Debian 12、Ubuntu 22.04)的最新稳定次要版本,Pigsty 标准版订阅提供 x86_64 和 aarch64 的离线软件安装包。这些包包括 PostgreSQL 17 内核和所有可用扩展,经过测试以确保快速、稳定、高效的安装,版本一致,独立于网络环境和上游仓库变化。
Pigsty 标准版的起始价格为 8,000 美元/年,大致相当于 AWS HA RDS PG 4 个 vCPU 的年费或月薪 600 美元 的实习生的工资。
| 代码 | 发行版主要版本 | 次要版本 | x86_64 |
aarch64 |
PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|---|---|---|
| EL9 | RHEL 9 / Rocky9 / Alma9 | 9.5 |
el9.x86_64 |
el9.aarch64 |
● | ● | |||
| D12 | Debian 12 (bookworm) |
12.10 |
d12.x86_64 |
d12.aarch64 |
● | ● | |||
| U22 | Ubuntu 22.04 (jammy) |
22.04.5 |
u22.x86_64 |
u22.aarch64 |
● | ● |
Pigsty 专业版
典型企业用户的合适选择
Pigsty 专业版订阅在标准版产品的基础上提供更高级的咨询服务。专业版订阅包括复杂问题分析和性能瓶颈优化,确保您在关键时刻能够获得顶级 DBA 专业知识。
我们为专业版订阅客户提供全面的架构咨询。根据您的业务需求和资源可用性,我们制定最佳的数据库架构设计并确保其成功实施。我们还协助进行高可用性测试和 PITR 练习,并提供关于 Pigsty 监控系统、配置方法和管理命令的培训。
Pigsty 专业版订阅提供增强的支持。我们每年提供一个专家人·天,以及每月不超过五小时的 DBA 咨询和问答。我们还提供更快的 SLA 响应时间:对于常规问题,我们保证在工作日工作时间(5x8)内四小时内响应。
Pigsty 专业版订阅支持更广泛的操作系统,在支持的发行版列表中添加了 EL 8 和 Ubuntu 24.04,并为所有这些版本提供 aarch64 支持。如果您没有使用最新的次要版本,我们可以为您指定的次要版本定制离线软件包。此外,离线包包括所有 Pigsty 功能模块,如 PG 分支内核(IvorySQL、PolarDB、Babelfish)和所有 Pro/Beta 模块。
Pigsty 专业版提供对三个最新 PostgreSQL 主要发行版(17、16、15)的支持,并为 PostgreSQL 主要版本升级以及 Pigsty 升级提供专家指导。
Pigsty 专业版的起始价格为 24,000 美元/年,大致相当于 AWS HA RDS PG 11 个 vCPU 的年费,或月薪 2,000 美元 的初级 DevOps 工程师的年薪。
| 代码 | 发行版主要版本 | 次要版本 | x86_64 |
aarch64 |
PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|---|---|---|
| EL9 | RHEL 9 / Rocky9 / Alma9 | 9.5 |
el9.x86_64 |
el9.aarch64 |
● | ● | ● | ||
| D12 | Debian 12 (bookworm) |
12.10 |
d12.x86_64 |
d12.aarch64 |
● | ● | ● | ||
| U22 | Ubuntu 22.04 (jammy) |
22.04.5 |
u22.x86_64 |
u22.aarch64 |
● | ● | ● | ||
| U24 | Ubuntu 24.04 (noble) |
24.04.5 |
u24.x86_64 |
u24.aarch64 |
● | ● | ● | ||
| EL8 | RHEL 8 / Rocky8 / Alma8 | 8.10 |
el8.x86_64 |
el8.aarch64 |
● | ● | ● |
Pigsty 企业版
专为关键任务场景设计
Pigsty 企业版专为需要严格 SLA 的中大型企业或关键任务场景而设计。通过企业版订阅,我们提供最高级别的支持来满足您的所有数据库需求。
在企业版订阅下,我们帮助您设计和实施最佳的数据库架构解决方案。除了数据库演练、压力测试和性能评估外,我们还提供管理系统的咨询和培训,帮助您建立符合各种安全和合规要求的全面数据库管理框架。
Pigsty 企业版每年包括两个专家人·天,以及每月最多 10 小时的 DBA 咨询和问答。对于常规问题,我们保证 7x24 在 30 分钟内响应,并始终优先处理您的请求。
Pigsty 企业版订阅提供最广泛的操作系统支持,添加了 EL7、Debian 11 和 Ubuntu 20.04,包括 EOL 发行版。 我们还可以定制支持 Euler、Anolis、UOS、Kylin、TencentOS、AliOS、OpenCloudOS 和其他 Linux 发行版。
Pigsty 企业版订阅涵盖其活跃生命周期内的所有 PostgreSQL 主要发行版(13–17),确保不同主要版本之间的平滑就地升级。使用包含的人·天,您可以通过零停机、蓝绿部署过程将 PostgreSQL 集群迁移到最新主要版本。
Pigsty 企业版允许在指定规模下将 Pigsty 用作 DBaaS,允许您构建和销售云数据库服务。它还允许 OEM 使用——您可以在约定范围内使用自己的徽标、商标和品牌分发 Pigsty。
Pigsty 企业版的起始价格为 60,000 美元/年,相当于 AWS RDS for PostgreSQL 的 27 个 vCPU,或月薪 5,000 美元 的开发人员。
| 代码 | 发行版主要版本 | 次要版本 | x86_64 |
aarch64 |
PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|---|---|---|
| EL9 | RHEL 9 / Rocky9 / Alma9 | 9.5 |
el9.x86_64 |
el9.aarch64 |
● | ● | ● | ● | ● |
| D12 | Debian 12 (bookworm) |
12.10 |
d12.x86_64 |
d12.aarch64 |
● | ● | ● | ● | ● |
| U22 | Ubuntu 22.04 (jammy) |
22.04.5 |
u22.x86_64 |
u22.aarch64 |
● | ● | ● | ● | ● |
| U24 | Ubuntu 24.04 (noble) |
24.04.5 |
u24.x86_64 |
u24.aarch64 |
● | ● | ● | ● | ● |
| EL8 | RHEL 8 … / Anolis8 | 8.10 |
el8.x86_64 |
el8.aarch64 |
● | ● | ● | ● | ● |
| EL7 | RHEL 7 … / UOS / Euler | 7.9 |
el7.x86_64 |
el7.aarch64 |
● | ● | ● | ● | ● |
| D11 | Debian 11 (bullseye) |
11.11 |
d11.x86_64 |
d11.aarch64 |
● | ● | ● | ● | ● |
| U20 | Ubuntu 20.04 (focal) |
20.04.6 |
u20.x86_64 |
u20.aarch64 |
● | ● | ● | ● | ● |
定价
Pigsty 订阅是年度的,从约定日期开始。到期前付款意味着自动续订。连续订阅享受折扣:第二年 5% 折扣,后续年份 10% 折扣,三年承诺 15% 折扣。
订阅到期后,不续订将导致更新、技术支持和咨询停止,但之前安装的专业版软件仍可使用。不续订间隙在重新订阅时不需要补缴,但忠诚度折扣会重置。
Pigsty 的定价提供卓越的价值——以与雇用全职专家或使用云数据库服务相比较的成本,提供对顶级 DBA 专业知识和数据库管理实践的即时访问。作为参考,类似企业数据库服务的市场价格包括:
- AWS RDS for PostgreSQL HA:160 - 220 美元 / (vCPU·月),相当于 1,920 - 2,640 美元/年(每 vCPU)。
- EDB PostgreSQL Cloud Database Enterprise:183.3 美元 / (vCPU·月),相当于 2,200 美元/年(每 vCPU)。
- Fujitsu Enterprise PostgreSQL Kubernetes:3,200 美元 / (核心·年),相当于 1,200 美元/年(每 vCPU)。
- Oracle 年度服务费:(企业版 47,500 美元 + RAC 23,000 美元)* 22% 每年,相当于 3,878 美元/年(每 vCPU)。
企业数据库服务的公平市场价格通常在每 vCPU 1K - 4K 美元/年 的范围内。
Pigsty 的定价提供无与伦比的成本效率,特别是在高端服务器上。
11 - PostgreSQL
概念
了解 Pigsty 中的 PostgreSQL 集群架构,重要实体与核心概念。
PostgreSQL 集群架构与核心概念
通过负载均衡、代理、连接池提供可靠服务接入
定义、创建、管理业务数据库
定义、创建、管理业务用户与角色
使用 HBA 规则进行认证与访问控制
开箱即用的默认角色与权限模型
管理
使用不同风味的 PostgreSQL 内核分支
利用 437 个 PostgreSQL 扩展协同带来的超能力
定义不同类型的 PostgreSQL 实例和集群
使用 120 个参数来深度定制 PostgreSQL 集群
管理 PostgreSQL 集群、实例、用户、数据库
使用 Ansible 剧本进行控制原语操作
备份与时间点恢复 (PITR)
零停机蓝绿部署迁移
监控现有的 PostgreSQL 或 RDS 实例
使用 Grafana 仪表板可视化信息
11.1 - 架构
实体关系
Pigsty 的 PGSQL 模块中有四种核心实体类型:
- 集群:一个自治的 PostgreSQL 业务单元,其他实体的顶层命名空间
- 服务:集群能力的抽象,流量路由,通过不同的节点端口暴露服务
- 实例:一个 PostgreSQL 服务器,由单个节点上的一组运行进程和文件组成
- 节点:硬件资源的抽象,可以是裸机、虚拟机或 k8s pod

架构
以下是在 配置清单 中描述的 PostgreSQL 集群 pg-test:

它定义了一个如上所示的 高可用 PostgreSQL 集群,该集群中的相关实体包括:
- 1 个 PostgreSQL 集群:
pg-test - 2 个实例角色:
primary和replica - 3 个 PostgreSQL 实例:
pg-test-1、pg-test-2、pg-test-3 - 3 个节点:
10.10.10.11、10.10.10.12、10.10.10.13 - 4 个 PostgreSQL 服务,默认自动生成:
pg-test-primary:读写服务(路由到主库 pgbouncer)pg-test-replica:只读服务(路由到从库 pgbouncer)pg-test-default:直连读写服务(路由到主库 postgres)pg-test-offline:离线读取服务(路由到专用 postgres)
高可用
PostgreSQL 集群由 Patroni 管理, 这是一个经过实战验证的 PostgreSQL 高可用解决方案。 它将在多个节点上设置 PostgreSQL 复制,并在主节点宕机时执行自动故障转移。
备份由 pgBackRest 处理,这是一个强大的 PostgreSQL 备份工具, 支持增量备份/恢复、压缩、加密,备份到本地磁盘或 S3 / MinIO。
pgbouncer 是一个轻量级连接池,可以在高并发情况下提高性能。 它与 Postgres 服务器 1:1 部署,默认被主库/从库服务使用。
服务 由 HAProxy 暴露,这是一个高性能的 TCP/HTTP 负载均衡器,它是 NODE 模块的一部分。 4 个 默认服务 以幂等的方式在所有集群节点上自动暴露。
应用程序可以访问任何 haproxy 来访问 Postgres 集群,流量将根据 patroni 健康检查端点路由到正确的实例。 因此故障转移对应用程序是透明的。
patroni 需要您的部署中有一个正常工作的 ETCD,pgbackrest 可以使用可选的 MinIO 作为集中备份存储; 监控导出器将收集指标和日志到 Infra 模块。
组件
PGSQL 节点 由以下组件组成(部分可以禁用):

| 组件 | 端口 | 描述 |
|---|---|---|
postgres |
5432 |
由 Patroni 管理的 PostgreSQL 服务器进程 |
pgbouncer |
6432 |
Pgbouncer 连接池 |
pgbackrest |
- | 备份和时间点恢复工具 |
patroni |
8008 |
Patroni 高可用组件,管理 postgres |
primary @ haproxy |
5433 |
主库连接池:读写服务 |
replica @ haproxy |
5434 |
从库连接池:只读服务 |
default @ haproxy |
5436 |
主库直连服务 |
offline @ haproxy |
5438 |
离线直连:离线读取服务 |
pg_exporter |
9630 |
PostgreSQL 监控指标导出器 |
pgbouncer_exporter |
9631 |
pgbouncer 监控指标导出器 |
pgbackrest_exporter |
9854 |
pgbackrest 监控指标导出器 |
vip-manager |
- | 绑定 VIP 到主库 |
交互
同时,基础设施节点 由以下与 PGSQL 交互的组件组成:
| 组件 | 端口 | 域名 | 描述 |
|---|---|---|---|
nginx |
80 |
h.pigsty |
Web 服务门户(YUM/APT 仓库) |
alertmanager |
9059 |
a.pigsty |
告警聚合和分发 |
prometheus |
9058 |
p.pigsty |
监控时间序列数据库 |
grafana |
3000 |
g.pigsty |
可视化平台 |
lok |
3100 |
- | 日志收集服务器 |
pushgateway |
9091 |
- | 收集一次性作业指标 |
blackbox_exporter |
9115 |
- | 黑盒探测 |
dnsmasq |
53 |
- | DNS 服务器 |
chronyd |
123 |
- | NTP 时间服务器 |
ansible |
- | - | 运行剧本 |
- 集群 DNS 由基础设施节点上的 DNSMASQ 解析
- 集群 VIP 由
vip-manager管理,绑定到集群主库vip-manager将直接从etcd集群获取由patroni写入的集群领导者信息
- 集群服务由节点上的 Haproxy 暴露,服务通过节点端口(
543x)区分 - Pgbouncer 是监听端口 6432 的连接池
- 通过本地 unix socket 与 Postgres 服务器 1:1 部署
- 生产流量(主库/从库)默认通过 pgbouncer
- 通过将
pg_default_service_dest设置为postgres来绕过primary/replica服务的 pgbouncer - 默认/离线服务将始终绕过 pgbouncer 并直接连接到目标 Postgres
- Postgres 在端口 5432 提供关系数据库服务
- 在多个节点上安装 PGSQL 模块将自动基于复制形成高可用集群
- PostgreSQL 默认由
patroni监督
- Patroni 将默认在端口 8008 监督 PostgreSQL 服务器
- Patroni 将 postgres 服务器作为子进程生成
- Patroni 使用
etcd作为 DCS:配置存储、故障检测和领导者选举 - Patroni 将通过健康检查提供 Postgres 信息,由 HAProxy 使用
- Patroni 指标将被基础设施节点上的 prometheus 抓取
- PG Exporter 将在端口 9630 暴露 postgres 指标
- Pgbouncer Exporter 将在端口 9631 暴露 pgbouncer 指标
- Pgbouncer 的指标将被基础设施节点上的 prometheus 抓取
- pgBackRest 默认在本地仓库上工作(
pgbackrest_method)- 如果使用
local(默认)作为备份仓库,主库的pg_fs_backup用作本地备份仓库 - 如果使用
minio,pgBackRest 将在专用 MinIO 集群上创建仓库
- 如果使用
- Postgres 相关日志(postgres、pgbouncer、patroni、pgbackrest)由 promtail 在端口 9080 暴露
- Promtail 将日志发送到基础设施节点上的 Loki
完整实体关系图
一个 Pigsty 部署对应一个 配置清单 文件和一个 基础设施。 一个 Pigsty 部署中可能有多个数据库集群。
一个集群/实例可能有多个数据库,数据库包含表和其他对象(查询、索引、函数、序列…)。
11.2 - 配置
您可以定义不同类型的实例和集群。
- 身份参数:用于描述 PostgreSQL 集群的参数
- 命名规范:用于描述 PostgreSQL 集群的参数
- 主库:定义单实例集群
- 从库:定义具有一个主库和一个从库的基本高可用集群
- 离线库:为 OLAP/ETL/交互查询定义专用实例
- 同步从库:启用同步提交以确保无数据丢失
- 法定人数提交:使用法定人数同步提交获得更高的一致性级别
- 备用集群:克隆现有集群并跟随它
- 延迟集群:克隆现有集群用于紧急数据恢复
- Citus 集群:定义 Citus 分布式数据库集群
身份参数
描述 PostgreSQL 集群需要 4 个必需参数:
| 名称 | 类型 | 级别 | 描述 |
|---|---|---|---|
inventory_hostname |
ip |
实例 | PG 节点 IPv4 地址 |
pg_cluster |
string |
集群 | PG 数据库集群名称 |
pg_seq |
number |
实例 | PG 数据库实例 ID |
pg_role |
enum |
实例 | PG 数据库实例角色 |
pg_cluster:集群名称,在集群级别配置pg_role:在实例级别配置,标识实例的角色primary角色将此实例标记为集群领导者(初始时)replica是默认角色,将此实例标记为普通只读从库offline将此实例标记为服务于offline服务的特殊只读从库
pg_seq:用于在集群内标识实例,一个非负整数- 从 0 或 1 开始,按顺序递增分配,一旦分配就不要更改
{{ pg_cluster }}-{{ pg_seq }}用于唯一标识实例,即pg_instance{{ pg_cluster }}-{{ pg_role }}用于标识集群内的服务,即pg_service
pg_shard和pg_group用于水平分片集群,仅适用于 citus 和 greenplum
这些身份将在整个系统中使用,例如,指标可能如下所示:
分片集群
您可以使用可选的 pg_shard 和 pg_group 参数来标识水平分片集群:
例如,使用 citus、greenplum 或手动分片进行水平分片:
命名规范
- 集群名称应为有效的域名,匹配
[a-zA-Z0-9-]+,且 ≤ 40 字符 - 服务名称以集群名称为前缀,以单个单词为后缀,用
-连接 - 实例名称以集群名称为前缀,以整数为后缀,用
-连接 - 节点由其主要 IPv4 地址标识,主机名用作次要标识符
| 实体 | 命名示例 |
|---|---|
| 集群 | pg-meta、pg-test… |
| 服务 | pg-meta-primary、pg-test-replica、pg-test-offline、pg-test-standby、pg-meta-default |
| 实例 | pg-meta-1、pg-test-1、pg-test-2、pg-test-3… |
| 节点 | 10.10.10.10、10.10.10.11、10.10.10.12、10.10.10.13… |
版本策略
Pigsty 遵循 PostgreSQL 版本策略 并"官方"支持以下主要版本。
| 主版本 | 小版本 | 注释 | 扩展 RPM | 扩展 DEB |
|---|---|---|---|---|
18 |
18.1 |
最新稳定版本(推荐) | 392 | 390 |
17 |
17.7 |
次要稳定版本(推荐) | 418 | 413 |
16 |
16.11 |
2023-09-14 首次发布 | 420 | 412 |
15 |
15.15 |
2022-10-13 首次发布 | 422 | 414 |
14 |
14.20 |
2021-09-30 首次发布 | 410 | 402 |
13 |
13.23 |
2020-09-24 首次发布,即将结束支持 | 382 | 371 |
Pigsty 支持 PG 13 - 18。较低的主版本(12-)“可能"有效,但不保证。 对于遗留 PG 版本支持,请考虑我们的 专业服务。
要使用不同的主版本,请配置 pg_version 变量。
可以使用 -v <ver> 选项全局 配置。
只要它们在本地/上游仓库中可用,就不需要进一步更改。
主库
让我们从最简单的情况开始,单例元数据库:
使用以下命令在 10.10.10.11 节点上创建主数据库实例。
从库
要添加物理从库,您可以将新实例分配给 pg-test,并将 pg_role 设置为 replica:
离线库
离线实例是专用从库,用于服务慢查询、ETL、OLAP 流量和交互查询等。
要添加离线实例,分配一个新实例并将 pg_role 设置为 offline。
离线实例的工作方式类似于普通从库实例,但它在 pg-test-replica 服务中用作备份服务器。也就是说,只有当所有 replica 实例都宕机时,离线和主实例才会提供服务。
您可以使用 pg_default_hba_rules 和 pg_hba_rules 对离线实例进行临时访问控制。它将应用于离线实例和任何带有 pg_offline_query 标志的实例。
同步从库
Pigsty 默认使用异步流复制,可能有小的复制延迟(10KB / 10ms)。当主库失效时可能出现小的数据丢失窗口(可通过 pg_rpo 控制),但对于大多数场景这是可以接受的。
但在一些关键场景(例如金融交易)中,数据丢失是完全不可接受的,或者需要读写一致性。在这种情况下,您可以启用同步提交来确保这一点。
要启用同步从库模式,您可以在 pg_conf 中简单使用 crit.yml 模板:
要在现有集群上启用同步从库,配置 集群并启用 synchronous_mode:
如果 synchronous_mode: true,synchronous_standby_names 参数将由 patroni 管理。它将从所有可用从库中选择一个同步从库,并将其名称写入主库的配置文件。
法定人数提交
当启用 同步从库 时,PostgreSQL 将选择一个从库作为备用实例,所有其他从库作为候选。主库将等待备用实例刷新到磁盘后再确认提交,备用实例将始终拥有最新数据而没有任何延迟。
但是,您可以通过法定人数提交实现更高/更低的一致性级别(与可用性权衡)。
例如,要让所有 2 个从库确认提交:
如果您有更多从库并希望有更多同步从库,请相应增加 synchronous_node_count。注意在您 添加 或 移除 从库时相应调整 synchronous_node_count。
postgres synchronous_standby_names 参数将由 patroni 管理:
经典的法定人数提交是使用大多数从库来确认提交。
备用集群
您可以克隆现有集群并创建 备用集群,用于迁移、水平拆分、多可用区部署或灾难恢复。
备用集群的定义与任何其他普通集群相同,除了在主实例上定义了 pg_upstream。
例如,您有一个 pg-test 集群,要创建备用集群 pg-test2,配置清单可能如下所示:
而 pg-test2-1,pg-test2 的主库将是 pg-test 的从库,并在 pg-test2 中充当备用领导者。
只需确保在备份集群的主库上配置了 pg_upstream 参数,以自动从原始上游拉取备份。
延迟集群
延迟集群是一种特殊类型的备用集群,用于尽快恢复"意外删除"的数据。
例如,如果您希望有一个集群 pg-testdelay,其数据与 1 天前的 pg-test 集群相同:
当某些元组和表被意外删除时,您可以将此延迟集群推进到适当的时间点并从中选择数据。
它需要更多资源,但比 PITR 更快且影响更小。
Citus 集群
Pigsty 有原生 citus 支持。请查看 conf/citus.yml 示例。
要定义 citus 集群,您必须指定以下参数:
pg_mode必须设置为citus而不是默认的pgsqlpg_shard和pg_group必须在每个分片集群上定义patroni_primary_db必须定义以指定要管理的数据库- 如果您想使用
pg_dbsupostgres而不是默认的pg_admin_username执行管理命令,pg_dbsu_password必须设置为非空字符串明文密码
此外,需要允许从本地和其他数据节点进行 ssl 访问的额外 hba 规则。可能如下所示:
您可以在协调器节点上创建分布式表和引用表。自 citus 11.2 以来,任何数据节点都可以用作协调器节点。
11.3 - 参数
PGSQL 模块有 121 个参数。
| 章节 | 数量 | 描述 |
|---|---|---|
PG_ID |
11 | 计算和检查 Postgres 身份 - 用于识别 PGSQL 实体(如实例和服务)的参数 |
PG_BUSINESS |
12 | Postgres 业务对象定义 - 业务用户、数据库、服务和身份验证的配置 |
PG_INSTALL |
10 | 安装 PGSQL 包和扩展 - 数据库用户设置、版本选择和包安装的设置 |
PG_BOOTSTRAP |
35 | 使用 Patroni 初始化 HA Postgres 集群 - 包括数据目录、网络和高可用性设置的全面集群初始化 |
PG_PROVISION |
9 | 创建用户、数据库和数据库内对象 - 引导后的数据库对象置备和默认配置 |
PG_BACKUP |
6 | 使用 pgbackrest 设置备份仓库 - 使用 pgbackrest 的备份和恢复配置 |
PG_ACCESS |
16 | 暴露 pg 服务,绑定 VIP 和注册 DNS - 服务暴露、负载均衡、VIP 管理和 DNS 注册 |
PG_MONITOR |
18 | 为 PGSQL 实例添加监控 - 使用各种导出器进行指标收集的监控设置 |
PG_REMOVE:删除 Postgres 集群 |
| 名称 | 类型 | 级别 | 注释 |
|---|---|---|---|
pg_safeguard |
bool |
G/C/A | 启用时中止删除,默认为 false |
pg_rm_data |
bool |
G/C/A | 删除 PostgreSQL 数据,默认为 true |
pg_rm_backup |
bool |
G/C/A | 删除主实例的 pgBackRest 备份,默认为 true |
pg_rm_pkg |
bool |
G/C/A | 卸载 PostgreSQL 软件包,默认为 true |
PG_ID
以下是一些常用的参数,用于标识 PGSQL 实体:实例、服务等…
pg_mode
参数名称: pg_mode, 类型: enum, 层次:C
pgsql 集群模式,默认为 pgsql,即标准 PostgreSQL 集群。
pgsql: 标准 PostgreSQL 集群,默认值。citus: 使用 citus 扩展的水平分片集群。mssql: Babelfish MSSQL 线缆协议兼容内核。ivory: IvorySQL Oracle 兼容内核。polar: PolarDB for PostgreSQL 内核。oracle: PolarDB for Oracle 内核。gpsql: Greenplum / Cloudberry
如果 pg_mode 设置为 citus 或 gpsql,则需要 pg_shard 和 pg_group 用于水平分片集群。
pg_cluster
参数名称: pg_cluster, 类型: string, 层次:C
PostgreSQL 集群名称,必选的身份标识参数,没有默认值
集群名将用作资源的命名空间。
集群命名需要遵循特定的命名模式:[a-z][a-z0-9-]*,即,只使用数字与小写字母,且不以数字开头,以符合标识上的不同约束的要求。
pg_seq
参数名称: pg_seq, 类型: int, 层次:I
PostgreSQL 实例序列号,必选的身份标识参数,无默认值。
此实例的序号,在其集群内是唯一分配的,通常使用自然数,从0或1开始分配,通常不会回收重用。
pg_role
参数名称: pg_role, 类型: enum, 层次:I
pgsql 角色,必需,可以是 primary,replica,offline
PostgreSQL 实例的角色,可以是:primary、replica、standby 或 offline。
primary: 主库,集群中有且仅有一个。replica: 用于承载在线只读流量的副本,可能会有轻微复制延迟(10ms~100ms, 100KB)。standby: 始终与主库同步的特殊副本,没有复制延迟和数据丢失。(目前与replica相同)offline: 用于承接离线只读流量的离线副本,如统计分析/ETL/个人查询等。
身份参数,必需参数,实例级参数。
pg_instances
参数名称: pg_instances, 类型: dict, 层次:I
使用 {port:ins_vars} 的形式在一台主机上定义多个 PostgreSQL 实例。
此参数是为在单个节点上的多实例部署保留的参数,Pigsty 尚未实现此功能,并强烈建议独占节点部署。
pg_upstream
参数名称: pg_upstream, 类型: ip, 层次:I
备份集群或级联从库的上游实例 IP 地址。
在集群的 primary 实例上设置 pg_upstream ,表示此集群是一个备份集群,该实例将作为 standby leader,从上游集群接收并应用更改。
对非 primary 实例设置 pg_upstream 参数将指定一个具体实例作为物理复制的上游,如果与主实例 ip 地址不同,此实例将成为 级联副本 。确保上游 IP 地址是同一集群中的另一个实例是用户的责任。
pg_shard
参数名称: pg_shard, 类型: string, 层次:C
PostgreSQL 水平分片名称,对于分片集群来说(例如 citus 集群),这是的必选标识参数。
当多个标准的 PostgreSQL 集群一起以水平分片方式为同一业务提供服务时,Pigsty 将此组集群标记为 水平分片集群。
pg_shard 是分片组名称。它通常是 pg_cluster 的前缀。
例如,如果我们有一个分片组 pg-citus,并且其中有4个集群,它们的标识参数将是:
pg_group
参数名称: pg_group, 类型: int, 层次:C
PostgreSQL 水平分片集群的分片索引号,对于分片集群来说(例如 citus 集群),这是的必选标识参数。
此参数与 pg_shard 配对使用,通常可以使用非负整数作为索引号。
gp_role
参数名称: gp_role, 类型: enum, 层次:C
PostgreSQL 集群的 Greenplum/Matrixdb 角色,可以是 master 或 segment。
master: 标记 postgres 集群为 greenplum 主实例(协调节点),这是默认值。segment标记 postgres 集群为 greenplum 段集群(数据节点)。
此参数仅用于 Greenplum/MatrixDB 数据库 (pg_mode 为 gpsql),对于普通的 PostgreSQL 集群没有意义。
pg_exporters
参数名称: pg_exporters, 类型: dict, 层次:C
额外用于监控远程 PostgreSQL 实例的 Exporter 定义,默认值:{}
如果您希望监控远程 PostgreSQL 实例,请在监控系统所在节点(Infra节点)集群上的 pg_exporters 参数中定义它们,并使用 pgsql-monitor.yml 剧本来完成部署。
pg_offline_query
参数名称: pg_offline_query, 类型: bool, 层次:I
设置为 true 以在此实例上启用离线查询,默认为 false。
当某个 PostgreSQL 实例启用此参数时, 属于 dbrole_offline 分组的用户可以直接连接到该 PostgreSQL 实例上执行离线查询(慢查询,交互式查询,ETL/分析类查询)。
带有此标记的实例在效果上类似于为实例设置 pg_role = offline ,唯一的区别在于 offline 实例默认不会承载 replica 服务的请求,是作为专用的离线/分析从库实例而存在的。
如果您没有富余的实例可以专门用于此目的,则可以挑选一台普通的从库,在实例层次启用此参数,以便在需要时承载离线查询。
PG_BUSINESS
定制集群模板:用户,数据库,服务,权限规则。
用户需重点关注此部分参数,因为这里是业务声明自己所需数据库对象的地方。
- 业务用户定义:
pg_users - 业务数据库定义:
pg_databases - 集群专有服务定义:
pg_services(全局定义:pg_default_services) - PostgreSQL集群/实例特定的HBA规则:
pg_default_services - Pgbouncer连接池特定HBA规则:
pgb_hba_rules
默认的数据库用户及其凭据,强烈建议在生产环境中修改这些用户的密码。
- PG管理员用户:
pg_admin_username/pg_admin_password - PG复制用户:
pg_replication_username/pg_replication_password - PG监控用户:
pg_monitor_username/pg_monitor_password
pg_users
参数名称: pg_users, 类型: user[], 层次:C
PostgreSQL 业务用户列表,需要在 PG 集群层面进行定义。默认值为:[] 空列表。
每一个数组元素都是一个 用户/角色 定义,例如:
pg_databases
参数名称: pg_databases, 类型: database[], 层次:C
PostgreSQL 业务数据库列表,需要在 PG 集群层面进行定义。默认值为:[] 空列表。
每一个数组元素都是一个 业务数据库 定义,例如:
在每个数据库定义对象中,只有 name 是必选字段,其他的字段都是可选项。
pg_services
参数名称: pg_services, 类型: service[], 层次:C
PostgreSQL 服务列表,需要在 PG 集群层面进行定义。默认值为:[] ,空列表。
用于在数据库集群层面定义额外的服务,数组中的每一个对象定义了一个服务,一个完整的服务定义样例如下:
请注意,本参数用于在集群层面添加额外的服务。如果您想在全局定义所有 PostgreSQL 数据库都要提供的服务,可以使用 pg_default_services 参数。
pg_hba_rules
参数名称: pg_hba_rules, 类型: hba[], 层次:C
数据库集群/实例的客户端IP黑白名单规则。默认为:[] 空列表。
对象数组,每一个对象都代表一条规则, hba 规则对象的定义形式如下:
title: 规则的标题名称,会被渲染为 HBA 文件中的注释。rules:规则数组,每个元素是一条标准的 HBA 规则字符串。role:规则的应用范围,哪些实例角色会启用这条规则?common:对于所有实例生效primary,replica,offline: 只针对特定的角色pg_role实例生效。- 特例:
role: 'offline'的规则除了会应用在pg_role : offline的实例上,对于带有pg_offline_query标记的实例也生效。
除了上面这种原生 HBA 规则定义形式,Pigsty 还提供了另外一种更为简便的别名形式:
pg_default_hba_rules 与本参数基本类似,但它是用于定义全局的 HBA 规则,而本参数通常用于定制某个集群/实例的 HBA 规则。
pgb_hba_rules
参数名称: pgb_hba_rules, 类型: hba[], 层次:C
Pgbouncer 业务HBA规则,默认值为: [], 空数组。
此参数与 pg_hba_rules 基本类似,都是 hba 规则对象的数组,区别在于本参数是为 Pgbouncer 准备的。
pgb_default_hba_rules 与本参数基本类似,但它是用于定义全局连接池 HBA 规则,而本参数通常用于定制某个连接池集群/实例的 HBA 规则。
pg_replication_username
参数名称: pg_replication_username, 类型: username, 层次:G
PostgreSQL 物理复制用户名,默认使用 replicator,不建议修改此参数。
pg_replication_password
参数名称: pg_replication_password, 类型: password, 层次:G
PostgreSQL 物理复制用户密码,默认值为:DBUser.Replicator。
警告:请在生产环境中修改此密码!
pg_admin_username
参数名称: pg_admin_username, 类型: username, 层次:G
PostgreSQL / Pgbouncer 管理员名称,默认为:dbuser_dba。
这是全局使用的数据库管理员,具有数据库的 Superuser 权限与连接池的流量管理权限,请务必控制使用范围。
pg_admin_password
参数名称: pg_admin_password, 类型: password, 层次:G
PostgreSQL / Pgbouncer 管理员密码,默认为: DBUser.DBA。
警告:请在生产环境中修改此密码!
pg_monitor_username
参数名称: pg_monitor_username, 类型: username, 层次:G
PostgreSQL/Pgbouncer 监控用户名,默认为:dbuser_monitor。
这是一个用于监控的数据库/连接池用户,不建议修改此用户名。
但如果您的现有数据库使用了不同的监控用户,可以在指定监控目标时使用此参数传入使用的监控用户名。
pg_monitor_password
参数名称: pg_monitor_password, 类型: password, 层次:G
PostgreSQL/Pgbouncer 监控用户使用的密码,默认为:DBUser.Monitor。
请尽可能不要在密码中使用 @:/ 这些容易与 URL 分隔符混淆的字符,减少不必要的麻烦。
警告:请在生产环境中修改此密码!
pg_dbsu_password
参数名称: pg_dbsu_password, 类型: password, 层次:G/C
PostgreSQL pg_dbsu 超级用户密码,默认是空字符串,即不为其设置密码。
我们不建议为 dbsu 配置密码登陆,这会增大攻击面。例外情况是:pg_mode = citus,这时候需要为每个分片集群的 dbsu 配置密码,以便在分片集群内部进行连接。
PG_INSTALL
本节负责安装 PostgreSQL 及其扩展。如果您希望安装不同大版本与扩展插件,修改 pg_version 与 pg_extensions 即可,不过请注意,并不是所有扩展都在所有大版本可用。
pg_dbsu
参数名称: pg_dbsu, 类型: username, 层次:C
PostgreSQL 使用的操作系统 dbsu 用户名, 默认为 postgres,改这个用户名是不太明智的。
不过在特定情况下,您可能会使用到不同于 postgres 的用户名,例如在安装配置 Greenplum / MatrixDB 时,需要使用 gpadmin / mxadmin 作为相应的操作系统超级用户。
pg_dbsu_uid
参数名称: pg_dbsu_uid, 类型: int, 层次:C
操作系统数据库超级用户的 uid 和 gid,26 是 PGDG RPM 默认的 postgres 用户 UID/GID。
对于 Debian/Ubuntu 系统,没有默认值,且 26 号用户经常被占用。因此Pigsty 在检测到安装环境为 Debian 系,且 uid 为 26 时,会自动使用替换的 pg_dbsu_uid = 543。
pg_dbsu_sudo
参数名称: pg_dbsu_sudo, 类型: enum, 层次:C
数据库超级用户的 sudo 权限,可以是 none、limit、all 或 nopass。默认为 limit
none: 无 Sudo 权限limit: 有限的 sudo 权限,用于执行与数据库相关的组件的systemctl命令(默认选项)。all: 完全的sudo权限,需要密码。nopass: 不需要密码的完全sudo权限(不推荐)。- 默认值为
limit,只允许执行sudo systemctl <start|stop|reload> <postgres|patroni|pgbouncer|...>。
可以使用 sudo 管理的服务列表:
- patroni
- pgbouncer
- postgres
- pg_exporter
- pgbackrest
- pgbouncer_exporter
- pgbackrest_exporter
- vip-manager
- haproxy (仅限reload)
pg_dbsu_home
参数名称: pg_dbsu_home, 类型: path, 层次:C
postgresql 主目录,默认为 /var/lib/pgsql,与官方的 pgdg RPM 保持一致。
pg_dbsu_ssh_exchange
参数名称: pg_dbsu_ssh_exchange, 类型: bool, 层次:C
是否在交换操作系统 dbsu 用户的 ssh 密钥?
默认值为 true,意味着数据库超级用户可以互相 ssh 访问。
对于严格限制 ssh 访问的场景,您可以将其设置为 false。
请注意,SSH 密钥交换发生在同时执行剧本的实例之间,如果您针对一个 PostgreSQL 集群运行 pgsql 角色,密钥交换将发生在这个集群中的所有实例之间。
如果您针对所有 PostgreSQL 集群运行 pgsql 角色,密钥交换将发生在 所有 实例之间,对于大规模集群,O(n2) 复杂度交换可能导致严重的组合爆炸。
如果任何参与交换的实例没有 pg_dbsu 用户,与该实例相关的密钥交换将失败,但不影响其他实例的密钥交换。
pg_version
参数名称: pg_version, 类型: enum, 层次:C
要安装的 postgres 主版本,默认为 18。
请注意,PostgreSQL 的物理流复制不能跨主要版本,因此最好不要在实例级别上配置此项。
您可以使用 pg_packages 和 pg_extensions 中的参数来为特定的 PG 大版本安装不同的软件包与扩展。
pg_bin_dir
参数名称: pg_bin_dir, 类型: path, 层次:C
PostgreSQL 二进制程序目录,默认为 /usr/pgsql/bin。
默认值是在安装过程中手动创建的软链接,指向安装的特定的 Postgres 版本目录。
例如 /usr/pgsql -> /usr/pgsql-17。在 Ubuntu/Debian 上则指向 /usr/lib/postgresql/15/bin。
更多详细信息,请查看 PGSQL 文件结构。
pg_log_dir
参数名称: pg_log_dir, 类型: path, 层次:C
PostgreSQL 日志目录,默认为:/pg/log/postgres,Promtail 会使用此变量收集 PostgreSQL 日志。
请注意,如果日志目录 pg_log_dir 以数据库目录 pg_data 作为前缀,则不会显式创建(数据库目录初始化时自动创建)。
pg_packages
参数名称: pg_packages, 类型: string[], 层次:C
要安装的 PostgreSQL 软件包(rpm/deb),这是一个由软件包名组成的数组,每个元素都是逗号或空格分割的 PG 软件包名或别名(Alias)。
默认值为:[ pgsql-main pgsql-common ]
这里的默认值是两个别名,分通过 别名翻译 为当前 PG 大版本对应的主要 RPM/DEB 包名,以及 PG 版本无关的通用组件(例如 Patroni,PgBackrest 等)
从 Pigsty v3 开始,您可以在本参数中使用roles/node_id/vars 中系统对应配置指定的别名列表。
使用包别名的好处是,您无需操心 PostgreSQL 相关软件包在不同系统平台上的包名,架构,以及大版本号,从而屏蔽了不同 OS 之间的区别:
定义在这里的软件包会首先经过 package_map 的翻译,然后经过 PG 大版本号的替换,最后安装实际的 RPM/DEB 包。
您也可以直接指定最终安装的 RPM/DEB 包名称,包名中的 ${pg_version} 或 $v 版本号占位符将被替换为具体的大版本号 pg_version 。
pg_extensions
参数名称: pg_extensions, 类型: string[], 层次:G/C
要安装的 PostgreSQL 扩展包(rpm/deb),这是一个由扩展包名组成的数组,每个元素都是逗号或空格分割的 PG 扩展包名。
本参数在形式上与 pg_packages 一致,但是通常用于指定需要安装的扩展插件,而且在这里指定的软件包会升级到可用的最新版本。
完整可用的扩展列表,已经在 Pigsty 默认生成的配置文件中给出,用户按需使用即可。
完整列表请参考:roles/node_id/vars 与 Pigsty 扩展目录
PG_BOOTSTRAP
使用 Patroni 引导拉起 PostgreSQL 集群,并设置 1:1 对应的 Pgbouncer 连接池。
它还会使用 PG_PROVISION 中定义的默认角色、用户、权限、模式、扩展来初始化数据库集群
pg_data
参数名称: pg_data, 类型: path, 层次:C
Postgres 数据目录,默认为 /pg/data。
这是一个指向底层实际数据目录的符号链接,在多处被使用,请不要修改它。参阅 PGSQL文件结构 获取详细信息。
pg_fs_main
参数名称: pg_fs_main, 类型: path, 层次:C
PostgreSQL 主数据盘的挂载点/文件系统路径,默认为/data/postgres。
默认值:/data/postgres,它将被用作 PostgreSQL 主数据目录。
建议使用 NVME SSD 作为 PostgreSQL 主数据存储,Pigsty默认为SSD存储进行了优化,但是也支持HDD。
您可以更改pg_storage_type为HDD以针对HDD存储进行优化。
pg_fs_bkup
参数名称: pg_fs_bkup, 类型: path, 层次:C
PostgreSQL 备份数据盘的挂载点/文件系统路径,默认为/data/backup。
如果您使用的是默认的 pgbackrest_method = local,建议为备份存储使用一个单独的磁盘。
备份磁盘应足够大,以容纳所有的备份,至少足以容纳3个基础备份+2天的WAL归档。 通常容量不是什么大问题,因为您可以使用便宜且大的机械硬盘作为备份盘。
建议为备份存储使用一个单独的磁盘,否则 Pigsty 将回退到主数据磁盘,并占用主数据盘的容量与IO。
pg_storage_type
参数名称: pg_storage_type, 类型: enum, 层次:C
PostgreSQL 数据存储介质的类型:SSD或HDD,默认为SSD。
默认值:SSD,它会影响一些调优参数,如 random_page_cost 和 effective_io_concurrency 。
pg_dummy_filesize
参数名称: pg_dummy_filesize, 类型: size, 层次:C
/pg/dummy的大小,默认值为64MiB,用于紧急使用的64MB磁盘空间。
当磁盘已满时,删除占位符文件可以为紧急使用释放一些空间,建议生产使用至少8GiB。
pg_listen
参数名称: pg_listen, 类型: ip, 层次:C
PostgreSQL / Pgbouncer 的监听地址,默认为0.0.0.0(所有ipv4地址)。
您可以在此变量中使用占位符,例如:'${ip},${lo}'或'${ip},${vip},${lo}':
${ip}:转换为inventory_hostname,它是配置清单中定义的首要内网IP地址。${vip}:如果启用了pg_vip_enabled,将使用pg_vip_address的主机部分。${lo}:将替换为127.0.0.1
对于高安全性要求的生产环境,建议限制监听的IP地址。
pg_port
参数名称: pg_port, 类型: port, 层次:C
PostgreSQL 服务器监听的端口,默认为 5432。
pg_localhost
参数名称: pg_localhost, 类型: path, 层次:C
本地主机连接 PostgreSQL 使用的 Unix套接字目录,默认值为/var/run/postgresql。
PostgreSQL 和 Pgbouncer 本地连接的Unix套接字目录,pg_exporter 和 patroni 都会优先使用 Unix 套接字访问 PostgreSQL。
pg_namespace
参数名称: pg_namespace, 类型: path, 层次:C
在 etcd 中使用的顶级命名空间,由 patroni 和 vip-manager 使用,默认值是:/pg,不建议更改。
patroni_enabled
参数名称: patroni_enabled, 类型: bool, 层次:C
是否启用 Patroni ?默认值为:true。
如果禁用,则在初始化期间不会创建Postgres集群。Pigsty将跳过拉起 patroni的任务,当试图向现有的postgres实例添加一些组件时,可以使用此参数。
patroni_mode
参数名称: patroni_mode, 类型: enum, 层次:C
Patroni 工作模式:default,pause,remove。默认值:default。
default:正常使用 Patroni 引导 PostgreSQL 集群pause:与default相似,但在引导后进入维护模式remove:使用Patroni初始化集群,然后删除Patroni并使用原始 PostgreSQL。
patroni_port
参数名称: patroni_port, 类型: port, 层次:C
patroni监听端口,默认为8008,不建议更改。
Patroni API服务器在此端口上监听健康检查和API请求。
patroni_log_dir
参数名称: patroni_log_dir, 类型: path, 层次:C
patroni日志目录,默认为/pg/log/patroni,由promtail收集。
patroni_ssl_enabled
参数名称: patroni_ssl_enabled, 类型: bool, 层次:G
使用SSL保护patroni RestAPI通信吗?默认值为false。
此参数是一个全局标志,只能在部署之前预先设置。因为如果为 patroni 启用了SSL,您将必须使用 HTTPS 而不是 HTTP 执行健康检查、获取指标,调用API。
patroni_watchdog_mode
参数名称: patroni_watchdog_mode, 类型: string, 层次:C
patroni看门狗模式:automatic,required,off,默认值为 off。
在主库故障的情况下,Patroni 可以使用看门狗 来强制关机旧主库节点以避免脑裂。
off:不使用看门狗。完全不进行 Fencing (默认行为)automatic:如果内核启用了softdog模块并且看门狗属于dbsu,则启用watchdog。required:强制启用watchdog,如果softdog不可用则拒绝启动 Patroni/PostgreSQL。
默认值为off,您不应该在 Infra节点 启用看门狗,数据一致性优先于可用性的关键系统,特别是与钱有关的业务集群可以考虑打开此选项。
请注意,如果您的所有访问流量都使用 HAproxy 健康检查服务接入,正常是不存在脑裂风险的。
patroni_username
参数名称: patroni_username, 类型: username, 层次:C
Patroni REST API 用户名,默认为postgres,与patroni_password 配对使用。
Patroni的危险 REST API (比如重启集群)由额外的用户名/密码保护,查看配置集群和Patroni RESTAPI以获取详细信息。
patroni_password
参数名称: patroni_password, 类型: password, 层次:C
Patroni REST API 密码,默认为Patroni.API。
警告:务必生产环境中修改此参数!
pg_primary_db
参数名称: pg_primary_db, 类型: string, 层次:C
指定集群中的主数据库名称,用于 citus 等业务数据库,默认为 postgres。
例如,在使用 Patroni 管理高可用的 Citus 集群时,您必须选择一个 “主数据库”。
此外,在这里指定的数据库名称,将在 PGSQL 模块安装完成后,显示在打印的连接串中。
pg_parameters
参数名称: pg_parameters, 类型: dict, 层次:G/C/I
可用于指定并管理 postgresql.auto.conf 中的配置参数。
当集群所有实例完成初始化后,pg_param 任务将会把本字典中的 key / value 键值对依次覆盖写入 /pg/data/postgresql.auto.conf 中。
注意:请不要手工修改该配置文件,或通过
ALTER SYSTEM修改集群配置参数,修改会在下一次配置同步时被覆盖。
该变量的优先级大于 Patroni / DCS 中的集群配置(即优先级高于集群配置,由 Patroni edit-config 编辑的配置),因此通常可以在实例级别覆盖集群默认参数。
当您的集群成员有着不同的规格(不推荐的行为!)时,您可以通过本参数对每个实例的配置进行精细化管理。
请注意,一些 重要的集群参数(对主从库参数值有要求)是 Patroni 直接通过命令行参数管理的,具有最高优先级,无法通过此方式覆盖,对于这些参数,您必须使用 Patroni edit-config 进行管理与配置。
在主从上必须保持一致的 PostgreSQL 参数(不一致会导致从库无法启动!):
wal_levelmax_connectionsmax_locks_per_transactionmax_worker_processesmax_prepared_transactionstrack_commit_timestamp
在主从上最好保持一致的参数(考虑到主从切换的可能性):
listen_addressesportcluster_namehot_standbywal_log_hintsmax_wal_sendersmax_replication_slotswal_keep_segmentswal_keep_size
您可以设置不存在的参数(例如来自扩展的 GUC,从而配置 ALTER SYSTEM 无法修改的“尚未存在”的参数),但将现有配置修改为非法值可能会导致 PostgreSQL 无法启动,请谨慎配置!
pg_files
参数名称: pg_files, 类型: path[], 层次:C
用于指定需要拷贝至PGDATA目录的文件列表,默认为空数组:[]
在本参数中指定的文件将会被拷贝至 {{ pg_data }} 目录下,这主要用于下发特殊商业版本 PostgreSQL 内核要求的 License 文件。
目前仅有 PolarDB (Oracle兼容)内核需要许可证文件,例如,您可以将 license.lic 文件放置在 files/ 目录下,并在 pg_files 中指定:
pg_conf
参数名称: pg_conf, 类型: enum, 层次:C
配置模板:{oltp,olap,crit,tiny}.yml,默认为oltp.yml。
tiny.yml:为小节点、虚拟机、小型演示优化(1-8核,1-16GB)oltp.yml:为OLTP工作负载和延迟敏感应用优化(4C8GB+)(默认模板)olap.yml:为OLAP工作负载和吞吐量优化(4C8G+)crit.yml:为数据一致性和关键应用优化(4C8G+)
默认值:oltp.yml,但是配置程序将在当前节点为小节点时将此值设置为 tiny.yml。
您可以拥有自己的模板,只需将其放在templates/<mode>.yml下,并将此值设置为模板名称即可使用。
pg_max_conn
参数名称: pg_max_conn, 类型: int, 层次:C
PostgreSQL 服务器最大连接数。你可以选择一个介于 50 到 5000 之间的值,或使用 auto 选择推荐值。
默认值为 auto,会根据 pg_conf 和 pg_default_service_dest 来设定最大连接数。
- tiny: 250
- olap: 500
- crit: 500 (pgbouncer) / 1000 (postgres)
- oltp: 500 (pgbouncer) / 1000 (postgres)
不建议将此值设定为超过 5000,否则你还需要手动增加 haproxy 服务的连接限制。
Pgbouncer 的事务池可以缓解过多的 OLTP 连接问题,因此默认情况下不建议设置很大的连接数。
对于 OLAP 场景, pg_default_service_dest 修改为 postgres 可以绕过连接池。
pg_shared_buffer_ratio
参数名称: pg_shared_buffer_ratio, 类型: float, 层次:C
Postgres 共享缓冲区内存比例,默认为 0.25,正常范围在 0.1~0.4 之间。
默认值:0.25,意味着节点内存的 25% 将被用作 PostgreSQL 的分片缓冲区。如果您想为 PostgreSQL 启用大页,那么此参数值应当适当小于 node_hugepage_ratio。
将此值设定为大于 0.4(40%)通常不是好主意,但在极端情况下可能有用。
注意,共享缓冲区只是 PostgreSQL 中共享内存的一部分,要计算总共享内存,使用 show shared_memory_size_in_huge_pages;。
pg_rto
参数名称: pg_rto, 类型: int, 层次:C
以秒为单位的恢复时间目标(RTO)。这将用于计算 Patroni 的 TTL 值,默认为 30 秒。
如果主实例在这么长时间内失踪,将触发新的领导者选举,此值并非越低越好,它涉及到利弊权衡:
减小这个值可以减少集群故障转移期间的不可用时间(无法写入), 但会使集群对短期网络抖动更加敏感,从而增加误报触发故障转移的几率。
您需要根据网络状况和业务约束来配置这个值,在故障几率和故障影响之间做出权衡, 默认值是 30s,它将影响以下的 Patroni 参数:
pg_rpo
参数名称: pg_rpo, 类型: int, 层次:C
以字节为单位的恢复点目标(RPO),默认值:1048576。
默认为 1MiB,这意味着在故障转移期间最多可以容忍 1MiB 的数据丢失。
当主节点宕机并且所有副本都滞后时,你必须做出一个艰难的选择,在可用性和一致性之间进行权衡:
- 提升一个从库成为新的主库,并尽快将系统恢复服务,但要付出可接受的数据丢失代价(例如,少于 1MB)。
- 等待主库重新上线(可能永远不会),或人工干预以避免任何数据丢失。
你可以使用 crit.yml conf 模板来确保在故障转移期间没有数据丢失,但这会牺牲一些性能。
pg_libs
参数名称: pg_libs, 类型: string, 层次:C
预加载的动态共享库,默认为 pg_stat_statements,auto_explain,这是两个 PostgreSQL 自带的扩展,强烈建议启用。
对于现有集群,您可以直接配置集群的 shared_preload_libraries 参数并应用生效。
如果您想使用 TimescaleDB 或 Citus 扩展,您需要将 timescaledb 或 citus 添加到此列表中。timescaledb 和 citus 应当放在这个列表的最前面,例如:
其他需要动态加载的扩展也可以添加到这个列表中,例如 pg_cron, pgml 等,通常 citus 和 timescaledb 有着最高的优先级,应该添加到列表的最前面。
pg_delay
参数名称: pg_delay, 类型: interval, 层次:I
延迟备库复制延迟,默认值:0。
如果此值被设置为一个正值,备用集群主库在应用 WAL 变更之前将被延迟这个时间。设置为 1h 意味着该集群中的数据将始终滞后原集群一个小时。
查看 延迟备用集群 以获取详细信息。
pg_checksum
参数名称: pg_checksum, 类型: bool, 层次:C
为 PostgreSQL 集群启用数据校验和吗?v3.7.0 默认值是 true。
这个参数只能在 PGSQL 部署之前设置(但你可以稍后手动启用它)。
如果使用 pg_conf crit.yml 模板,无论此参数如何,都会始终启用数据校验和,以确保数据完整性。
pg_pwd_enc
参数名称: pg_pwd_enc, 类型: enum, 层次:C
密码加密算法:md5 或 scram-sha-256,默认值:scram-sha-256。
前者已经不再安全,如果你与旧客户端有兼容性问题,你可以将其设置为 md5。
pg_encoding
参数名称: pg_encoding, 类型: enum, 层次:C
数据库集群编码,默认为 UTF8。
除非你非常清楚自己在做什么,否则不建议使用其他非 UTF8 的编码。
pg_locale
参数名称: pg_locale, 类型: enum, 层次:C
PostgreSQL 使用的本地化规则集,默认为 C。会在数据库初始化时作为参数传递给 initdb 命令。
当 configure 检测到当前 PG 版本大于等于 17,或者当前系统明确支持 C.utf8 时,会自动配置此参数为 C.UTF-8。
当 PostgreSQL 版本大于等于 17 时, C 与 C.UTF-8 配置将使用 PostgreSQL 内部自带的 Locale Providier。
除非你非常清楚自己在做什么,否则强烈建议您使用默认的 C 或 C.UTF-8 配置。
通常应当与 pg_lc_collate 和 pg_lc_ctype 配置保持一致。
pg_lc_collate
参数名称: pg_lc_collate, 类型: enum, 层次:C
PostgreSQL 使用的本地化排序规则集,默认为 C,一旦确定,无法在集群层面修改。
当 configure 检测到当前 PG 版本大于等于 17,或者当前系统明确支持 C.utf8 时,会自动配置此参数为 C.UTF-8。
配置规则与 pg_locale 一致,但针对排序规则。
pg_lc_ctype
参数名称: pg_lc_ctype, 类型: enum, 层次:C
PostgreSQL 使用的本地化字符集定义 CTYPE,默认为 C,一旦确定,无法在集群层面修改。
当 configure 检测到当前 PG 版本大于等于 17,或者当前系统明确支持 C.utf8 时,会自动配置此参数为 C.UTF-8。
配置规则与 pg_locale 一致,但针对字符类型。
pgsodium_key
参数名称: pgsodium_key, 类型: string, 层次:C
默认值未定义,将使用 pg_cluster 的 SHA256 哈希值作为密钥。
你可以提供自定义的 pgsodium 密钥,应该是 64 位十六进制数字字符串。
密钥将被写入 /pg/conf/pgsodium.key。
pgsodium_getkey_script
参数名称: pgsodium_getkey_script, 类型: path, 层次:C
默认值为 pgsodium_getkey,它将 roles/pgsql/templates/pgsodium_getkey 渲染到 /pg/bin/pgsodium_getkey。
默认的 getkey 脚本只是从 /pg/conf/pgsodium.key 读取 pgsodium_key 并返回它。
如果你的密钥由外部系统(如 KMS、IAM 等)管理,你可以实现自己的 getkey 脚本从那里获取密钥:示例。
PG_PROVISION
如果说 PG_BOOTSTRAP 是创建一个新的集群,那么 PG_PROVISION 就是在集群中创建默认的对象,包括:
pg_provision
参数名称: pg_provision, 类型: bool, 层次:C
在集群拉起后,完整本节定义的 PostgreSQL 集群置备工作。默认值为true。
如果禁用,不会置备 PostgreSQL 集群。对于一些特殊的 “PostgreSQL” 集群,比如 Greenplum,可以关闭此选项跳过置备阶段。
pg_init
参数名称: pg_init, 类型: string, 层次:G/C
用于初始化数据库模板的Shell脚本位置,默认为 pg-init,该脚本会被拷贝至/pg/bin/pg-init后执行。
该脚本位于 roles/pgsql/templates/pg-init
你可以在该脚本中添加自己的逻辑,或者提供一个新的脚本放置在 templates/ 目录下,并将 pg_init 设置为新的脚本名称。使用自定义脚本时请保留现有的初始化逻辑。
pg_default_roles
参数名称: pg_default_roles, 类型: role[], 层次:G/C
Postgres 集群中的默认角色和用户。
Pigsty有一个内置的角色系统,请查看PGSQL访问控制:角色系统了解详情。
pg_default_privileges
参数名称: pg_default_privileges, 类型: string[], 层次:G/C
每个数据库中的默认权限(DEFAULT PRIVILEGE)设置:
Pigsty 基于默认角色系统提供了相应的默认权限设置,请查看PGSQL访问控制:权限了解详情。
pg_default_schemas
参数名称: pg_default_schemas, 类型: string[], 层次:G/C
要创建的默认模式,默认值为:[ monitor ],这将在所有数据库上创建一个monitor模式,用于放置各种监控扩展、表、视图、函数。
pg_default_extensions
参数名称: pg_default_extensions, 类型: extension[], 层次:G/C
要在所有数据库中默认创建启用的扩展列表,默认值:
唯一的三方扩展是 pg_repack,这对于数据库维护很重要,所有其他扩展都是内置的 PostgreSQL Contrib 扩展插件。
监控相关的扩展默认安装在 monitor 模式中,该模式由pg_default_schemas创建。
pg_reload
参数名称: pg_reload, 类型: bool, 层次:A
在hba更改后重新加载 PostgreSQL,默认值为true
当您想在应用HBA更改之前进行检查时,将其设置为false以禁用自动重新加载配置。
pg_default_hba_rules
参数名称: pg_default_hba_rules, 类型: hba[], 层次:G/C
PostgreSQL 基于主机的认证规则,全局默认规则定义。默认值为:
默认值为常见场景提供了足够的安全级别,请查看PGSQL身份验证了解详情。
本参数为 HBA规则对象组成的数组,在形式上与 pg_hba_rules 完全一致。 建议在全局配置统一的 pg_default_hba_rules,针对特定集群使用 pg_hba_rules 进行额外定制。两个参数中的规则都会依次应用,后者优先级更高。
pgb_default_hba_rules
参数名称: pgb_default_hba_rules, 类型: hba[], 层次:G/C
Pgbouncer 默认的基于主机的认证规则,数组或 hba 规则对象。
默认值提供了一套对于常见场景足够的安全级别,查看 PGSQL Authentication 了解详情。
默认的Pgbouncer HBA规则很简单:
- 允许从本地使用密码登陆
- 允许从内网网断使用密码登陆
用户可以按照自己的需求进行定制。
本参数在形式上与 pgb_hba_rules 完全一致,建议在全局配置统一的 pgb_default_hba_rules,针对特定集群使用 pgb_hba_rules 进行额外定制。两个参数中的规则都会依次应用,后者优先级更高。
PG_BACKUP
本节定义了用于 pgBackRest 的变量,它被用于 PGSQL 时间点恢复 PITR 。
查看 PGSQL 备份 & PITR 以获取详细信息。
pgbackrest_enabled
参数名称: pgbackrest_enabled, 类型: bool, 层次:C
是否在 PGSQL 节点上启用 pgBackRest?默认值为: true
在使用本地文件系统备份仓库(local)时,只有集群主库才会真正启用 pgbackrest。其他实例只会初始化一个空仓库。
pgbackrest_clean
参数名称: pgbackrest_clean, 类型: bool, 层次:C
初始化时删除 PostgreSQL 备份数据吗?默认值为 true。
pgbackrest_log_dir
参数名称: pgbackrest_log_dir, 类型: path, 层次:C
pgBackRest 日志目录,默认为 /pg/log/pgbackrest,promtail 日志代理会引用此参数收集日志。
pgbackrest_method
参数名称: pgbackrest_method, 类型: enum, 层次:C
pgBackRest 仓库方法:默认可选项为:local、minio 或其他用户定义的方法,默认为 local。
此参数用于确定用于 pgBackRest 的仓库,所有可用的仓库方法都在 pgbackrest_repo 中定义。
Pigsty 默认使用 local 备份仓库,这将在主实例的 /pg/backup 目录上创建一个备份仓库。底层存储路径由 pg_fs_bkup 指定。
pgbackrest_init_backup
name: pgbackrest_init_backup, type: bool, level: C
Take a full backup after pgBackRest is initialized? default value is true.
An initial pgbackrest backup is created after repo init if:
pgbackrest_init_backupistrue(andpgbackrest_enabledistrueof course)- The
/etc/pgbackrest/initial.donemarker file doesn’t exist (will be created after the initial backup is done).
If you don’t want to take an initial full backup at all, just set this parameter tofalse.
pgbackrest_repo
参数名称: pgbackrest_repo, 类型: dict, 层次:G/C
pgBackRest 仓库文档:https://pgbackrest.org/configuration.html#section-repository
默认值包括两种仓库方法:local 和 minio,定义如下:
您可以定义新的备份仓库,例如使用 AWS S3,GCP 或其他云供应商的 S3 兼容存储服务。
在备份仓库定义参数中,你可以使用 ${pg_cluster} 变量来引用集群名称,例如作为备份路径或加密密钥的一部分。 但如果你有跨集群 PITR 的需求,则应该保持备份仓库路径与加密密钥相同。
PG_ACCESS
本节介绍如何将PostgreSQL服务暴露给外部世界,包括:
- 使用
haproxy在不同的端口上暴露不同的PostgreSQL服务 - 使用
vip-manager将可选的L2 VIP绑定到主实例 - 在基础设施节点上使用
dnsmasq注册集群/实例DNS记录
pgbouncer_enabled
name: pgbouncer_enabled, type: bool, level: C
default value is true, if disabled, pgbouncer will not be launched on pgsql host
pgbouncer_port
name: pgbouncer_port, type: port, level: C
pgbouncer listen port, 6432 by default
pgbouncer_log_dir
name: pgbouncer_log_dir, type: path, level: C
pgbouncer log dir, /pg/log/pgbouncer by default, referenced by promtail the logging agent.
pgbouncer_auth_query
name: pgbouncer_auth_query, type: bool, level: C
query postgres to retrieve unlisted business users? default value is false
If enabled, pgbouncer user will be authenticated against postgres databases with SELECT username, password FROM monitor.pgbouncer_auth($1), otherwise, only the users with pgbouncer: true will be allowed to connect to pgbouncer.
pgbouncer_poolmode
name: pgbouncer_poolmode, type: enum, level: C
Pgbouncer pooling mode: transaction, session, statement, transaction by default
session: Session-level pooling with the best compatibility.transaction: Transaction-level pooling with better performance (lots of small conns), could break some session level features such as notify/listen, etc…statements: Statement-level pooling which is used for simple read-only queries.
If your application has some compatibility issues with pgbouncer, you can try to change this value to session instead.
pgbouncer_sslmode
name: pgbouncer_sslmode, type: enum, level: C
pgbouncer client ssl mode, disable by default
default values: disable, beware that this may have a huge performance impact on your pgbouncer.
disable: Plain TCP. If a client requests TLS, it’s ignored. Default.allow: If a client requests TLS, it is used. If not, plain TCP is used. If the client presents a client certificate, it is not validated.prefer: Same as allow.require: Client must use TLS. If not, the client connection is rejected. If the client presents a client certificate, it is not validated.verify-ca: Client must use TLS with valid client certificate.verify-full: Same as verify-ca.
pgbouncer_ignore_param
name: pgbouncer_ignore_param, type: string[], level: G/C
default values: [ extra_float_digits, application_name, TimeZone, DateStyle, IntervalStyle, search_path ]
This will be used as value of ignore_startup_parameters in pgbouncer.
pg_weight
参数名称: pg_weight, 类型: int, 层次:G
服务中的相对负载均衡权重,默认为100,范围0-255。
默认值: 100。您必须在实例变量中定义它,并重载服务以生效。
pg_service_provider
参数名称: pg_service_provider, 类型: string, 层次:G/C
专用的haproxy节点组名,或默认为本地节点的空字符串。
如果指定,PostgreSQL服务将注册到专用的haproxy节点组,而不是当下的 PGSQL 集群节点。
请记住为每个服务在专用的 haproxy 节点上分配唯一的端口!
例如,如果我们在3节点的 pg-test 集群上定义以下参数:
pg_default_service_dest
参数名称: pg_default_service_dest, 类型: enum, 层次:G/C
当定义一个服务时,如果 svc.dest='default',此参数将用作默认值。
默认值: pgbouncer,意味着 5433 读写服务和 5434 只读服务将默认将流量路由到 pgbouncer。
如果您不想使用 pgbouncer,将其设置为 postgres。流量将直接路由到 postgres。
pg_default_services
参数名称: pg_default_services, 类型: service[], 层次:G/C
postgres默认服务定义
默认值是四个默认服务定义,如PGSQL Service所述
pg_vip_enabled
参数名称: pg_vip_enabled, 类型: bool, 层次:C
为 PGSQL 集群启用 L2 VIP吗?默认值是false,表示不创建 L2 VIP。
启用 L2 VIP 后,会有一个 VIP 绑定在集群主实例节点上,由 vip-manager 管理,根据 etcd 中的数据进行判断。
L2 VIP只能在相同的L2网络中使用,这可能会对您的网络拓扑产生额外的限制。
pg_vip_address
参数名称: pg_vip_address, 类型: cidr4, 层次:C
如果启用vip,则需要<ipv4>/<mask>格式的vip地址。
默认值: 127.0.0.1/24。这个值由两部分组成:ipv4和mask,用/分隔。
pg_vip_interface
参数名称: pg_vip_interface, 类型: string, 层次:C/I
vip network interface to listen, eth0 by default.
L2 VIP 监听的网卡接口,默认为 eth0。
它应该是您节点的首要网卡名,即您在配置清单中使用的IP地址。
如果您的节点有多块名称不同的网卡,您可以在实例变量上进行覆盖:
pg_dns_suffix
参数名称: pg_dns_suffix, 类型: string, 层次:C
PostgreSQL DNS 名称后缀,默认为空字符串。
在默认情况下,PostgreQL 集群名会作为 DNS 域名注册到 Infra 节点的 dnsmasq 中对外提供解析。
您可以通过本参数指定一个域名后缀,这样会使用 {{ pg_cluster }}{{ pg_dns_suffix }} 作为集群 DNS 名称。
例如,如果您将 pg_dns_suffix 设置为 .db.vip.company.tld,那么 pg-test 的集群 DNS 名称将是 pg-test.db.vip.company.tld
pg_dns_target
参数名称: pg_dns_target, 类型: enum, 层次:C
可以是:auto、primary、vip、none或一个特定的IP地址,它将是集群DNS记录的解析目标IP地址。
默认值: auto,如果pg_vip_enabled,将绑定到pg_vip_address,否则会回退到集群主实例的 IP 地址。
vip:绑定到pg_vip_addressprimary:解析为集群主实例IP地址auto:如果pg_vip_enabled,解析为pg_vip_address,或回退到集群主实例ip地址。none:不绑定到任何ip地址<ipv4>:绑定到指定的IP地址
PG_EXPORTER
PG Exporter 用于监控 PostgreSQL 数据库与 Pgbouncer 连接池的状态。
pg_exporter_enabled
参数名称: pg_exporter_enabled, 类型: bool, 层次:C
是否在 PGSQL 节点上启用 pg_exporter?默认值为:true。
PG Exporter 用于监控 PostgreSQL 数据库实例,如果不想安装 pg_exporter 可以设置为 false。
pg_exporter_config
参数名称: pg_exporter_config, 类型: string, 层次:C
pg_exporter 配置文件名,PG Exporter 和 PGBouncer Exporter 都会使用这个配置文件。默认值:pg_exporter.yml。
如果你想使用自定义配置文件,你可以在这里定义它。你的自定义配置文件应当放置于 files/<name>.yml。
例如,当您希望监控一个远程的 PolarDB 数据库实例时,可以使用样例配置:files/polar_exporter.yml。
pg_exporter_cache_ttls
参数名称: pg_exporter_cache_ttls, 类型: string, 层次:C
pg_exporter 收集器 TTL 阶梯(秒),默认为 1,10,60,300
默认值:1,10,60,300,它将为不同的度量收集器使用不同的TTL值: 1s, 10s, 60s, 300s。
PG Exporter 内置了缓存机制,避免多个 Prometheus 重复抓取对数据库产生不当影响,所有指标收集器按 TTL 分为四类:
例如,在默认配置下,存活类指标默认最多缓存 1s,大部分普通指标会缓存 10s(应当与 prometheus_scrape_interval 相同)。
少量变化缓慢的查询会有 60s 的TTL,极个别大开销监控查询会有 300s 的TTL。
pg_exporter_port
参数名称: pg_exporter_port, 类型: port, 层次:C
pg_exporter 监听端口号,默认值为:9631
pg_exporter_params
参数名称: pg_exporter_params, 类型: string, 层次:C
pg_exporter 所使用 DSN 中额外的 URL PATH 参数。
默认值:sslmode=disable,它将禁用用于监控连接的 SSL(因为默认使用本地 unix 套接字)。
pg_exporter_url
参数名称: pg_exporter_url, 类型: pgurl, 层次:C
如果指定了本参数,将会覆盖自动生成的 PostgreSQL DSN,使用指定的 DSN 连接 PostgreSQL 。默认值为空字符串。
如果没有指定此参数,PG Exporter 默认会使用以下的连接串访问 PostgreSQL :
当您想监控一个远程的 PostgreSQL 实例时,或者需要使用不同的监控用户/密码,配置选项时,可以使用这个参数。
pg_exporter_auto_discovery
参数名称: pg_exporter_auto_discovery, 类型: bool, 层次:C
启用自动数据库发现吗? 默认启用:true。
PG Exporter 默认会连接到 DSN 中指定的数据库 (默认为管理数据库 postgres) 收集全局指标,如果您希望收集所有业务数据库的指标,可以开启此选项。 PG Exporter 会自动发现目标 PostgreSQL 实例中的所有数据库,并在这些数据库中收集 库级监控指标。
pg_exporter_exclude_database
参数名称: pg_exporter_exclude_database, 类型: string, 层次:C
如果启用了数据库自动发现(默认启用),在这个参数指定的列表中的数据库将不会被监控。 默认值为: template0,template1,postgres,即管理数据库 postgres 与模板数据库会被排除在自动监控的数据库之外。
作为例外,DSN 中指定的数据库不受此参数影响,例如,PG Exporter 如果连接的是 postgres 数据库,那么即使 postgres 在此列表中,也会被监控。
pg_exporter_include_database
参数名称: pg_exporter_include_database, 类型: string, 层次:C
如果启用了数据库自动发现(默认启用),在这个参数指定的列表中的数据库才会被监控。默认值为空字符串,即不启用此功能。
参数的形式是由逗号分隔的数据库名称列表,例如:db1,db2,db3。
此参数相对于 pg_exporter_exclude_database 有更高的优先级,相当于白名单模式。如果您只希望监控特定的数据库,可以使用此参数。
pg_exporter_connect_timeout
参数名称: pg_exporter_connect_timeout, 类型: int, 层次:C
pg_exporter 连接超时(毫秒),默认为 200 (单位毫秒)
当 PG Exporter 尝试连接到 PostgreSQL 数据库时,最多会等待多长时间?超过这个时间,PG Exporter 将会放弃连接并报错。
默认值 200毫秒 对于绝大多数场景(例如:同可用区监控)都是足够的,但是如果您监控的远程 PostgreSQL 位于另一个大洲,您可能需要增加此值以避免连接超时。
pg_exporter_options
参数名称: pg_exporter_options, 类型: arg, 层次:C
传给 PG Exporter 的命令行参数,默认值为:"" 空字符串。
当使用空字符串时,会使用默认的命令参数:
注意,请不要在本参数中覆盖 pg_exporter_port 的端口配置。
pgbouncer_exporter_enabled
参数名称: pgbouncer_exporter_enabled, 类型: bool, 层次:C
在 PGSQL 节点上,是否启用 pgbouncer_exporter ?默认值为:true。
pgbouncer_exporter_port
参数名称: pgbouncer_exporter_port, 类型: port, 层次:C
pgbouncer_exporter 监听端口号,默认值为:9631
pgbouncer_exporter_url
参数名称: pgbouncer_exporter_url, 类型: pgurl, 层次:C
如果指定了本参数,将会覆盖自动生成的 pgbouncer DSN,使用指定的 DSN 连接 pgbouncer。默认值为空字符串。
如果没有指定此参数,Pgbouncer Exporter 默认会使用以下的连接串访问 Pgbouncer:
当您想监控一个远程的 Pgbouncer 实例时,或者需要使用不同的监控用户/密码,配置选项时,可以使用这个参数。
pgbouncer_exporter_options
参数名称: pgbouncer_exporter_options, 类型: arg, 层次:C
传给 Pgbouncer Exporter 的命令行参数,默认值为:"" 空字符串。
当使用空字符串时,会使用默认的命令参数:
注意,请不要在本参数中覆盖 pgbouncer_exporter_port 的端口配置。
pgbackrest_exporter_enabled
参数名称: pgbackrest_exporter_enabled, 类型: bool, 层次:C
在 PGSQL 节点上,是否启用 pgbackrest_exporter ?默认值为:true。
如果 pgbackrest_enabled 为 false,则本参数因短路无效。
pgbackrest_exporter_port
参数名称: pgbackrest_exporter_port, 类型: port, 层次:C
pgbackrest_exporter 监听端口号,默认值为:9854
pgbackrest_exporter_options
参数名称: pgbackrest_exporter_options, 类型: arg, 层次:C
传给 Pgbouncer Exporter 的命令行参数,默认值为:"" 空字符串。
PG_REMOVE
这些参数控制 pgsql-rm.yml,并与
v3.7.0 的 roles/pg_remove/defaults/main.yml 保持一致。
pg_safeguard
参数名称:pg_safeguard,类型:bool,层级:G/C/A
设为 true 时,pgsql-rm.yml 会在修改集群前中止。v3.7.0 默认值为 false。
pg_rm_data
参数名称:pg_rm_data,类型:bool,层级:G/C/A
删除 PostgreSQL 数据,默认值为 true;设为 false 可保留数据目录。
pg_rm_backup
参数名称:pg_rm_backup,类型:bool,层级:G/C/A
删除主实例时一并删除 pgBackRest 备份仓库,默认值为 true;设为 false
可保留备份。
pg_rm_pkg
参数名称:pg_rm_pkg,类型:bool,层级:G/C/A
删除时卸载 PostgreSQL 与扩展软件包。v3.7.0 角色默认值为 true;设为
false 可保留已安装的软件包。
11.4 - 管理
如何使用 Pigsty 维护现有的 PostgreSQL 集群?
以下是常见 PostgreSQL 管理任务的标准操作程序:
- 案例 1:创建集群
- 案例 2:创建用户
- 案例 3:创建数据库
- 案例 4:重载服务
- 案例 5:重载 HBA 规则
- 案例 6:配置集群
- 案例 7:添加从库
- 案例 8:移除从库
- 案例 9:移除集群
- 案例 10:主从切换
- 案例 11:备份集群
- 案例 12:恢复集群
- 案例 13:添加软件包
- 案例 14:安装扩展
- 案例 15:小版本升级
- 案例 16:大版本升级
快捷命令
PGSQL 剧本和快捷命令:
Patroni 管理命令和快捷方式:
pgBackRest 备份与恢复命令和快捷方式:
Systemd 组件快速参考:
创建集群
要创建新的 Postgres 集群,首先在配置清单中定义它,然后使用以下命令初始化:
注意,请先执行
bin/node-add,然后执行bin/pgsql-add,PGSQL 只能在受管节点上工作。
创建用户
要在现有 Postgres 集群上创建新的业务用户,将用户定义添加到 all.children.<cls>.pg_users,然后按如下方式创建用户:
创建数据库
要在现有 Postgres 集群上创建新的数据库用户,将数据库定义添加到 all.children.<cls>.pg_databases,然后按如下方式创建数据库:
注意:如果数据库指定了拥有者,该用户应该已经存在,否则您需要先 创建用户。
重载服务
服务是由 HAProxy 服务的暴露访问点。
此任务用于集群成员发生变化时,例如 添加/移除 从库、主从切换/故障转移或暴露新服务或更新现有服务的配置(例如负载均衡权重)。
要在整个代理集群或特定实例上创建新服务或重载现有服务:
重载 HBA 规则
此任务用于您的 Postgres/Pgbouncer HBA 规则发生变化时,您可能需要重载 HBA 以应用更改。
如果您有任何特定于角色的 HBA 规则,您可能也需要在主从切换/故障转移后重载 HBA。
要在整个集群或特定实例上重载 postgres 和 pgbouncer HBA 规则:
配置集群
要更改现有 Postgres 集群的配置,您必须在使用管理员用户的管理节点上发起控制命令:
更改 patroni 参数和 postgresql.parameters,使用向导保存并应用更改。
添加从库
要向现有 Postgres 集群添加新的从库,您必须将其定义添加到配置清单:all.children.<cls>.hosts,然后:
这将把节点 <ip> 添加到 pigsty 并将其初始化为集群 <cls> 的从库。
集群服务将被 重载 以采纳新成员。
移除从库
要从现有 PostgreSQL 集群中移除从库:
这将从集群 <cls> 中移除实例 <ip>。集群服务将被 重载 以从负载均衡器中踢出被移除的实例。
移除集群
要移除整个 Postgres 集群,只需运行:
主从切换
您可以使用 patroni 命令执行 PostgreSQL 集群主从切换。
备份集群
要使用 pgBackRest 创建备份,以本地数据库超级用户身份运行:
恢复集群
要将集群恢复到之前的时间点(PITR),以本地数据库超级用户身份运行:
然后按照指导向导操作,详情请查看备份和 PITR。
添加软件包
要添加更新版本的 RPM 软件包,您必须将它们添加到 repo_packages 和 repo_url_packages。
然后使用 ./infra.yml -t repo_build 子任务在基础设施节点上重建仓库,然后您可以使用 ansible 模块 package 安装这些软件包:
安装扩展
如果您想在 PostgreSQL 集群上安装扩展,将它们添加到 pg_extensions 并确保它们被安装:
一些扩展需要在 shared_preload_libraries 中加载,您可以将它们添加到 pg_libs,或 配置 现有集群。
最后,在集群主实例上执行 CREATE EXTENSION <extname>; 来安装它。
详情请查看 PGSQL 扩展:安装。
小版本升级
要执行小版本的服务器版本升级/降级,您必须首先将软件包 添加 到 yum/apt 仓库。
然后从所有从库执行滚动升级/降级,然后切换集群以升级主库。
大版本升级
实现大版本升级的最简单方法是使用新版本创建新集群,然后使用逻辑复制和蓝绿部署进行 迁移。
您也可以执行就地大版本升级,但不建议这样做,特别是当安装了某些扩展时。但这是可能的。
假设您想将 PostgreSQL 14 升级到 15,您必须将软件包 添加 到 yum/apt 仓库,并保证扩展也具有完全相同的版本。
11.4.1 - 参数优化
Pigsty 默认提供了四套场景化参数模板,可以通过 pg_conf 参数指定并使用。
tiny.yml:为小节点、虚拟机、小型演示优化(1-8核,1-16GB)oltp.yml:为OLTP工作负载和延迟敏感应用优化(4C8GB+)(默认模板)olap.yml:为OLAP工作负载和吞吐量优化(4C8G+)crit.yml:为数据一致性和关键应用优化(4C8G+)
Pigsty 会针对这四种默认场景,采取不同的参数优化策略,如下所示:
内存参数调整
Pigsty 默认会检测系统的内存大小,并以此为依据设定最大连接数量与内存相关参数。
pg_max_conn:postgres 最大连接数,auto将使用不同场景下的推荐值pg_shared_buffer_ratio:内存共享缓冲区比例,默认为 0.25
默认情况下,Pigsty 使用 25% 的内存作为 PostgreSQL 共享缓冲区,剩余的 75% 作为操作系统缓存。
默认情况下,如果用户没有设置一个 pg_max_conn 最大连接数,Pigsty 会根据以下规则使用默认值:
- oltp: 500 (pgbouncer) / 1000 (postgres)
- crit: 500 (pgbouncer) / 1000 (postgres)
- tiny: 300
- olap: 300
其中对于 OLTP 与 CRIT 模版来说,如果服务没有指向 pgbouncer 连接池,而是直接连接 postgres 数据库,最大连接会翻倍至 1000 条。
决定最大连接数后,work_mem 会根据共享内存数量 / 最大连接数计算得到,并限定在 64MB ~ 1GB 的范围内。
CPU参数调整
在 PostgreSQL 中,有 4 个与并行查询相关的重要参数,Pigsty 会自动根据当前系统的 CPU 核数进行参数优化。 在所有策略中,总并行进程数量(总预算)通常设置为 CPU 核数 + 8,且保底为 16 个,从而为逻辑复制与扩展预留足够的后台 worker 数量,OLAP 和 TINY 模板根据场景略有不同。
| OLTP | 设置逻辑 | 范围限制 |
|---|---|---|
max_worker_processes |
max(100% CPU + 8, 16) | 核数 + 4,保底 12, |
max_parallel_workers |
max(ceil(50% CPU), 2) | 1/2 CPU 上取整,最少两个 |
max_parallel_maintenance_workers |
max(ceil(33% CPU), 2) | 1/3 CPU 上取整,最少两个 |
max_parallel_workers_per_gather |
min(max(ceil(20% CPU), 2),8) | 1/5 CPU 下取整,最少两个,最多 8 个 |
| OLAP | 设置逻辑 | 范围限制 |
|---|---|---|
max_worker_processes |
max(100% CPU + 12, 20) | 核数 + 12,保底 20, |
max_parallel_workers |
max(ceil(80% CPU, 2)) | 4/5 CPU 上取整,最少两个 |
max_parallel_maintenance_workers |
max(ceil(33% CPU), 2) | 1/3 CPU 上取整,最少两个 |
max_parallel_workers_per_gather |
max(floor(50% CPU), 2) | 1/2 CPU 上取整,最少两个 |
| CRIT | 设置逻辑 | 范围限制 |
|---|---|---|
max_worker_processes |
max(100% CPU + 8, 16) | 核数 + 8,保底 16, |
max_parallel_workers |
max(ceil(50% CPU), 2) | 1/2 CPU 上取整,最少两个 |
max_parallel_maintenance_workers |
max(ceil(33% CPU), 2) | 1/3 CPU 上取整,最少两个 |
max_parallel_workers_per_gather |
0, 按需启用 |
| TINY | 设置逻辑 | 范围限制 |
|---|---|---|
max_worker_processes |
max(100% CPU + 4, 12) | 核数 + 4,保底 12, |
max_parallel_workers |
max(ceil(50% CPU) 1) | 50% CPU 下取整,最少1个 |
max_parallel_maintenance_workers |
max(ceil(33% CPU), 1) | 33% CPU 下取整,最少1个 |
max_parallel_workers_per_gather |
0, 按需启用 |
请注意,CRIT 和 TINY 模板直接通过设置 max_parallel_workers_per_gather = 0 关闭了并行查询。
用户可以按需在需要时设置此参数以启用并行查询。
OLTP 和 CRIT 模板都额外设置了以下参数,将并行查询的 Cost x 2,以降低使用并行查询的倾向。
请注意 max_worker_processes 参数的调整必须在重启后才能生效。此外,当从库的本参数配置值高于主库时,从库将无法启动。
此参数必须通过 patroni 配置管理进行调整,该参数由 Patroni 管理,用于确保主从配置一致,避免在故障切换时新从库无法启动。
存储空间参数
Pigsty 默认检测 /data/postgres 主数据目录所在磁盘的总空间,并以此作为依据指定下列参数:
temp_file_limit默认为磁盘空间的 5%,封顶不超过 200GB。min_wal_size默认为磁盘空间的 5%,封顶不超过 200GB。max_wal_size默认为磁盘空间的 20%,封顶不超过 2TB。max_slot_wal_keep_size默认为磁盘空间的 30%,封顶不超过 3TB。
作为特例, OLAP 模板允许 20% 的 temp_file_limit ,封顶不超过 2TB
11.4.2 - 维护保养
要确保 Pigsty 与 PostgreSQL 集群健康稳定运行,需要进行一些例行维护保养工作。
定期查阅监控
Pigsty 提供了开箱即用的监控平台,我们建议您每天浏览一次监控大盘,关注系统状态。 极端情况下,我们建议您每周至少查阅一次监控,关注出现的告警事件,这样可以提前规避绝大多数故障与问题。
这里列举了 Pigsty 中预先定义的 告警规则 列表。
故障切换善后
Pigsty 的高可用架构允许 PostgreSQL 集群自动进行主从切换,这意味着运维与 DBA 无需即时介入与响应。 然而用户仍然需要在合适的时机(例如第二天工作日)进行以下善后工作,包括:
- 调查并确认故障出现的原因,避免再次出现
- 视情况恢复集群原本的主从拓扑,或者修改配置清单以匹配新的主从状态。
- 通过
bin/pgsql-svc刷新负载均衡器配置,更新服务的路由状态 - 通过
bin/pgsql-hba刷新集群的 HBA 规则,避免主从特定的规则漂移 - 如果有必要,使用
bin/pgsql-rm移除故障服务器,并通过bin/pgsql-add扩容一台新从库
表膨胀治理
长时间运行的 PostgreSQL 会出现 “表膨胀” / “索引膨胀” 现象, 导致系统性能劣化。
定期使用 pg_repack 对表与索引进行在线重建,有助于维护 PostgreSQL 的良好性能表现。
Pigsty 已经默认在所有数据库中安装并启用了此扩展,因此您可以直接使用。
您可以通过 Pigsty 的 PGCAT Database - Table Bloat 面板,
确认数据库中的表膨胀情况与索引膨胀情况。并选择膨胀率较高(膨胀率高于 50% 的较大表)的表与索引,使用 pg_repack 进行在线重整:
重整期间不会影响正常读写,但重整完毕之后的 切换瞬间 需要获取表上的 AccessExclusive 锁阻塞一切访问。 因此对于高吞吐量业务,建议在业务低峰期或者维护窗口进行。更多细节,请参考:关系膨胀的治理
VACUUM FREEZE
冻结过期事务ID(VACUUM FREEZE)是PostgreSQL重要的维护任务,用于防止事务ID (XID) 用尽导致停机。 尽管 PostgreSQL 已经提供了自动垃圾回收(AutoVacuum)机制,然而对于高标准的生产环境, 我们依然建议结合自动和手动两种方式,定期执行全库级别的 VACUUM FREEZE ,以确保 XID 安全。
11.4.3 - 故障排查
本文档列举了 PostgreSQL 和 Pigsty 中可能出现的故障,以及定位,处理,分析问题的 SOP。
磁盘空间写满
磁盘空间写满是最常见的故障类型。
现象
当数据库所在磁盘空间耗尽时,PostgreSQL 将无法正常工作,可能出现以下现象:数据库日志反复报错“no space left on device”(磁盘空间不足), 新数据无法写入,甚至 PostgreSQL 可能触发 PANIC 强制关闭。
Pigsty 带有 NodeFsSpaceFull 告警规则,当文件系统可用空间不足 10% 时触发告警。 使用监控系统 NODE Instance 面板查阅 FS 指标面板定位问题。
诊断
您也可以登录数据库节点,使用 df -h 查看各挂载盘符使用率,确定哪个分区被写满。
对于数据库节点,重点检查以下目录及其大小,以判断是哪个类别的文件占满了空间:
- 数据目录(
/pg/data/base):存放表和索引的数据文件,大量写入与临时文件需要关注 - WAL目录(如
pg/data/pg_wal):存放 PG WAL,WAL 堆积/复制槽保留是常见的磁盘写满原因。 - 数据库日志目录(如
pg/log):如果 PG 日志未及时轮转写大量报错写入,也可能占用大量空间。 - 本地备份目录(如
data/backups):使用 pgBackRest 等在本机保存备份时,也有可能撑满磁盘。
如果问题出在 Pigsty 管理节点或监控节点,还需考虑:
- 监控数据:Prometheus 的时序指标和 Loki 日志存储都会占用磁盘,可检查保留策略。
- 对象存储数据:Pigsty 集成的 MinIO 对象存储可能会被用于 PG 备份保存。
明确占用空间最大的目录后,可进一步使用 du -sh <目录> 深入查找特定大型文件或子目录。
处理
磁盘写满属于紧急问题,需立即采取措施释放空间并保证数据库继续运行。
当数据盘并未与系统盘区分时,写满磁盘可能导致 Shell 命令无法执行。这种情况下,可以删除 /pg/dummy 占位文件,释放少量应急空间以便 shell 命令恢复正常。
如果数据库由于 pg_wal 写满已经宕机,清理空间后需要重启数据库服务并仔细检查数据完整性。
事务号回卷
PostgreSQL 循环使用 32 位事务ID (XID),耗尽时会出现“事务号回卷”故障(XID Wraparound)。
现象
第一阶段的典型征兆是 PGSQL Persist - Age Usage 面板年龄饱和度进入警告区域。
数据库日志开始出现:WARNING: database "postgres" must be vacuumed within xxxxxxxx transactions 字样的信息。
若问题持续恶化,PostgreSQL 会进入保护模式:当剩余事务ID不到约100万时数据库切换为只读模式;达到上限约21亿(2^31)时则拒绝任何新事务并迫使服务器停机以避免数据错误。
诊断
PostgreSQL 与 Pigsty 默认启用自动垃圾回收(AutoVacuum),因此此类故障出现通常有更深层次的根因。 常见的原因包括:超长事务(SAGE),Autovacuum 配置失当,复制槽阻塞,资源不足,存储引擎/扩展BUG,磁盘坏快。
首先定位年龄最大的数据库,然后可通过 Pigsty PGCAT Database - Tables 面板来确认表的年龄分布。 同时查阅数据库错误日志,通常可以找到定位根因的线索。
处理
- 立即冻结老事务:如果数据库尚未进入只读保护状态,立刻对受影响的库执行一次手动 VACUUM FREEZE。可以从老化最严重的表开始逐个冻结,而不是整库一起做,以加快效果。使用超级用户连接数据库,针对识别出的
relfrozenxid最大的表运行VACUUM FREEZE 表名;,优先冻结那些XID年龄最大的表元组。这样可以迅速回收大量事务ID空间。 - 单用户模式救援:如果数据库已经拒绝写入或宕机保护,此时需要启动数据库到单用户模式执行冻结操作。在单用户模式下运行
VACUUM FREEZE database_name;对整个数据库进行冻结清理。完成后再以多用户模式重启数据库。这样做可以解除回卷锁定,让数据库重新可写。需要注意在单用户模式下操作要非常谨慎,并确保有足够的事务ID余量完成冻结。 - 备用节点接管:在某些复杂场景(例如遭遇硬件问题导致 vacuum 无法完成),可考虑提升集群中的只读备节点为主,以获取一个相对干净的环境来处理冻结。例如主库因坏块导致无法 vacuum,此时可以手动Failover提升备库为新的主库,再对其进行紧急 vacuum freeze。确保新主库已冻结老事务后,再将负载切回来。
连接耗尽
PostgreSQL 有一个最大连接数配置 (max_connections),当客户端连接数超过此上限时,新的连接请求将被拒绝。典型现象是在应用端看到数据库无法连接,并报出类似
FATAL: remaining connection slots are reserved for non-replication superuser connections 或 too many clients already 的错误。
这表示普通连接数已用完,仅剩下保留给超管或复制的槽位
诊断
连接耗尽通常由客户端大量并发请求引起。您可以通过 PGCAT Instance / PGCAT Database / PGCAT Locks 直接查阅数据库当前的活跃会话。 并判断是什么样的查询填满了系统,并进行进一步的处理。特别需要关注是否存在大量 Idle in Transaction 状态的连接以及长时间运行的事务(以及慢查询)。
处理
杀查询:对于已经耗尽导致业务受阻的情况,通常立即使用 pg_terminate_backend(pid) 进行紧急降压。
对于使用连接池的情况,则可以调整连接池大小参数,并执行 reload 重载的方式减少数据库层面的连接数量。
您也可以修改 max_connections 参数为更大的值,但本参数需要重启数据库后才能生效。
etcd 配额写满
etcd 配额写满将导致 PG 高可用控制面失效,无法进行配置变更。
诊断
Pigsty 在实现高可用时使用 etcd 作为分布式配置存储(DCS),etcd 自身有一个存储配额(默认约为2GB)。 当 etcd 存储用量达到配额上限时,etcd 将拒绝写入操作,报错 “etcdserver: mvcc: database space exceeded”。在这种情况下,Patroni 无法向 etcd 写入心跳或更新配置,从而导致集群管理功能失效。
解决
在 Pigsty v2.0.0 - v2.5.1 之间的版本默认受此问题影响。Pigsty v2.6.0 为部署的 etcd 新增了自动压实的配置项,如果您仅将其用于 PG 高可用租约,则常规用例下不会再有此问题。
有缺陷的存储引擎
目前,TimescaleDB 的试验性存储引擎 Hypercore 被证实存在缺陷,已经出现 VACUUM 无法回收出现 XID 回卷故障的案例。 请使用该功能的用户及时迁移至 PostgreSQL 原生表或者 TimescaleDB 默认引擎
详细介绍:《PG新存储引擎故障案例》
11.4.4 - 误删处理
误删数据
如果是小批量 DELETE 误操作,可以考虑使用 pg_surgery 或者 pg_dirtyread 扩展进行原地手术恢复。
如果被删除的数据已经被 VACUUM 回收,那么使用通用的误删处理流程。
误删对象
当出现 DROP/DELETE 类误操作,通常按照以下流程决定恢复方案。
- 确认此数据是否可以通过业务系统或其他数据系统找回,如果可以,直接从业务侧修复。
- 确认是否有延迟从库,如果有,推进延迟从库至误删时间点,查询出来恢复。
- 如果数据已经确认删除,确认备份信息,恢复范围是否覆盖误删时间点,如果覆盖,开始 PITR
- 确认是整集群原地 PITR 回滚,还是新开服务器重放,还是用从库来重放,并执行恢复策略
误删集群
如果出现整个数据库集群通过 Pigsty 管理命令被误删的情况,例如错误的执行 pgsql-rm.yml 剧本或 bin/pgsql-rm 命令。
除非您指定了 pg_rm_backup 参数为 false,否则备份会与数据库集群一起被删除。
警告:在这种情况,您的数据将无法找回!请务必三思而后行!
建议:对于生产环境,您可以在配置清单中全局配置此参数为 false,在移除集群时保留备份。
11.5 - 剧本
如何使用 Ansible playbook 管理 PostgreSQL 集群
Pigsty 有一系列 PostgreSQL playbook:
pgsql.yml:初始化 HA PostgreSQL 集群或添加新副本。pgsql-rm.yml:删除 PostgreSQL 集群,或删除副本pgsql-db.yml:向现有 PostgreSQL 集群添加新业务数据库pgsql-user.yml:向现有 PostgreSQL 集群添加新业务用户pgsql-pitr.yml:将现有 PostgreSQL 集群回滚至特定时间点pgsql-monitor.yml:使用本地导出器监控远程 PostgreSQL 实例pgsql-migration.yml:为现有 PostgreSQL 生成迁移手册和脚本
安全防护
如果您担心意外删除 PostgreSQL 集群,可以启用安全防护功能。
将 pg_safeguard 参数设置为 true 将阻止 pgsql-rm.yml 运行。
Pigsty v3.5 从 pgsql.yml 中删除了 pg 清除逻辑,
所以现在删除 PostgreSQL 的唯一方法是运行 pgsql-rm.yml。
pgsql.yml
pgsql.yml 用于初始化 HA PostgreSQL 集群或添加新副本。
此 playbook 包含以下子任务:
使用此 playbook 的管理任务
- 副本初始化后,您可能需要运行
重新加载 HBA 规则和追加副本。 - 包装脚本
pgsql-add会执行此操作,详情请查看 SOP:添加实例。 - 如果您在整个集群上运行此操作,则无需担心此问题。
- 如果您正在初始化备用集群,您应该确保上游集群已经初始化。
pgsql-rm.yml
playbook pgsql-rm.yml 可以删除 PostgreSQL 集群,或从集群中删除特定副本。
此 playbook 包含以下子任务:
一些参数可以影响此 playbook 的行为:
使用此 playbook 的管理任务
关于此 playbook 的一些注意事项
- 否则,其余副本将触发自动故障转移。
- 如果您在删除主实例之前删除所有副本,就不会有问题。
- 如果您在整个集群上运行此操作,则无需担心此问题。
- 它是一个死服务器,所以不会影响集群服务。
- 但您应该及时重新加载服务以确保环境与配置清单之间的一致性。
- 删除副本时,它仍然在 haproxy 负载均衡器的配置文件中。
pgsql-db.yml
剧本 pgsql-db.yml 可以向现有 PostgreSQL 集群添加新业务数据库。
查看管理 SOP:创建数据库
pgsql-user.yml
剧本 pgsql-user.yml 可以向现有 PostgreSQL 集群添加新业务用户。
查看管理 SOP:创建用户
pgsql-pitr.yml
剧本 pgsql-pitr.yml 可以在现有 PostgreSQL 集群上执行 时间点恢复 (PITR)。
查看管理 SOP: 备份恢复
pgsql-pitr.yml
剧本 pgsql-pitr.yml 可以向现有 PostgreSQL 集群添加新业务用户。
查看管理 SOP:时间点恢复
pgsql-monitor.yml
剧本 pgsql-monitor.yml 可以将现有/远程 postgres / RDS 实例纳入监控。
查看管理 SOP:监控 Postgres
pgsql-migration.yml
剧本 pgsql-migration.yml 可以为现有 PostgreSQL 集群生成迁移手册和脚本。
查看管理 SOP:数据库迁移
11.6 - 监控
概述
Pigsty 使用现代可观测性栈进行 PostgreSQL 监控:
- Grafana 用于指标可视化和 PostgreSQL 数据源。
- Prometheus 用于 PostgreSQL / Pgbouncer / Patroni / HAProxy / Node 指标
- Loki 用于 PostgreSQL / Pgbouncer / Patroni / pgBackRest 日志
- 开箱即用的 PostgreSQL 和其他一切的仪表板
指标
PostgreSQL 的指标由收集器文件定义:pg_exporter.yml。Prometheus 记录规则和告警评估将进一步处理它:files/prometheus/rules/pgsql.yml
有三个身份标签:cls、ins、ip,它们将附加到所有指标和日志。节点和 haproxy 将尝试重用相同的身份以提供一致的指标和日志。
日志
PostgreSQL 相关日志默认由 promtail 收集并发送到基础设施节点上的 Loki。
pg_log_dir:postgres 日志目录,默认为/pg/log/postgrespgbouncer_log_dir:pgbouncer 日志目录,默认为/pg/log/pgbouncerpatroni_log_dir:patroni 日志目录,默认为/pg/log/patronipgbackrest_log_dir:pgbackrest 日志目录,默认为/pg/log/pgbackrest
目标
Prometheus 监控目标在 /etc/prometheus/targets/pgsql/ 下的静态文件中定义。每个实例都有一个对应的文件。以 pg-meta-1 为例:
当全局标志 patroni_ssl_enabled 设置时,patroni 目标将作为 /etc/prometheus/targets/patroni/<ins>.yml 管理,因为它需要不同的抓取端点(https)。
当集群被 bin/pgsql-rm 或 pgsql-rm.yml 删除时,Prometheus 监控目标将被删除。您可以使用 playbook 子任务,或手动删除它们:
远程 RDS 目标作为 /etc/prometheus/targets/pgrds/<cls>.yml 管理。它将由 pgsql-monitor.yml playbook 或 bin/pgmon-add 脚本创建。
监控模式
在 Pigsty 中有三种监控 PostgreSQL 实例的方式:
| 项目 \ 级别 | L1 | L2 | L3 |
|---|---|---|---|
| 名称 | 远程数据库服务 | 现有部署 | 完全托管部署 |
| 简称 | RDS | MANAGED | FULL |
| 场景 | 仅连接字符串 URL | 可 SSH sudo | 由 Pigsty 创建的实例 |
| PGCAT 功能 | ✅ 完全可用 | ✅ 完全可用 | ✅ 完全可用 |
| PGSQL 功能 | ✅ 仅 PG 指标 | ✅ PG 和节点指标 | ✅ 完全支持 |
| 连接池指标 | ❌ 不可用 | ⚠️ 可选 | ✅ 预配置 |
| 负载均衡器指标 | ❌ 不可用 | ⚠️ 可选 | ✅ 预配置 |
| PGLOG 功能 | ❌ 不可用 | ⚠️ 可选 | ⚠️ 可选 |
| PG Exporter | ⚠️ 在基础设施节点上 | ✅ 在数据库节点上 | ✅ 在数据库节点上 |
| Node Exporter | ❌ 未部署 | ✅ 在数据库节点上 | ✅ 在数据库节点上 |
| 对数据库节点的入侵 | ✅ 非入侵 | ⚠️ 安装导出器 | ⚠️ 完全由 Pigsty 管理 |
| 实例已存在 | ✅ 是 | ✅ 是 | ⚠️ 由 Pigsty 创建 |
| 监控用户和视图 | ⚠️ 手动设置 | ⚠️ 手动设置 | ✅ 自动配置 |
| 部署使用 Playbook | bin/pgmon-add <cls> |
pgsql.ym/node.yml 的子任务 |
pgsql.yml |
| 所需权限 | 来自基础设施节点的可连接 PGURL | 数据库节点 SSH 和 sudo 权限 | 数据库节点 SSH 和 sudo 权限 |
| 功能概述 | PGCAT + PGRDS | 大部分功能 | 完整功能 |
监控现有集群
假设目标数据库节点可以由 Pigsty 管理(可通过 SSH 访问且 sudo 可用)。在这种情况下,您可以使用 pgsql.yml playbook 中的 pg_exporter 任务,以与标准部署相同的方式在目标节点上部署监控组件 PG Exporter。
您还可以使用同一 playbook 的 pgbouncer 和 pgbouncer_exporter 任务在现有实例节点上部署连接池及其监控。此外,您可以使用 node.yml playbook 的 node_exporter、haproxy 和 promtail 任务部署主机监控、负载均衡和日志收集组件,实现与原生 Pigsty 集群相似的用户体验。
现有集群的定义方法与 Pigsty 管理的普通集群非常相似。有选择地运行 pgsql.yml playbook 中的某些任务,而不是运行整个 playbook。
由于目标数据库集群已经存在,您必须在目标数据库集群上手动设置监控用户、架构和扩展。
监控 RDS
如果您只能通过 PGURL(数据库连接字符串)访问目标数据库,您可以参考这里的说明进行配置。在此模式下,Pigsty 在基础设施节点上部署相应的 PG Exporter 以从远程数据库获取指标,如下所示:
监控系统将不再有主机/池化器/负载均衡器指标。但 PostgreSQL 指标和目录信息仍然可用。Pigsty 为此有两个专用仪表板:PGRDS 集群 和 PGRDS 实例。概览和数据库级别仪表板被重用。由于 Pigsty 无法管理您的 RDS,您必须提前在目标数据库上设置监控。
下面,我们使用沙箱环境作为示例:现在我们假设 pg-meta 集群是要监控的 RDS 实例 pg-foo-1,pg-test 集群是要监控的 RDS 集群 pg-bar:
-
在目标上创建监控架构、用户和权限。详情请参考监控设置。
-
在配置列表中声明集群。例如,假设我们想要监控"远程"
pg-meta和pg-test集群:
在 pg_databases 字段中列出的数据库将在 Grafana 中注册为 PostgreSQL 数据源,为 PGCAT 监控面板提供数据支持。如果您不想使用 PGCAT 并在 Grafana 中注册数据库,请将 pg_databases 设置为空数组或留空。

- 执行命令添加监控:
bin/pgmon-add <clsname>
- 要从监控中删除远程集群,使用
bin/pgmon-rm <clsname>
您可以使用更多参数来覆盖默认的 pg_exporter 选项。这里有一个使用 Pigsty 监控阿里云 RDS 和 PolarDB 的示例:
监控设置
当您想要监控现有实例时,无论是 RDS 还是自建的 PostgreSQL 实例,您都需要在目标数据库上进行一些配置,以便 Pigsty 可以访问它们。
要将外部现有的 PostgreSQL 实例纳入监控,您需要一个可以访问该实例/集群的连接字符串。任何可访问的连接字符串(业务用户、超级用户)都可以使用,但我们建议使用专用的监控用户以避免权限泄露。
- 监控用户:默认使用的用户名是
dbuser_monitor。此用户属于pg_monitor组,或确保它具有必要的视图权限。 - 监控 HBA:默认密码是
DBUser.Monitor。您需要确保 HBA 策略允许监控用户从基础设施节点访问数据库。 - 监控架构:可选但建议为监控视图和扩展创建专用架构
monitor。 - 监控扩展:强烈建议启用内置扩展
pg_stat_statements。 - 监控视图:监控视图是可选的,但可以提供额外的指标。推荐使用。
监控用户
在目标数据库集群上创建一个监控用户。例如,Pigsty 中默认使用 dbuser_monitor。
这里的监控用户应该与 Pigsty 配置清单中的 pg_monitor_username 和 pg_monitor_password 一致。
监控 HBA
您还需要配置 pg_hba.conf 以允许监控用户从基础设施/管理节点访问。
如果您的 RDS 不支持原始 HBA 格式,请将管理/基础设施节点 IP 添加到白名单。
监控架构
监控架构是可选的,但我们强烈推荐创建一个。
监控扩展
监控扩展是可选的,但我们强烈推荐启用 pg_stat_statements 扩展。
请注意,此扩展必须列在 shared_preload_libraries 中才能生效,更改此参数需要重启数据库。
您应该在管理数据库中创建此扩展:postgres。如果您的 RDS 不授予数据库 postgres 的 CREATE 权限,您可以在默认的 public 架构中创建该扩展:
只要您的监控用户可以在没有架构限定的情况下访问 pg_stat_statements 视图,就应该没问题。
监控视图
建议在所有需要监控的数据库中创建监控视图。
监控架构和视图定义
11.7 - 答疑
因 postgres 存在而中止
当您在运行 PostgreSQL 的节点上运行 pgsql.yml 时会发生这种情况。
如果有正在运行的 PostgreSQL 实例,您可以使用 pgsql-rm.yml 剧本显式移除它:
因启用 pg_safeguard 而中止
禁用
pg_safeguard以移除 PostgreSQL 实例。
如果启用了 pg_safeguard,您无法使用 bin/pgsql-rm 和 pgsql-rm.yml 剧本移除正在运行的 PostgreSQL 实例。
要禁用 pg_safeguard,您可以在配置清单中将 pg_safeguard 设置为 false,或将 -e pg_safeguard=false 作为命令行参数传递给剧本:
等待 postgres/patroni 主库失败
这个错误有几个可能的原因,您需要 检查 系统日志来确定实际原因。
这通常发生在集群配置错误,或者之前的主库被不当移除时(例如,DCS 中有相同集群名称的垃圾元数据)。
您必须检查 /pg/log/* 以找到原因。
要从 etcd 删除垃圾元数据,您可以使用 etcdctl del --prefix /pg/<cls>,操作时请谨慎!
- 1:配置错误。识别不正确的参数,修改它们并应用更改。
- 2:部署中已存在同名的另一个集群
- 3:节点上的之前集群,或同名的之前集群未正确移除。
- 要移除过时的集群元数据,您可以使用
etcdctl del --prefix /pg/<cls>手动删除残留数据。 - 4:与您的 PostgreSQL 或节点相关的 RPM 包未成功安装。
- 5:您的 Watchdog 内核模块未正确启用或加载,但是必需的。
- 6:指定的语言环境或字符类型
pg_lc_collate和pg_lc_ctype在操作系统中不存在
请随时提交问题或寻求社区帮助。
等待 postgres/patroni 从库失败
立即失败:通常,这是由于配置错误、网络问题、DCS 元数据损坏等导致的,您必须检查 /pg/log 以找出实际原因。
一段时间后失败:这可能是由于源实例数据损坏。查看 PGSQL 常见问题:数据损坏时如何创建从库?
超时:如果 wait for postgres replica 任务需要 30 分钟或更长时间并因超时而失败,这对于大型集群(例如 1TB+,可能需要数小时才能创建从库)是常见的。在这种情况下,底层创建从库过程仍在进行。您可以使用 pg list <cls> 检查集群状态,等待从库追上主库。然后继续以下任务:
安装 PostgreSQL 13 - 17
要安装 PostgreSQL 13 ~ 17,您必须在配置清单中将 pg_version 设置为 13、14、15、16 或 17。(通常在集群级别设置)
如何为 PostgreSQL 启用大页面?
使用
node_hugepage_count和node_hugepage_ratio或/pg/bin/pg-tune-hugepage
如果您计划启用大页面,请考虑使用 node_hugepage_count 和 node_hugepage_ratio 并使用 ./node.yml -t node_tune 应用。
在 PostgreSQL 启动之前分配足够的大页面是好的做法,然后使用 pg_tune_hugepage 稍后缩减它们。
如果您的 PostgreSQL 已经在运行,您可以使用 /pg/bin/pg-tune-hugepage 即时启用大页面。请注意,这仅适用于 PostgreSQL 15+
如何在故障转移期间保证零数据丢失?
使用
crit.yml模板,或设置pg_rpo为0,或使用同步模式 配置集群。
考虑使用 同步从库 和 法定人数提交 来保证故障转移期间 0 数据丢失。
如何从磁盘满的情况中恢复?
rm -rf /pg/dummy将释放一些紧急空间。
pg_dummy_filesize 默认设置为 64MB。考虑在生产环境中将其增加到 8GB 或更大。
它将被放置在与 PGSQL 主数据磁盘相同的磁盘上的 /pg/dummy 中。您可以删除该文件以释放一些紧急空间。至少您可以在该节点上运行一些 shell 脚本。
数据损坏时如何创建从库?
在坏实例上禁用
clonefrom并重新加载 patroni 配置。
Pigsty 在所有实例的 patroni 配置上设置 cloneform: true 标签,这标记实例可用于克隆从库。
如果此实例有损坏的数据文件,您可以设置 clonefrom: false 以避免从有问题的实例拉取数据。具体操作如下:
数据损坏时如何创建从库?
在坏实例上禁用
clonefrom并重新加载 patroni 配置。
Pigsty 在所有实例的 patroni 配置上设置 cloneform: true 标签,这标记实例可用于克隆从库。
如果此实例有损坏的数据文件,您可以设置 clonefrom: false 以避免从有问题的实例拉取数据。具体操作如下:
监控导出器的性能影响
影响不大,每 10 ~ 15 秒 200ms,不会影响数据库性能。
Pigsty 中 prometheus 的默认抓取间隔为 10 秒,确保导出器可以在该时间段内完成抓取。
如何监控现有的 PostgreSQL 实例?
详情请查看 PGSQL 监控。
如何从 prometheus 中移除监控目标?
或者
11.8 - 用户
您可以使用 Pigsty 以 IaC 方式管理 PostgreSQL 用户和角色。
定义用户
您可以使用以下参数定义角色/用户,它们都是由用户对象组成的数组:
pg_users:在集群级别定义业务用户和角色(集群定义)pg_default_roles:定义系统范围的角色和全局用户(全局默认值)
前者定义整个环境中共享的全局角色和用户,后者定义特定于单个集群的业务角色和用户。 以下是一些用户定义的示例:
用户属性
您可以使用更多属性自定义用户,完整示例如下:
- 唯一必需的字段是
name,它应该是 PostgreSQL 中有效且唯一的用户名。 - 角色不需要
password,但对于可登录用户可能是必需的。 password可以是明文或 scram-sha-256 / md5 哈希字符串。- 用户/角色定义顺序很重要,
pg_default_roles在前,pg_users在后,按顺序排列。 - 确保角色/组定义在其成员之前。
- 角色属性:
login、superuser、createdb、createrole、inherit、replication、bypassrls pgbouncer默认禁用。明确设置为true以在 pgbouncer 中启用它。
ACL 系统
Pigsty 具有电池包含的 ACL 系统,可以通过将角色分配给用户来轻松使用:
dbrole_readonly:全局只读访问角色dbrole_readwrite:全局读写访问角色dbrole_admin:对象创建角色dbrole_offline:受限只读访问角色(离线实例)
如果您希望重新设计您的 ACL 系统,请检查以下参数和 SQL 模板。
pg_default_roles:系统范围的角色和全局用户pg_default_privileges:新创建对象的默认权限roles/pgsql/templates/pg-init-roles.sql:角色创建 SQL 模板roles/pgsql/templates/pg-init-template.sql:权限 SQL 模板
创建用户
在 pg_default_roles 和 pg_users 中定义的用户和角色将在模块安装期间逐一自动创建。
它只在集群领导者,即主实例上运行。
要在现有集群上创建用户,
将新用户/角色定义添加到 all.children.<cls>.pg_users,并使用 bin/pgsql-user 工具或 pgsql-user.yml playbook 创建数据库:
创建用户是幂等操作,意味着可以多次安全运行。
Pigsty 将管理 pgbouncer 用户列表,因此请使用 Pigsty playbook/工具创建业务数据库。 查看创建用户 SOP 了解详细信息。 如果您不使用 pgbouncer 或能够自己维护它,您可以以任何您喜欢的方式创建用户。
在 PostgreSQL 中,用户属于数据库集群,而不是特定数据库。
如果您的用户是任何数据库的所有者,请确保在创建数据库之前创建用户。
修改用户
修改 PostgreSQL 用户属性与创建用户相同。
通过修改配置清单调整您的用户定义,然后重新运行创建用户。
有两个例外:name 和 roles,需要手动干预:
用户名用作用户的标识,因此如果您真的想这样做,请使用标准 SQL:
请注意,修改用户不会删除用户,而是使用 ALTER USER 命令修改用户属性。
它也不会撤销用户权限和组成员资格,并使用 GRANT 命令授予新角色。
查看 PostgreSQL 文档了解更多关于 ALTER USER 的详细信息。
删除用户
出于安全原因,Pigsty 不会自动删除用户,即使您从配置中删除用户定义,Pigsty 也不会删除现有用户。
您需要使用 SQL 命令 DROP USER 手动删除用户:
如果您要删除的角色是一个组(有其他用户属于它),您需要首先从组中删除其他用户,然后再删除组:
如果您要删除的用户拥有数据库对象,您需要首先将这些对象的所有权更改为另一个用户,然后再删除用户:
查看 PostgreSQL 文档了解更多关于 DROP USER、REASSIGN OWNED 和 REVOKE 的详细信息。
Pgbouncer 用户
Pigsty 帮助管理 pgbouncer 用户列表中的用户,并使其与 postgres 保持同步。
它需要在用户定义中明确设置 pgbouncer: true 标志以注册到 pgbouncer 用户列表中。
系统管理员用户(pg_admin_username)和监控用户(pg_monitor_username)
将始终添加到 pgbouncer 用户列表中用于管理和监控。
配置文件
Pgbouncer 连接池中的用户列在 /etc/pgbouncer/userlist.txt 中,示例:
用户级别参数在单独的文件中维护:/etc/pgbouncer/useropts.txt,示例:
当您创建用户时,userlist.txt 和 useropts.txt 将自动刷新
并通过 systemctl reload pgbouncer 生效,通常不会影响现有连接。
重新加载
要重新加载 pgbouncer 配置,您可以使用 ansible playbook 或 systemctl 命令
管理
Pgbouncer 与 PostgreSQL 使用相同的 dbsu 运行,默认为 postgres 操作系统用户。
您可以使用 pgb 别名通过 dbsu 访问 pgbouncer 管理功能。
删除 Pgbouncer 用户
如果所有数据库用户都由 Pigsty 管理,您可以重新生成 pgbouncer 用户列表(在配置清单的列表中不包含已删除的用户)并重新加载它:
要手动从 pgbouncer 池中删除用户,只需从 /etc/pgbouncer/userlist.txt 中删除相应的行并重新加载 pgbouncer:
动态用户认证
请注意,pgbouncer_auth_query 参数允许您使用动态查询完成连接池用户认证,这是当您不想在连接池中管理用户时的一种折衷方案。
11.9 - 数据库
CREATE DATABASE 创建的对象。一个 PostgreSQL 服务器可以同时服务多个数据库。您可以使用 Pigsty 来管理它们。
定义数据库
业务数据库由 pg_databases 定义,这是一个集群级参数。
例如,默认的 meta 数据库在 pg-meta 集群中定义:
每个数据库定义是一个包含以下字段的字典:
唯一必需的字段是 name,它应该是 PostgreSQL 中有效且唯一的数据库名称。
新创建的数据库默认从 template1 数据库分叉。该模板在集群引导期间由 PG_PROVISION 自定义。
有关数据库级权限的详细信息,请查看 ACL:数据库权限。
创建数据库
在 pg_databases 中 定义 的数据库将在模块安装期间自动创建。
如果您希望在现有集群上 创建数据库,可以使用 bin/pgsql-db 工具。
将新的数据库定义添加到 all.children.<cls>.pg_databases,然后使用以下命令创建该数据库:
此剧本通常是幂等的,可以重新运行以刷新数据库定义。
但如果您有复杂的 baseline 模式(如删除操作),则不应在现有数据库上重新运行此剧本。
Pigsty 将管理 pgbouncer 数据库列表,因此请使用 Pigsty 剧本/工具创建业务数据库。 详情请查看 创建数据库 标准操作程序。 如果您不使用 pgbouncer 或能够自己维护它,可以使用任何方式创建数据库。
Pgbouncer 数据库
Pgbouncer 默认启用并充当连接池中间件。
Pigsty 默认将 pg_databases 中的所有数据库添加到 pgbouncer 数据库列表。
您可以通过在数据库 定义 中设置 pgbouncer: false 来禁用特定数据库的 pgbouncer 代理。
使用 Pigsty 工具和剧本 创建数据库 时,Pgbouncer 数据库列表将被更新。
数据库在 /etc/pgbouncer/database.txt 中列出,带有额外的数据库级参数:
当您 创建数据库 时,Pgbouncer 数据库列表定义文件将被刷新并通过在线配置重载生效,不会影响现有连接。
要访问 pgbouncer 管理功能,您可以以数据库超级用户(postgres)身份使用 pgb 别名。
查看 pgbouncer 使用方法 了解可用命令:
在 /etc/profile.d/pg-alias.sh 中定义了一个工具函数,允许您快速将 pgbouncer 数据库流量重新路由到新主机,可用于零停机时间迁移。
11.10 - 服务
服务实现
在 Pigsty 中,服务通过节点上的 haproxy 实现,通过主机节点上的不同端口来区分。
每个节点都启用了 Haproxy 来暴露服务。从数据库角度来看,集群中的节点可能是主节点或副本节点,但从服务角度来看,所有节点都是相同的。这意味着即使您访问副本节点,只要使用正确的服务端口,您仍然可以使用主节点的读写服务。这种设计封装了复杂性:只要您能访问 PostgreSQL 集群上的任何实例,就可以完全访问所有服务。
这种设计类似于 Kubernetes 中的 NodePort 服务。同样,在 Pigsty 中,每个服务都包含这两个核心元素:
- 通过 NodePort 暴露的访问端点(端口号,从哪里访问?)
- 通过选择器选择的目标实例(实例列表,谁来处理?)
Pigsty 服务交付的边界止于集群的 HAProxy。用户可以通过各种方式访问这些负载均衡器。请参考访问服务。
所有服务都通过配置文件声明。例如,默认的 PostgreSQL 服务由 pg_default_services 参数定义:
您也可以在 pg_services 中定义新服务。pg_default_services 和 pg_services 都是服务定义的数组。
定义服务
默认服务在 pg_default_services 中定义。
您可以在全局或集群级别使用 pg_services 定义额外的 PostgreSQL 服务。
这两个参数都是服务对象的数组。每个服务定义将被渲染为 /etc/haproxy/<svcname>.cfg 中的 haproxy 配置,查看 service.cfg 了解详细信息。
这里是一个额外服务定义的示例:standby
它将被转换为 haproxy 配置文件 /etc/haproxy/pg-test-standby.conf:
重新加载服务
当集群成员发生变化时,如添加/移除副本、切换/故障转移或调整相对权重,您必须重新加载服务以使更改生效。
覆盖服务
您可以通过几种方式覆盖默认服务配置:
绕过 Pgbouncer
在定义服务时,如果 svc.dest='default',将使用参数 pg_default_service_dest 作为默认值。默认使用 pgbouncer,您可以改用 postgres,这样默认的主节点和副本服务将绕过 pgbouncer 并直接将流量路由到 postgres
如果您完全不需要连接池,可以将 pg_default_service_dest 更改为 postgres,并移除 default 和 offline 服务。
如果您不需要用于在线流量的只读副本,也可以从 pg_default_services 中移除 replica。
委托服务
Pigsty 在节点上使用 haproxy 暴露 PostgreSQL 服务。集群中的所有 haproxy 实例都配置了相同的服务定义。
然而,您可以将 pg 服务委托给特定的节点组(例如,专用的 haproxy 负载均衡集群)而不是集群成员。
要做到这一点,您需要使用 pg_default_services 覆盖默认服务定义,并将 pg_service_provider 设置为代理组名称。
例如,这个配置将在 haproxy 节点组 proxy 上使用端口 10013 暴露 pg 集群主服务。
用户有责任确保每个委托服务端口在代理集群中是唯一的。
分离读写,将流量路由到正确的位置,并实现对 PostgreSQL 集群的稳定可靠访问。
服务是一个抽象,用于封装底层集群的细节,特别是在集群故障转移/切换期间。
个人用户
对于个人用户,服务是没有意义的。您可以使用原始 IP 地址或任何您喜欢的方法访问数据库。
服务概述
在现实世界的生产环境中,我们利用基于复制的 PostgreSQL 数据库集群。在集群内,只有一个实例是可以接受写入的领导者(主节点)。其他实例(副本)持续从领导者获取 WAL 以保持同步。此外,副本可以处理只读查询,并在读取密集、写入较少的场景中为主节点分担负载。因此,区分写入和只读请求是一种常见做法。
此外,我们通过连接池中间件(Pgbouncer)为高频、短期连接池化请求,以减少连接和后端进程创建的开销。而且,对于 ETL 和变更执行等场景,我们需要绕过连接池并直接访问数据库服务器。此外,高可用性集群可能在故障期间发生故障转移,导致集群领导权发生变化。因此,读写请求应该自动重新路由到新的领导者。
这些不同的需求(读写分离、池化与直接连接以及客户端请求故障转移)导致了服务概念的抽象。
通常,数据库集群必须提供这个基本服务:
- 读写服务(主节点):可以读取和写入数据库。
对于生产数据库集群,至少应该提供这两个服务:
- 读写服务(主节点):写入数据:只由主节点承载。
- 只读服务(副本):读取数据:可以由副本承载,但如果没有可用的副本,则回退到主节点。
此外,可能还有其他服务,例如:
- 直接访问服务(默认):允许(管理员)用户绕过连接池并直接访问数据库。
- 离线副本服务(离线):专用副本,不处理在线读取流量,用于 ETL 和分析查询。
- 同步副本服务(备用):无复制延迟的只读服务,由同步备用/主节点处理读取查询。
- 延迟副本服务(延迟):从一定时间前的同一集群访问较旧的数据,由延迟副本处理。
默认服务
Pigsty 将为每个 PostgreSQL 集群启用四个默认服务:
| 服务 | 端口 | 描述 |
|---|---|---|
| primary | 5433 | pgbouncer 读写,连接到主节点 5432 或 6432 |
| replica | 5434 | pgbouncer 只读,连接到副本 5432/6432 |
| default | 5436 | 管理员或直接访问主节点 |
| offline | 5438 | OLAP、ETL、个人用户、交互式查询 |
以默认的 pg-meta 集群为例,您可以通过以下方式访问这些服务:
这里 pg-meta 域名指向集群的 L2 VIP,进而指向主实例上的 haproxy 负载均衡器。
它负责将流量路由到不同的实例,查看访问服务了解详细信息。
主服务
主服务可能是生产使用中最关键的服务。
它将根据 pg_default_service_dest 将流量路由到主实例:
pgbouncer:将流量路由到主节点 pgbouncer 端口(6432),这是默认行为postgres:如果您不想使用 pgbouncer,直接将流量路由到主节点 postgres 端口(5432)
这意味着所有集群成员都将包含在主服务中(selector: "[]"),但通过健康检查(check: /primary)的唯一实例将被用作主实例。Patroni 将保证任何时候只有一个实例是主节点,因此主服务将始终将流量路由到主实例。
副本服务
副本服务用于生产只读流量。
在现实场景中,只读查询可能比读写查询多得多。您可能有许多副本。
副本服务将根据 pg_default_service_dest 将流量路由到 Pgbouncer 或 postgres,就像主服务一样。
replica 服务流量将尽量使用 pg_role = replica 的普通 pg 实例,以尽可能减轻 primary 实例的负载。它将尽量不使用 pg_role = offline 的实例,以尽可能避免混合 OLAP 和 OLTP 查询。
所有集群成员将包含在副本服务中(selector: "[]"),当它通过只读健康检查(check: /read-only)时。primary 和 offline 实例用作备份服务器,在所有 replica 实例都宕机的情况下接管。
默认服务
默认服务将默认路由到主节点 postgres(5432)。
它非常类似于主服务,除了它将始终绕过 pgbouncer,无论 pg_default_service_dest 如何。这对于管理连接、ETL 写入、CDC 变更数据捕获等非常有用…
离线服务
离线服务将直接将流量路由到专用的 postgres 实例。
这可能是 pg_role = offline 实例,或者是标记了 pg_offline_query 的实例。
如果找不到这样的实例,它将回退到任何副本实例。底线是:它永远不会将流量路由到主实例。
访问服务
Pigsty 使用 haproxy 暴露服务。默认情况下,所有节点都启用了 haproxy。
默认情况下,haproxy 负载均衡器在同一个 pg 集群中是幂等的,您可以通过任何/所有方式使用它们。
典型的方法是通过集群域名访问,它解析为集群 L2 VIP,或以轮询方式解析为所有实例 IP 地址。
服务可以通过不同的方式实现。您甚至可以实现自己的访问方法,如 L4 LVS、F5 等,而不是 haproxy。

您可以使用主机和端口的不同组合,它们以不同的方式提供 PostgreSQL 服务。
主机
| 类型 | 示例 | 描述 |
|---|---|---|
| 集群域名 | pg-test |
通过集群域名(由基础设施节点上的 dnsmasq 解析) |
| 集群 VIP 地址 | 10.10.10.3 |
通过由 vip-manager 管理的 L2 VIP 地址,绑定到主节点 |
| 实例主机名 | pg-test-1 |
通过任何实例主机名访问(由基础设施节点上的 dnsmasq 解析) |
| 实例 IP 地址 | 10.10.10.11 |
访问任何实例 IP 地址 |
端口
Pigsty 使用不同的端口来区分 pg 服务:
| 端口 | 服务 | 类型 | 描述 |
|---|---|---|---|
| 5432 | postgres | 数据库 | 直接访问 postgres 服务器 |
| 6432 | pgbouncer | 中间件 | 在访问 postgres 之前通过连接池中间件 |
| 5433 | primary | 服务 | 访问主节点 pgbouncer(或 postgres) |
| 5434 | replica | 服务 | 访问副本 pgbouncer(或 postgres) |
| 5436 | default | 服务 | 访问主节点 postgres |
| 5438 | offline | 服务 | 访问离线 postgres |
组合
11.11 - 认证
PostgreSQL 有各种 身份验证 方法。您可以使用所有这些方法,而 Pigsty 的开箱即用 ACL 系统专注于 HBA、密码和 SSL 身份验证。
客户端身份验证
要连接到 PostgreSQL 数据库,用户必须经过身份验证(默认使用密码)。
您可以在连接字符串中提供密码(不安全)或使用 PGPASSWORD 环境变量或 .pgpass 文件。查看 psql 文档和 PostgreSQL 连接字符串 获取更多详细信息。
meta 数据库的默认连接字符串:
要使用 SSL 证书连接,您可以使用 PGSSLCERT 和 PGSSLKEY 环境变量或 sslkey 和 sslcert 参数。
客户端证书(CN = 用户名)可以使用本地 CA 和 cert.yml 颁发。
定义 HBA
Pigsty 中有四个 HBA 规则参数:
pg_hba_rules:PostgreSQL 临时 HBA 规则pg_default_hba_rules:PostgreSQL 默认 HBA 规则pgb_hba_rules:pgbouncer 临时 HBA 规则pgb_default_hba_rules:pgbouncer 默认 HBA 规则
它们是 HBA 规则对象的数组,每个 HBA 规则是以下形式之一:
1. 原始形式
在这种形式中,title 将被渲染为注释行,然后是 rules 作为 HBA 字符串逐一显示。
当实例的 pg_role 与 role 相同时,HBA 规则被安装。
带有 role: common 的 HBA 规则将在所有实例上安装。
带有 role: offline 的 HBA 规则将在 pg_role = offline 或 pg_offline_query = true 的实例上安装。
2. 别名形式
别名形式,用 addr、auth、user 和 db 字段替换 rules。
-
addr:哪里world:所有 IP 地址intra:所有内网 CIDR:'10.0.0.0/8'、'172.16.0.0/12'、'192.168.0.0/16'infra:基础设施节点的 IP 地址admin:admin_ip地址local:本地 unix 套接字localhost:本地 unix 套接字 + tcp 127.0.0.1/32cluster:PostgreSQL 集群成员的所有 IP 地址<cidr>:任何标准 CIDR 块或 IP 地址
-
auth:如何deny:拒绝访问trust:信任身份验证pwd:根据pg_pwd_enc使用md5或scram-sha-256密码认证sha/scram-sha-256:强制scram-sha-256密码身份验证md5:md5密码身份验证ssl:在pwd认证基础上强制主机 SSLssl-md5:在md5密码认证基础上强制主机 SSLssl-sha:在scram-sha-256密码认证基础上强制主机 SSLos/ident:使用ident操作系统用户身份验证peer:使用peer身份验证cert:使用基于证书的客户端身份验证
-
user:谁all:所有用户${dbsu}:由pg_dbsu指定的数据库超级用户${repl}:由pg_replication_username指定的复制用户${admin}:由pg_admin_username指定的管理员用户${monitor}:由pg_monitor_username指定的监控用户- 临时用户和角色
-
db:哪个all:所有数据库replication:复制数据库- 临时数据库名称
3. 在哪里定义
通常,全局 HBA 在 all.vars 中定义。如果您想修改全局默认 HBA 规则,可以从 full.yml 模板复制到 all.vars 进行修改。
pg_default_hba_rules:PostgreSQL 全局默认 HBA 规则pgb_default_hba_rules:pgbouncer 全局默认 HBA 规则
集群特定的 HBA 规则在数据库的集群级配置中定义:
pg_hba_rules:集群的 PostgreSQL HBA 规则pgb_hba_rules:集群的 pgbouncer HBA 规则
以下是集群 HBA 规则定义的一些示例。
重载 HBA
要重载 postgres/pgbouncer HBA 规则:
底层命令是:
默认 HBA
Pigsty 有一套默认的 HBA 规则,对大多数情况来说都相当安全。
这些规则以别名形式自解释。
安全增强
对于那些关键情况,我们有一个 safe.yml 模板,以下 HBA 规则集作为参考:
11.12 - 权限
Pigsty 具有一套默认的角色系统,包含四个 默认角色 和四个 默认用户:
| 默认用户 | 用户描述 | 默认角色 | 角色描述 |
|---|---|---|---|
postgres |
系统超级用户 | dbrole_readonly |
全局只读权限角色 |
replicator |
系统复制用户 | dbrole_readwrite |
全局读写权限角色 |
dbuser_dba |
PostgreSQL 管理员用户 | dbrole_admin |
对象创建权限角色 |
dbuser_monitor |
PostgreSQL 监控用户 | dbrole_offline |
受限只读权限角色 |
概览
| 角色名称 | 属性 | 所属角色 | 描述 |
|---|---|---|---|
dbrole_readonly |
NOLOGIN |
全局只读权限角色 | |
dbrole_readwrite |
NOLOGIN |
dbrole_readonly | 全局读写权限角色 |
dbrole_admin |
NOLOGIN |
pg_monitor,dbrole_readwrite | 对象创建权限角色 |
dbrole_offline |
NOLOGIN |
受限只读权限角色 | |
postgres |
SUPERUSER |
系统超级用户 | |
replicator |
REPLICATION |
pg_monitor,dbrole_readonly | 系统复制用户 |
dbuser_dba |
SUPERUSER |
dbrole_admin | PostgreSQL 管理员用户 |
dbuser_monitor |
pg_monitor | PostgreSQL 监控用户 |
默认角色
Pigsty 中有四个默认角色:
- 只读角色(
dbrole_readonly):全局只读权限访问角色 - 读写角色(
dbrole_readwrite):全局读写权限访问角色,继承dbrole_readonly - 管理员角色(
dbrole_admin):DDL 命令权限角色,继承dbrole_readwrite - 离线角色(
dbrole_offline):受限只读权限访问角色(离线 实例)
默认角色在 pg_default_roles 中定义,不建议修改默认角色。
默认用户
Pigsty 中也有四个默认用户。
- 超级用户(
postgres),集群的拥有者和创建者,与操作系统数据库超级用户相同 - 复制用户(
replicator),用于主从复制的系统用户 - 监控用户(
dbuser_monitor),用于监控数据库和连接池指标的用户 - 管理员用户(
dbuser_dba),执行日常操作和数据库变更的管理员用户
默认用户的用户名/密码由专用参数定义(除了数据库超级用户密码):
pg_dbsu:操作系统数据库超级用户名称,默认为 postgres,最好不要更改pg_replication_username:PostgreSQL 复制用户名,默认为replicatorpg_replication_password:PostgreSQL 复制用户密码,默认为DBUser.Replicatorpg_admin_username:PostgreSQL 管理员用户名,默认为dbuser_dbapg_admin_password:PostgreSQL 管理员用户明文密码,默认为DBUser.DBApg_monitor_username:PostgreSQL 监控用户名,默认为dbuser_monitorpg_monitor_password:PostgreSQL 监控用户密码,默认为DBUser.Monitor
!> 请记住在生产部署中更改这些密码!
要定义额外选项,请在 pg_default_roles 中指定:
权限管理
Pigsty 具有一套开箱即用的权限模型,与 默认角色 配合使用。
- 所有用户都可以访问所有 Schema
- 只读用户可以从所有表读取数据(SELECT、EXECUTE)
- 读写用户可以向所有表写入数据并运行 DML(INSERT、UPDATE、DELETE)
- 管理员用户可以创建对象并运行 DDL(CREATE、USAGE、TRUNCATE、REFERENCES、TRIGGER)
- 离线用户是在离线实例上具有受限访问权限的只读用户(
pg_role = 'offline'或pg_offline_query = true) - 由管理员用户创建的对象将具有正确的权限
- 默认权限安装在所有数据库上,包括模板数据库
- 数据库连接权限由数据库 定义 覆盖
- 默认情况下,数据库和 public schema 的
CREATE权限从PUBLIC撤销
对象权限
默认对象权限在 pg_default_privileges 中定义。
当新创建的对象由管理员用户创建时,它们将具有相应的权限。
\ddp+ 命令的输出可能如下所示:
| 类型 | 访问权限 |
|---|---|
| function | =X |
| dbrole_readonly=X | |
| dbrole_offline=X | |
| dbrole_admin=X | |
| schema | dbrole_readonly=U |
| dbrole_offline=U | |
| dbrole_admin=UC | |
| sequence | dbrole_readonly=r |
| dbrole_offline=r | |
| dbrole_readwrite=wU | |
| dbrole_admin=rwU | |
| table | dbrole_readonly=r |
| dbrole_offline=r | |
| dbrole_readwrite=awd | |
| dbrole_admin=arwdDxt |
默认权限
ALTER DEFAULT PRIVILEGES 允许您设置将应用于未来创建的对象的权限。它不会影响分配给已存在对象的权限,也不会影响由非管理员用户创建的对象。
Pigsty 将使用以下默认权限:
这些权限将在 pg-init-template.sql 中与管理员用户的 ALTER DEFAULT PRIVILEGES 语句一起渲染。
这些 SQL 命令将在集群引导期间在 postgres 和 template1 上执行,新创建的数据库将默认从 template1 继承它们。
也就是说,要维护正确的对象权限,您必须使用管理员用户运行 DDL,这些用户可以是:
{{ pg_dbsu }},默认为postgres{{ pg_admin_username }},默认为dbuser_dba- 被授予
dbrole_admin权限的业务管理员用户
明智的做法是使用 postgres 作为全局对象拥有者来执行 DDL 变更。
如果您希望使用业务管理员用户创建对象,您必须在运行该 DDL 之前使用 SET ROLE dbrole_admin 来维护正确的权限。
您也可以使用 ALTER DEFAULT PRIVILEGE FOR ROLE <some_biz_admin> XXX 来为业务管理员用户授予默认权限。
数据库权限
数据库权限由 数据库定义 覆盖。
有 3 个数据库级别的权限:CONNECT、CREATE、TEMP,以及一个特殊的"权限":OWNERSHIP。
- 如果
owner存在,它将用作数据库拥有者,而不是默认的{{ pg_dbsu }} - 如果
revokeconn为false,所有用户都具有数据库的CONNECT权限,这是默认行为 - 如果
revokeconn明确设置为true: - 数据库的
CONNECT权限将从PUBLIC撤销 CONNECT权限将授予{{ pg_replication_username }}、{{ pg_monitor_username }}和{{ pg_admin_username }}CONNECT权限将授予数据库拥有者并带有GRANT OPTION
revokeconn 标志可用于数据库访问隔离,您可以为每个数据库创建不同的业务用户作为拥有者,并为所有数据库设置 revokeconn 选项。
创建权限
出于安全考虑,Pigsty 默认从 PUBLIC 撤销数据库上的 CREATE 权限。这也是 PostgreSQL 15 以来的默认行为。
数据库拥有者具有根据需要调整这些权限的完全能力。
11.13 - 面板
共有 26 个关于 PostgreSQL 的默认 Grafana 监控面板,分为 4 个层级,并按数据源分为 PGSQL、PGCAT 和 PGLOG。
概览
- pgsql-overview:PGSQL 模块的主要监控面板
- pgsql-alert:全局 PGSQL 关键指标和告警事件
- pgsql-shard:水平分片 PGSQL 集群概览,例如 citus / gpsql 集群
集群
- pgsql-cluster:PGSQL 集群的主要监控面板
- pgrds-cluster:RDS 的 PGSQL 集群监控面板,仅关注所有 postgres 指标
- pgsql-activity:关注 PGSQL 集群的会话/负载/QPS/TPS/锁
- pgsql-replication:关注 PGSQL 集群复制、槽位和发布/订阅
- pgsql-service:关注 PGSQL 集群服务、代理、路由和负载均衡器
- pgsql-databases:关注数据库 CRUD、慢查询和跨所有实例的表统计
- pgsql-patroni:关注集群高可用代理 patroni 状态
- pgsql-pitr:关注 PITR 过程中集群状态的上下文
实例
- pgsql-instance:单个 PGSQL 实例的主要监控面板
- pgrds-instance:RDS 的 PGSQL 实例监控面板,仅关注所有 postgres 指标
- pgcat-instance:直接从数据库目录获取的实例信息
- pgsql-persist:关于持久化的指标:WAL、XID、检查点、归档、IO
- pgsql-proxy:关于服务提供商 haproxy 的指标
- pgsql-queries:单个实例中所有查询的概览
- pgsql-session:单个实例中关于会话和活动/空闲时间的指标
- pgsql-xacts:关于事务、锁、查询等的指标
- pgsql-exporter:Postgres 和 Pgbouncer 导出器自监控指标
数据库
- pgsql-database:单个 PGSQL 数据库的主要监控面板
- pgcat-database:直接从数据库目录获取的数据库信息
- pgsql-tables:单个数据库内的表/索引访问指标
- pgsql-table:单个表的详细信息(QPS/RT/索引/顺序扫描…)
- pgcat-table:直接从数据库目录获取的单个表的详细信息(统计/膨胀/…)
- pgsql-query:单个查询的详细信息(QPS/RT)
- pgcat-query:直接从数据库目录获取的单个查询的详细信息(SQL/统计)
概览
PGSQL 概览:PGSQL 模块的主要监控面板
PGSQL 告警:全局 PGSQL 关键指标和告警事件
PGSQL 分片:水平分片 PGSQL 集群概览,例如 CITUS / GPSQL 集群
集群
PGSQL 集群:PGSQL 集群的主要监控面板
PGRDS 集群:RDS 的 PGSQL 集群监控面板,仅关注所有 postgres 指标
PGSQL 服务:关注 PGSQL 集群服务、代理、路由和负载均衡器
PGSQL 活动:关注 PGSQL 集群的会话/负载/QPS/TPS/锁
PGSQL 复制:关注 PGSQL 集群复制、槽位和发布/订阅
PGSQL 数据库集:关注数据库 CRUD、慢查询和跨所有实例的表统计
PGSQL Patroni:关注集群高可用代理 patroni 状态
PGSQL PITR:关注 PITR 过程中集群状态的上下文
实例
PGSQL 实例:单个 PGSQL 实例的主要监控面板
PGRDS 实例:RDS 的 PGSQL 实例监控面板,仅关注所有 postgres 指标
PGSQL 代理:关于服务提供商 haproxy 的指标
PGSQL Pgbouncer:关于单个 pgbouncer 连接池实例的指标
PGSQL 持久化:关于持久化的指标:WAL、XID、检查点、归档、IO
PGSQL 事务:关于事务、锁、查询等的指标
PGSQL 会话:单个实例中关于会话和活动/空闲时间的指标
PGSQL 导出器:Postgres 和 Pgbouncer 导出器自监控指标
数据库
PGSQL 数据库:单个 PGSQL 数据库的主要监控面板
PGSQL 表:单个数据库内的表/索引访问指标
PGSQL 表详情:单个表的详细信息(QPS/RT/索引/顺序扫描…)
PGSQL 查询:单个查询的详细信息(QPS/RT)
PGCAT
PGCAT 实例:直接从数据库目录获取的实例信息
PGCAT 数据库:直接从数据库目录获取的数据库信息
PGCAT 模式:直接从数据库目录获取的单个模式的详细信息
PGCAT 表详情:直接从数据库目录获取的单个表的详细信息
PGCAT 查询:直接从数据库目录获取的单类查询的详细信息
PGCAT 锁:直接从数据库目录获取的活动锁和活动的详细信息
PGLOG
PGLOG 概览:Pigsty 元数据库中 CSV 日志样本的概览
PGLOG 详情:Pigsty 元数据库中 CSV 日志样本的单个会话详情
11.14 - 迁移
Pigsty 有一个内置的 playbook pgsql-migration.yml 来执行基于逻辑复制的在线数据库迁移。
通过适当的自动化,宕机时间可以最小化到几秒钟。但请注意,逻辑复制需要 PostgreSQL 10+ 才能工作。 您仍然可以使用这里的工具,并使用 pg_dump | psql 代替逻辑复制。
定义迁移任务
您必须创建一个迁移任务定义文件来使用此 playbook。
查看 files/migration/pg-meta.yml 作为示例。
它将尝试将 pg-meta.meta 迁移到 pg-test.test。
您必须告诉 Pigsty 源集群和目标集群在哪里。要迁移的数据库以及主 IP 地址。
您应该在两端都有超级用户权限才能继续
您可以使用 src_pg 覆盖到源集群的超级用户连接,使用 sub_conn 覆盖逻辑复制连接字符串,否则将使用 Pigsty 默认的管理员和复制器凭据。
生成计划
该 playbook 不会将源迁移到目标,但它会生成您需要执行此操作的所有内容。
执行后,您将在默认的 ~/migration/pg-meta.meta 下找到迁移上下文目录
按照 README.md 并逐一执行这些脚本,您就能完成此操作!
注意事项
您可以使用 ./copy-seq 1000 在同步序列后将所有序列提前一个数字(例如 1000)。这可能会防止新集群中潜在的串行主键冲突。
您必须实现自己的 ./re-routing 脚本来将应用程序流量从源路由到目标。因为我们不知道您的流量是如何路由的(例如 dns、VIP、haproxy 或 pgbouncer)。当然,您总是可以手动完成…
您必须实现自己的 ./disable-src 脚本来限制源集群。您可以通过更改 HBA 规则并重新加载(推荐)来做到这一点,或者只是关闭 postgres、pgbouncer 或 haproxy…
11.15 - 备份
Pigsty 使用 pgBackRest 管理 PostgreSQL 备份,它可能是生态系统中最强大的开源备份工具。 具有增量/并行备份和恢复、加密、MinIO / S3 支持以及许多其他功能。 Pigsty 默认为每个 PGSQL 集群预配置了它。
备份脚本、调度、pgbackrest、仓库和管理
备份策略、磁盘规划、恢复窗口权衡
使用 playbook 恢复到特定时间点
沙箱示例:手动执行恢复
Pigsty 尽力提供可靠的 PITR 解决方案,但我们不对 PITR 操作导致的数据丢失承担任何责任,请自行承担风险使用。 如需专业支持,请考虑我们的 专业服务。
快速开始
步骤 1
[备份策略](/zh/docs/pgsql/backup/mechanism):使用 Crontab 调度基础备份
步骤 2
[WAL 归档](/zh/docs/pgsql/backup/policy):持续记录写入活动
步骤 3
[恢复和还原](/zh/docs/pgsql/backup/restore):从备份和 WAL 归档中恢复
11.15.1 - 备份机制
备份可以通过内置 脚本 调用,使用节点 crontab 调度, 由 pgbackrest 管理,并存储在备份仓库中, 仓库可以是本地磁盘文件系统或 MinIO / S3,具有不同的 保留 策略。
备份脚本
您可以使用 pg_dbsu 用户(默认为 postgres)通过 pgbackrest 命令创建备份:
这里的 stanza 是数据库集群名称:pg_cluster,对于默认设置是 pg-meta。
Pigsty 有一个别名 pb 和包装脚本 pg-backup,它们将当前集群名称填充为 stanza:
定时调度
Pigsty 利用 Linux 的 crontab 来调度备份。您可以使用它定义您的备份策略。
例如,大多数单节点配置模板将为备份设置以下 node_crontab。
您可以使用 crontab 和 pg-backup 脚本设计更复杂的备份策略,例如:
要应用 crontab 更改,使用 node.yml 在所有节点上更新 crontab。
pgbackrest
以下是 Pigsty 对 pgbackrest 的设置详情:
- pgbackrest 备份工具默认启用和配置(
pgbackrest_enabled) - 在
pgsql.yml剧本的pg_install任务中安装,定义在pg_packages中 - 在
pgsql.yml剧本的pg_backup任务中配置,参数:PG_BACKUP - 在
pgbackrest_init任务中初始化备份仓库,如果仓库存在则失败!(错误可以忽略) - 在
pgbackrest_backup任务中创建初始备份,由pgbackrest_init_backup控制
文件系统层次结构
- 二进制文件:
/usr/bin/pgbackrest,来自 PGDG 的pgbackrest包,在组别名pgsql-common中。 - 配置:
/etc/pgbackrest,主配置是/etc/pgbackrest/pgbackrest.conf。 - 日志:
/pg/log/pgbackrest/*,由pgbackrest_log_dir控制 - 临时文件:
/pg/spool用作 pgbackrest 的临时缓冲目录 - 数据:如果选择默认的
local文件系统备份仓库,则使用/pg/backup。
此外,在 PITR 恢复 过程中,
Pigsty 将创建一个临时的 /pg/conf/pitr.conf pgbackrest 配置文件。
并将 PostgreSQL 恢复日志写入 /pg/tmp/recovery.log 文件。
监控
有一个 pgbackrest_exporter 服务运行在(pgbackrest_exporter_port:9854)上以导出 pgbackrest 指标。
您可以通过 pgbackrest_exporter_options 自定义它,并通过将 pgbackrest_exporter_enabled 设置为 false 来禁用它。
初始备份
当创建 PostgreSQL 集群时,Pigsty 会自动创建初始备份。
这是一个小备份,因为新集群几乎是空的。
它会留下一个标记文件 /etc/pgbackrest/initial.done 以避免再次创建初始备份。
如果您不想要它,请将 pgbackrest_init_backup 设置为 false。
管理
启用备份
如果您的数据库集群是在 pgbackrest_enable 设置为 true 的情况下创建的,备份将自动启用。
如果是在 false 值下创建的,您可以使用以下命令启用 pgbackrest 组件:
移除备份
Pigsty 在移除主实例(pg_role = primary)时会移除 pgbackrest 备份 stanza。
使用 pg_backup 子任务仅移除备份,并使用 pg_rm_backup 参数保留备份。
如果您的备份仓库被锁定(例如,S3 / MinIO 有锁定选项),此操作将失败。
移除备份可能导致永久数据丢失,这是一个危险操作,请极其谨慎地执行。
列出备份
此命令将列出 pgbackrest 仓库中的所有备份(由所有集群共享)
手动备份
Pigsty 有一个内置脚本 /pg/bin/pg-backup,它封装了 pgbackrest 备份命令。
基础备份
Pigsty 有一个替代备份脚本 /pg/bin/pg-basebackup,它不依赖 pgbackrest,并为您提供数据库集群的物理副本。
默认备份目录是 /pg/backup。
备份使用 lz4 压缩,您可以使用以下命令解压缩和提取 tarball:
逻辑备份
您也可以使用 pg_dump 命令执行逻辑备份。
逻辑备份不能用于 PITR(时间点恢复), 但它们对于在不同主版本之间迁移数据或实现灵活的数据导出逻辑很有用。
从仓库引导
现在假设您有一个现有集群 pg-meta,并且想要分叉它作为 pg-meta2:
您需要创建新的 pg-meta2 集群分叉,然后在其上运行 pitr。
11.15.2 - 备份仓库
您可以通过指定 pgbackrest_repo 参数来配置存储备份的位置。
您可以在那里定义多个仓库,Pigsty 将根据 pgbackrest_method 的值选择它。
默认仓库
默认情况下,Pigsty 有两个默认备份仓库定义:local 和 minio 备份仓库。
local:默认,使用本地/pg/backup目录(软链接指向pg_fs_backup:/data/backups)minio:使用 SNSD 1 节点 MinIO 集群(由 pigsty 支持,但默认未启用)
保留策略
如果您每天备份而不删除它们,备份仓库将越来越大并占满您的磁盘空间。 您需要定义保留策略以仅保留有限数量的备份。
默认备份策略在 pgbackrest_repo 参数中定义,根据需要更改它们。
local:保留最后 2 个全量备份,备份期间最多 3 个minio:保留最后 14 天内的所有全量备份
空间规划
对象存储提供几乎无限的存储容量,因此您无需担心磁盘空间。 您可以通过混合全量和差异备份策略优化空间使用。
对于本地磁盘备份仓库,pigsty 建议使用保留最后 2 个全量备份的保留策略, 这意味着在磁盘上保留两个最新的全量备份(在运行新备份时可能存在第三个副本)。
这为您提供至少最后 24 小时的保证恢复窗口。详情请查看备份策略。
仓库替代方案
您也可以使用其他服务作为备份仓库,详情请查看 pgbackrest 文档:
仓库版本控制
您甚至可以指定仓库目标时间以获取对象存储的快照。
您可以通过在 minio_buckets 中添加 versioning 标志来启用 MinIO 版本控制:
仓库锁定
一些对象存储服务(S3、MinIO 等)支持锁定,可以防止备份被删除,即使是 DBA 本人。
您可以通过在 minio_buckets 中添加 lock 标志来启用 MinIO 锁定功能:
使用对象存储
对象存储服务提供几乎无限的存储容量,并为您的系统提供远程灾难容错。 如果您没有对象存储,Pigsty 有内置的 MinIO 支持。
MinIO
您可以通过取消注释以下设置来启用 minio 备份仓库。 请注意,pgbackrest 只接受 HTTPS / 域名,因此您必须使用域名和 HTTPS 端点运行 MinIO。
S3
如果您只有一个节点,有意义的备份策略可能是使用云供应商的对象存储服务,如 AWS S3、阿里云 OSS 或 Google Cloud 等… 要实现这一点,您可以定义一个新的仓库:
管理备份
启用备份
如果您的数据库集群是在 pgbackrest_enable 设置为 true 的情况下创建的,备份将自动启用。
如果是在 false 值下创建的,您可以使用以下命令启用 pgbackrest 组件:
移除备份
Pigsty 在移除主实例(pg_role = primary)时会移除 pgbackrest 备份 stanza。
使用 pg_backup 子任务仅移除备份,并使用 pg_rm_backup 参数保留备份。
如果您的备份仓库被锁定(例如,S3 / MinIO 有锁定选项),此操作将失败。
移除备份可能导致永久数据丢失,这是一个危险操作,请极其谨慎地执行。
列出备份
此命令将列出 pgbackrest 仓库中的所有备份(由所有集群共享)
手动备份
Pigsty 有一个内置脚本 /pg/bin/pg-backup,它封装了 pgbackrest 备份命令。
基础备份
Pigsty 有一个替代备份脚本 /pg/bin/pg-basebackup,它不依赖 pgbackrest,并为您提供数据库集群的物理副本。
默认备份目录是 /pg/backup。
备份使用 lz4 压缩,您可以使用以下命令解压缩和提取 tarball:
逻辑备份
您也可以使用 pg_dump 命令执行逻辑备份。
逻辑备份不能用于 PITR(时间点恢复), 但它们对于在不同主版本之间迁移数据或实现灵活的数据导出逻辑很有用。
从仓库引导
现在假设您有一个现有集群 pg-meta,并且想要分叉它作为 pg-meta2:
您需要创建新的 pg-meta2 集群分叉,然后在其上运行 pitr。
11.15.3 - 备份策略
- 何时:备份策略
- 何地:备份仓库
- 如何:备份方法
何时备份
第一个问题是何时备份您的数据库——在备份频率和恢复时间之间做权衡。 由于您需要回放 WAL 日志到从上次备份以来的恢复目标, 备份越频繁,需要回放的 WAL 日志就越少,恢复就越快。
每日全量备份
对于生产数据库,建议从最简单的每日全量备份策略开始。 这是 Pigsty 中的默认备份策略,通过 crontab 实现。
当使用默认的 local 文件系统备份仓库时,它提供 24~48 小时的恢复窗口。

假设您的数据库大小为 100GB,每天写入 10GB,您的备份大小将是:

它将消耗数据库大小的 2 ~ 3 倍,加上 2 天的 WAL。
因此在实践中,您可能需要准备至少数据库大小 3 ~ 5 倍 的备份磁盘
来使用默认备份策略。
全量 + 增量备份
您可以通过更改这些参数来优化备份空间使用。
如果您使用 MinIO / S3 作为集中式备份仓库,您可以使用比磁盘限制更多的空间。 那么考虑使用 2 周保留策略的全量 + 增量备份:
当使用内置的 minio 文件系统备份仓库时,它提供有保证的 1 周 PITR 窗口。

假设您的数据库大小为 100GB,每天写入 10GB,您的备份大小将如下所示:

备份位置
默认情况下,Pigsty 有两个默认备份仓库定义:local 和 minio 备份仓库。
local:默认,使用本地/pg/backup目录(软链接指向pg_fs_backup:/data/backups)minio:使用 SNSD 1 节点 MinIO 集群(由 Pigsty 支持,但默认未启用)
11.15.4 - 备份管理
启用备份
如果您的数据库集群是在 pgbackrest_enable 设置为 true 的情况下创建的,备份将自动启用。
如果是在 false 值下创建的,您可以使用以下命令启用 pgbackrest 组件:
移除备份
Pigsty 在移除主实例(pg_role = primary)时会移除 pgbackrest 备份 stanza。
使用 pg_backup 子任务仅移除备份,并使用 pg_rm_backup 参数保留备份。
如果您的备份仓库被锁定(例如,S3 / MinIO 有锁定选项),此操作将失败。
移除备份可能导致永久数据丢失,这是一个危险操作,请极其谨慎地执行。
列出备份
此命令将列出 pgbackrest 仓库中的所有备份(由所有集群共享)
手动备份
Pigsty 有一个内置脚本 /pg/bin/pg-backup,它封装了 pgbackrest 备份命令。
基础备份
Pigsty 有一个替代备份脚本 /pg/bin/pg-basebackup,它不依赖 pgbackrest,并为您提供数据库集群的物理副本。
默认备份目录是 /pg/backup。
备份使用 lz4 压缩,您可以使用以下命令解压缩和提取 tarball:
逻辑备份
您也可以使用 pg_dump 命令执行逻辑备份。
逻辑备份不能用于 PITR(时间点恢复),但它们对于在不同主版本之间迁移数据或实现灵活的数据导出逻辑很有用。
从备份仓库中恢复
现在假设您有一个现有集群 pg-meta,并且想要分叉它作为 pg-meta2:
您需要创建新的 pg-meta2 集群分叉,然后在其上运行 pitr任务,来实现从备份仓库中恢复的效果。
11.15.5 - 时间点恢复
您可以使用预配置的 pgbackrest 在 Pigsty 中执行时间点恢复(PITR)。
如果您对配置非常熟悉,可以使用全自动剧本, 否则,考虑逐步手动操作
快速开始
如果您想将 pg-meta 集群回滚到之前的时间点,添加 pg_pitr:
然后运行 pgsql-pitr.yml 剧本,它将把 pg-meta 集群回滚到指定的时间点。
恢复 PITR
恢复的集群上的 archive_mode 将被禁用,以防止不必要的 WAL 写入。
如果恢复的数据库状态正常,您可以启用 archive_mode 并进行全量备份。
恢复目标
您可以在 pg_pitr 中指定不同类型的恢复目标,但它们是互斥的:
time:恢复到哪个时间点?name:恢复到命名的恢复点(由pg_create_restore_point创建)xid:恢复到特定的事务 ID(TXID/XID)lsn:恢复到特定的 LSN(日志序列号)点
如果指定了上述任何参数,恢复 type 将相应设置,
否则将设置为 latest(WAL 归档流的末尾)。
特殊的 immediate 类型可用于指示 pgbackrest 通过在第一个一致点停止来最小化恢复时间。
目标类型
按时间
最常用的目标是时间点;您可以指定要恢复到的时间点:
时间应该是有效的 PostgreSQL TIMESTAMP,建议使用 YYYY-MM-DD HH:MM:SS+TZ。
按名称
您可以使用 pg_create_restore_point 创建命名的恢复点:
并在 PITR 中使用该命名恢复点:
按 XID
如果您有一个意外删除某些数据的事务,最好的恢复方法是将数据库恢复到该事务之前的状态。
您可以从监控仪表板找到确切的事务 ID,或从 CSVLOG 的 TXID 中找到它。
目标参数默认是"包含"的,这意味着恢复将包含目标点。
exclusive 标志将排除那个确切的目标,比如 xid 24999 将是最后一个被重放的事务
这仅适用于 time、xid、lsn 恢复目标,详情请查看 recovery_target_inclusive。
按 LSN
PostgreSQL 使用 LSN(日志序列号)来标识 WAL 记录的位置。 您可以在任何地方找到它,比如 Pigsty 仪表板的 PG LSN 面板。
要恢复到 WAL 流中的确切点,您还可以指定 timeline 参数(默认为 latest)
恢复来源
cluster:恢复哪个集群?默认使用当前的pg_cluster,您可以在同一个 pgbackrest 仓库中使用任何其他集群repo:覆盖备份仓库,使用与pgbackrest_repo相同的格式set:默认使用latest备份集,但您可以指定特定的 pgbackrest 备份标签
Pigsty 将从 pgbackrest 备份仓库恢复,如果您使用集中式备份仓库(如 MinIO/S3), 您可以指定另一个"stanza"(另一个集群的备份目录)来恢复。
上述配置将标记 PITR 过程使用 pg-meta stanza。
您也可以通过 CLI 参数传递 pg_pitr 参数:
从另一个集群进行 pitr 时,您也可以使用这些目标:
分步执行
这种方法是半自动的,您将参与 PITR 过程以做出关键决策。
例如,此配置将把 pg-meta 集群本身恢复到指定的时间点
让我们逐步执行:
PITR 定义
pg_pitr 参数中有更多可用选项,以下是一些可用的参考项:
11.15.6 - 示例
您可以使用 pgsql-pitr 剧本执行 PITR,但在某些情况下,您可能希望手动执行 PITR。
我们将使用带有 MinIO 备份仓库的 4 节点沙盒环境 集群来演示该过程。
初始化沙盒
使用 vagrant 或 terraform 准备 4 节点沙盒环境,然后:
现在在管理节点上以管理员用户(或 dbsu)身份操作以继续。

检查备份
要检查备份状态,您需要切换到 postgres 用户并使用 pb 命令:
pb 是 pgbackrest 的别名,会自动从 pgbackrest 配置中获取 stanza 名称。
您可以看到初始备份信息,这是在以下时间创建的全量备份:
备份完成于 2025-07-13 02:27:33+00,这是您可以恢复到的最早时间。
由于 WAL 归档处于活动状态,您可以恢复到备份后直到 WAL 结束(现在)的任何时间点。
生成心跳
您可以生成一些心跳来模拟工作负载。/pg-bin/pg-heartbeat 就是为此目的,
它将每秒向 monitor.heartbeat 表写入一个心跳时间戳。
您甚至可以为集群添加更多工作负载,让我们使用 pgbench 生成一些随机写入:
手动 PITR
现在让我们选择一个恢复的时间点,比如说 2025-07-13 03:03:03+00,这是初始备份(和心跳)之后的时间点。
要执行手动 PITR,请使用 pg-pitr 工具:
它将为您生成执行恢复的说明,通常需要四个步骤:
单节点示例
让我们以简单的单节点 pg-meta 集群为例开始,这比较简单。
关闭数据库
确保本地 postgres 没有运行,然后执行手册中给出的恢复命令:
恢复备份
验证数据
我们不希望 patroni HA 在确保数据正确之前接管,所以我们手动启动 postgres:
现在您可以检查数据,看看它是否在您想要的时间点。 您可以通过检查业务表中的一些最新时间戳来验证它,或者在这种情况下,通过心跳表进行检查。
时间戳正好在我们指定的时间点之前!(2025-07-13 03:03:00+00)。
如果这不是您想要的时间点,您可以使用不同的时间点重复恢复。
由于恢复是以增量和并行方式执行的,所以很快。
重试直到获得正确的时间点是可以的。
提升为主节点
恢复的 postgres 集群处于 recovery 模式,因此在您将其提升为主节点之前,它将拒绝任何写入操作。
这些恢复参数由 pgBackRest 在配置文件中生成。
如果数据正确,您可以将其提升为主节点,将其标记为新的领导者并准备接受写入。
一旦提升,数据库集群将进入新的时间线(主节点纪元)。 如果有任何写入流量,它将被写入新的时间线。
恢复集群
最后,不仅数据需要恢复,集群状态也需要恢复,例如:
- patroni 接管
- 归档模式
- 备份集
- 副本
Patroni 接管
您的 postgres 直接启动,要恢复 HA 接管;您必须启动 patroni 服务:
归档模式
archive_mode 在恢复期间被 pgbackrest 禁用。
如果您希望新主节点的写入被归档到备份仓库中,您还需要启用 archive_mode 配置。
备份集
在 PITR 后进行新的全量备份通常是一个好主意,但这是可选的。
副本
如果您的 postgres 集群有副本,您需要在每个副本上也执行 PITR。 或者,简单的方法是清除副本数据目录并重启 patroni,这将从主节点重新初始化副本。 我们将在下一个多节点集群示例中介绍这种情况。
11.16 - 内核
Pigsty 支持各种 PostgreSQL 内核和兼容分支, 使您能够模拟不同的数据库系统,同时利用 PostgreSQL 的生态系统。 每个内核都能提供独特的功能和兼容性层。
数据库内核
带有 437 个扩展插件的原生 PostgreSQL 内核
PG 原生分布式扩展
SQL Server 线缆协议兼容
Oracle 语法和 PL/SQL 兼容
MySQL 线缆协议兼容
透明加密内核
OLTP 优化的云原生存储引擎
类 Aurora RAC 风味的信创内核
后端即服务,自托管 Firebase
MongoDB 线缆协议兼容的内核
选择合适的内核
| 内核 | 关键特性 | 描述 |
|---|---|---|
| PostgreSQL | 原始版本 | 原版 PostgreSQL 配备 437 扩展 |
| Citus | 水平扩展 | 通过原生扩展实现分布式 PostgreSQL |
| WiltonDB | SQL Server 迁移 | SQL Server 线协议兼容 |
| IvorySQL | Oracle 迁移 | Oracle 语法和 PL/SQL 兼容 |
| OpenHalo | MySQL 迁移 | MySQL 线协议兼容 |
| Percona | 透明数据加密 | 带有 pg_tde 的 Percona 发行版 |
| FerretDB | MongoDB 迁移 | MongoDB 线协议兼容 |
| OrioleDB | OLTP 优化 | Zheap,无膨胀,S3 存储 |
| PolarDB | Aurora 风格 RAC | RAC,中国国产合规 |
| Supabase | 后端即服务 | 基于 PostgreSQL 的 BaaS,Firebase 替代方案 |
| Cloudberry | MPP 数厂与数据分析 | 大规模并行处理数据仓库(等待2.0GA) |
Citus(分布式)
Citus 原生分布式
Citus 将 PostgreSQL 转换为分布式数据库系统,实现跨多个节点的水平扩展。使用 Pigsty 部署原生 HA Citus 集群以获得更好的吞吐量和性能。
关键特性
- 分布式表:自动将表分片到工作节点
- 分布式查询:在整个集群中执行查询
- 高可用性:内置复制和故障转移功能
- 实时分析:处理事务和分析工作负载
- Postgres 兼容性:保持完整的 PostgreSQL 功能兼容性
用例
- 需要水平扩展的多租户 SaaS 应用程序
- 大型数据集的实时分析
- 高吞吐量 OLTP 工作负载
- 需要扩展超出单节点限制的应用程序
需要规划:正确的分片键选择对于最佳性能和避免跨分片查询至关重要。
Babelfish(MSSQL)
Babelfish SQL Server 线缆协议兼容
使用 WiltonDB 和 Babelfish 创建 SQL Server 兼容的 PostgreSQL 集群,提供与 Microsoft SQL Server 的线协议级别兼容性。
关键特性
- T-SQL 支持:原生执行 T-SQL 查询
- 线协议兼容性:使用 SQL Server 驱动程序和工具连接
- 存储过程:支持 T-SQL 存储过程和函数
- 数据类型:与 SQL Server 数据类型和行为兼容
- 迁移工具:简化从 SQL Server 环境的迁移
用例
- 将传统 SQL Server 应用程序迁移到 PostgreSQL
- 需要 SQL Server 兼容性的多数据库环境
- 在保持应用程序兼容性的同时降低成本
- 从 SQL Server 到开源替代方案的云迁移
迁移路径:非常适合希望降低许可成本同时保持现有 SQL Server 应用程序兼容性的组织。
IvorySQL(Oracle)
Babelfish Oracle Grammar Compatible
使用 IvorySQL 内核运行 Oracle 兼容的 PostgreSQL 集群,由瀚高开源,提供 Oracle 语法和功能兼容性。
关键特性
- PL/SQL 支持:以最少的修改执行 PL/SQL 代码
- Oracle 语法:支持 Oracle 特定的 SQL 语法和函数
- 包支持:Oracle 风格的包和过程定义
- 数据类型:Oracle 兼容的数据类型和行为
用例
- Oracle 数据库迁移项目
- 寻求 Oracle 功能兼容性的组织
- 在保持 Oracle 功能的同时进行成本优化
- 需要 Oracle 兼容性的开发环境
企业焦点:对于在 Oracle 上有重大投资并寻求迁移路径的企业特别有价值。
OpenHalo(MySQL)
OpenHalo MySQL Wire-Compatible
OpenHalo 内核提供 MySQL 兼容的 PostgreSQL 功能,可使用标准 MySQL 客户端和协议访问。
关键特性
- MySQL 协议:与 MySQL 协议的线级别兼容性
- 客户端兼容性:使用现有的 MySQL 驱动程序和工具
- SQL 方言:支持 MySQL 特定的 SQL 语法
- 迁移支持:简化从 MySQL 环境的迁移
- 生态系统集成:在保持 MySQL 兼容性的同时利用 PostgreSQL 的高级功能
用例
- MySQL 应用程序迁移到 PostgreSQL
- 需要 MySQL 兼容性的多数据库环境
- 在保持 MySQL 接口的同时利用 PostgreSQL 功能
- 从 MySQL 到 PostgreSQL 的渐进式迁移策略
早期阶段:目前处于实验阶段 - 在生产使用前请彻底评估。
OrioleDB(OLTP)
OrioleDB OLTP Optimized Cloud Native
为 OLTP 工作负载优化的 PostgreSQL 存储引擎,消除事务 ID 回绕问题和表膨胀,同时支持云存储。
与 PostgreSQL 17 兼容,在所有支持的平台上可用。
关键特性
- 无 XID 回绕:消除事务 ID 回绕维护
- 无表膨胀:高级存储管理防止表膨胀
- 云存储:对 S3 兼容对象存储的原生支持
- OLTP 优化:专为事务工作负载设计
- 改进性能:更好的空间利用率和查询性能
用例
- 高频事务应用程序
- 需要对象存储的云原生部署
- 受 PostgreSQL 维护开销影响的应用程序
- 需要无需清理周期的一致性能的系统
早期阶段:目前处于 Beta 阶段 - 在生产使用前请彻底评估。
PolarDB PG(RAC)
PolarDB Aurora Flavor RAC
用 PolarDB PG 替换原版 PostgreSQL,这是一个开源的类 Aurora 解决方案,类似于具有共享存储架构的 Oracle RAC。
关键特性
- 共享存储:多个计算节点共享同一存储层
- 读取扩展:无需存储复制即可添加读副本
- 快速恢复:通过共享存储架构快速恢复
- 成本效率:通过共享降低存储成本
- 高可用性:内置故障转移和灾难恢复
用例
- 需要极端读取可扩展性的应用程序
- 需要高可用性的成本敏感部署
- 具有共享存储基础设施的云环境
- 具有可变读写模式的工作负载
云架构:专为具有分离计算和存储的云环境设计。
Supabase(Firebase)
Supabase Backend as a Service
使用现有托管的 HA PostgreSQL 集群自托管 Supabase,使用 docker-compose 启动无状态组件以获得完整的 Firebase 替代方案。
关键特性
- 实时 API:自动生成的 REST 和 GraphQL API
- 实时订阅:基于 WebSocket 的实时数据同步
- 身份验证:内置用户身份验证和授权
- 存储:具有 CDN 功能的文件存储
- 边缘函数:用于自定义逻辑的无服务器函数
用例
- 使用后端即服务进行快速应用程序开发
- AI / Agent / SaaS 应用快速原型设计
- 需要即时数据同步的实时应用程序
- 需要身份验证和存储的移动和 Web 应用程序
全栈:提供以 PostgreSQL 为基础的完整后端解决方案。
Greenplum(MPP)
Cloudberry MPP Data Warehouse
使用 Pigsty 部署和监控 Greenplum/YMatrix MPP 集群,用于大规模分析处理和数据仓库。
关键特性
- 大规模并行处理:在多个节点间分布查询
- 列式存储:为分析工作负载优化的存储
- 高级分析:内置机器学习和统计函数
- PB 级扩展:通过线性可扩展性处理大规模数据集
- 标准 SQL:与 PostgreSQL 兼容的完整 SQL 合规性
用例
- 数据仓库和商业智能
- 大规模分析和报告
- 大数据集上的机器学习
- 企业数据平台的 ETL 处理
企业分析:专为需要大规模并行处理能力的企业级分析工作负载而设计。
11.16.1 - PostgreSQL
PostgreSQL 是世界上最先进和最受欢迎的开源数据库。
Pigsty 支持 PostgreSQL 13 ~ 18,并提供 437 个 PG 扩展。
快速开始
大多数配置模板默认使用 PostgreSQL 内核,例如:
meta: 默认,带有核心扩展(vector、postgis、timescale)的 postgresrich: 安装了所有扩展的 postgresslim: 仅 postgres,无监控基础设施full: 用于 HA 演示的 4 节点沙盒pgsql: 最小的 postgres 内核配置示例
配置
原版 PostgreSQL 内核不需要特殊调整:
版本选择
要使用不同的 PostgreSQL 主版本,您可以使用 -v 参数进行配置:
如果 PostgreSQL 集群已经安装,您需要在安装新版本之前卸载它:
扩展生态
Pigsty 为 PostgreSQL 提供了丰富的扩展生态,包括:
- 时序类:timescaledb, pg_cron, periods
- 地理类:postgis, h3, pgrouting
- 向量类:pgvector, pgml, vchord
- 搜索类:pg_trgm, zhparser, pgroonga
- 分析类:citus, pg_duckdb, pg_analytics
- 特性类:age, pg_graphql, rum
- 语言类:plpython3u, pljava, plv8
- 类型类:hstore, ltree, citext
- 工具类:http, pg_net, pgjwt
- 函数类:pgcrypto, uuid-ossp, pg_uuidv7
- 管理类:pg_repack, pgagent, pg_squeeze
- 统计类:pg_stat_statements, pg_qualstats, auto_explain
- 安全类:pgaudit, pgcrypto, pgsodium
- 外部类:postgres_fdw, mysql_fdw, oracle_fdw
- 兼容类:orafce, babelfishpg_tds
- 数据类:pglogical, wal2json, decoderbufs
详情请参考 扩展目录。
11.16.2 - Citus
Citus 是一个 PostgreSQL 扩展,它将 PostgreSQL 转换为分布式数据库,能够跨多个节点水平扩展以处理大量数据和查询。
自 Patroni v3.0 以来,已原生支持 Citus 高可用性,简化了 Citus 集群的设置。Pigsty 也为此提供原生支持。
Pigsty v3.7.0 的 Citus 模板固定使用 PostgreSQL 17;该版本没有 PostgreSQL 18 的 Citus 软件包。
Citus 集群
Pigsty 原生支持 Citus。参考 conf/citus.yml。
此示例使用四节点沙盒,包含一个名为 pg-citus 的 Citus 集群,由一个双节点协调器集群 pg-citus0 和两个工作节点集群 pg-citus1 和 pg-citus2 组成。
与标准 PostgreSQL 集群相比,Citus 集群配置有一些特定要求。首先,确保 Citus 扩展被下载、安装、加载和启用。这涉及以下四个参数:
repo_packages:必须包含citus扩展,或者您需要使用带有 Citus 扩展的 PostgreSQL 离线包。pg_extensions:必须包含citus扩展,意味着您需要在每个节点上安装citus扩展。pg_libs:必须包含citus扩展,且必须在列表中排第一,但现在 Patroni 会自动处理。pg_databases:定义安装了citus扩展的主数据库。
另外,确保 Citus 集群的配置正确:
pg_mode:必须设置为citus以告知 Patroni 使用 Citus 模式。pg_primary_db:指定主数据库名称,该数据库必须安装citus扩展(此处命名为citus)。pg_shard:指定统一名称作为所有水平分片 PG 集群的前缀(例如,pg-citus)。pg_group:指定分片编号,协调器集群从零开始,工作节点集群递增。pg_cluster:必须匹配 [pg_shard] 和 [pg_group] 的组合。pg_dbsu_password:设置非空明文密码以确保 Citus 正常运行。pg_parameters:建议设置citus.node_conninfo参数,强制 SSL 访问并要求节点间客户端证书验证。
配置完成后,使用 pgsql.yml 部署 Citus 集群,就像常规 PostgreSQL 集群一样。
管理 Citus 集群
定义 Citus 集群后,使用相同的剧本 pgsql.yml 部署 Citus 集群:
任何 DBSU 用户(postgres)都可以使用 patronictl(别名:pg)列出 Citus 集群的状态:
每个水平分片集群都可以作为单独的 PGSQL 集群处理,使用 pg(patronictl)命令管理。注意使用 pg 管理 Citus 集群时,必须使用 --group 参数指定集群分片编号:
Citus 有一个名为 pg_dist_node 的系统表来记录节点信息,Patroni 会自动维护。
另外,您可以查看用户认证信息(仅限超级用户):
然后您可以使用常规业务用户(例如,具有 DDL 权限的 dbuser_citus)访问 Citus 集群:
使用 Citus 集群
使用 Citus 集群时,我们强烈建议阅读 Citus 官方文档 了解其架构和核心概念。
关键是理解 Citus 中五种类型的表、它们的特征和用例:
- 分布式表
- 引用表
- 本地表
- 本地管理表
- 模式表
在协调器节点上,您可以创建分布式表和引用表,并从任何数据节点查询它们。自版本 11.2 以来,任何 Citus 数据库节点都可以充当协调器。
我们可以使用 pgbench 创建一些表,将主表(pgbench_accounts)分布到各个节点,并将其他较小的表用作引用表:
运行读写基准测试:
生产部署
生产环境的 Citus 部署通常需要为协调器和每个工作节点集群提供物理复制。
例如,在 simu.yml 中有一个 10 节点集群:
我们将在后续教程中涵盖一系列高级主题:
- 读写分离
- 故障转移处理
- 一致性备份和恢复
- 高级监控和故障排除
- 连接池
11.16.3 - Babelfish
Pigsty 允许用户使用 Babelfish 和 WiltonDB 创建与 Microsoft SQL Server 兼容的 PostgreSQL 集群!
Babelfish 是一个 PostgreSQL 扩展,但它运行在经过轻微修改的 PostgreSQL 内核分支上,WiltonDB 在 EL/Ubuntu 系统上提供编译后的内核二进制文件和扩展二进制包。
Pigsty 可以用 WiltonDB 替换原生 PostgreSQL 内核,提供开箱即用的 MSSQL 兼容集群,以及常见 PostgreSQL 集群支持的所有功能,如 HA、PITR、IaC、监控等。
WiltonDB 与 PostgreSQL 15 非常相似,但不能直接使用原版 PostgreSQL 扩展。WiltonDB 有几个重新编译的扩展,如 system_stats、pg_hint_plan 和 tds_fdw。
集群将监听默认的 PostgreSQL 端口和默认的 MSSQL 1433 端口,通过 TDS WireProtocol 在此端口上提供 MSSQL 服务。您可以使用任何 MSSQL 客户端连接到 Pigsty 提供的 MSSQL 服务,例如 SQL Server Management Studio,或使用 sqlcmd 命令行工具。
快速开始
对于生产部署,请确保在运行 install 剧本之前修改 pigsty.yml 配置中的密码参数。
注意事项
在安装和部署 MSSQL 模块时,请特别注意以下几点:
- WiltonDB 在 EL(7/8/9)和 Ubuntu(20.04/22.04)上可用,但在 Debian 系统上不可用。
- WiltonDB 目前基于 PostgreSQL 15 编译,因此您需要指定
pg_version: 15。 - 在 EL 系统上,
wiltondb二进制文件默认安装在/usr/bin/目录中,而在 Ubuntu 系统上,它安装在/usr/lib/postgresql/15/bin/目录中,这与官方 PostgreSQL 二进制文件位置不同。 - 在 WiltonDB 兼容模式下,HBA 密码认证规则需要使用
md5而不是scram-sha-256。因此,您需要覆盖 Pigsty 的默认 HBA 规则集,并在dbrole_readonly通配符认证规则之前插入 SQL Server 所需的md5认证规则。 - WiltonDB 只能为主数据库启用,您应该指定一个用户作为 Babelfish 超级用户,允许 Babelfish 创建数据库和用户。默认是
mssql和dbuser_myssql。如果您更改了这个,您还应该修改files/mssql.sql中的用户。 - WiltonDB TDS 线协议兼容性插件
babelfishpg_tds需要在shared_preload_libraries中启用。 - 启用 WiltonDB 扩展后,它监听默认的 MSSQL 端口
1433。您可以覆盖 Pigsty 的默认服务定义,将primary和replica服务重定向到端口1433而不是5432/6432端口。
需要为 MSSQL 数据库集群配置以下参数:
您可以在 pg_databases 和 pg_users 部分定义业务数据库和用户:
客户端访问
您可以使用任何兼容 SQL Server 的客户端工具来访问此数据库集群。
Microsoft 提供 sqlcmd 作为官方命令行工具。
此外,他们还有一个 go 版本的 cli 工具:go-sqlcmd
安装 go-sqlcmd:
开始使用 go-sqlcmd
您可以将服务流量路由到 MSSQL 1433 端口而不是 5433/5434:
安装
如果您有互联网访问权限,可以将 WiltonDB 仓库添加到节点并直接作为节点包安装:
使用以下命令安装 wiltondb:
在同一个节点上安装原版 PostgreSQL 和 WiltonDB 是可以的,但一次只能运行其中一个,不建议在生产环境中这样做。
扩展
PGSQL 模块的大多数扩展(非 SQL 类)不能直接在 MSSQL 模块的 WiltonDB 内核上使用,需要重新编译。
WiltonDB 目前附带以下扩展插件:
| 名称 | 版本 | 注释 |
|---|---|---|
| dblink | 1.2 | 从数据库内连接到其他 PostgreSQL 数据库 |
| adminpack | 2.1 | PostgreSQL 的管理功能 |
| dict_int | 1.0 | 整数的文本搜索字典模板 |
| intagg | 1.1 | 整数聚合器和枚举器(已过时) |
| dict_xsyn | 1.0 | 扩展同义词处理的文本搜索字典模板 |
| amcheck | 1.3 | 验证关系完整性的函数 |
| autoinc | 1.0 | 自动递增字段的函数 |
| bloom | 1.0 | bloom 访问方法 - 基于签名文件的索引 |
| fuzzystrmatch | 1.1 | 确定字符串之间的相似性和距离 |
| intarray | 1.5 | 1-D 整数数组的函数、操作符和索引支持 |
| btree_gin | 1.3 | 在 GIN 中索引常见数据类型的支持 |
| btree_gist | 1.7 | 在 GiST 中索引常见数据类型的支持 |
| hstore | 1.8 | 存储(键,值)对集合的数据类型 |
| hstore_plperl | 1.0 | hstore 和 plperl 之间的转换 |
| isn | 1.2 | 国际产品编号标准的数据类型 |
| hstore_plperlu | 1.0 | hstore 和 plperlu 之间的转换 |
| jsonb_plperl | 1.0 | jsonb 和 plperl 之间的转换 |
| citext | 1.6 | 不区分大小写字符串的数据类型 |
| jsonb_plperlu | 1.0 | jsonb 和 plperlu 之间的转换 |
| jsonb_plpython3u | 1.0 | jsonb 和 plpython3u 之间的转换 |
| cube | 1.5 | 多维立方体的数据类型 |
| hstore_plpython3u | 1.0 | hstore 和 plpython3u 之间的转换 |
| earthdistance | 1.1 | 计算地球表面的大圆距离 |
| lo | 1.1 | 大对象维护 |
| file_fdw | 1.0 | 平面文件访问的外部数据包装器 |
| insert_username | 1.0 | 跟踪谁更改了表的函数 |
| ltree | 1.2 | 分层树状结构的数据类型 |
| ltree_plpython3u | 1.0 | ltree 和 plpython3u 之间的转换 |
| pg_walinspect | 1.0 | 检查 PostgreSQL 写前日志内容的函数 |
| moddatetime | 1.0 | 跟踪最后修改时间的函数 |
| old_snapshot | 1.0 | 支持 old_snapshot_threshold 的实用程序 |
| pgcrypto | 1.3 | 加密函数 |
| pgrowlocks | 1.2 | 显示行级锁定信息 |
| pageinspect | 1.11 | 在低级别检查数据库页面的内容 |
| pg_surgery | 1.0 | 对损坏关系进行手术的扩展 |
| seg | 1.4 | 表示线段或浮点区间的数据类型 |
| pgstattuple | 1.5 | 显示元组级统计信息 |
| pg_buffercache | 1.3 | 检查共享缓冲区缓存 |
| pg_freespacemap | 1.2 | 检查空闲空间映射(FSM) |
| postgres_fdw | 1.1 | 远程 PostgreSQL 服务器的外部数据包装器 |
| pg_prewarm | 1.2 | 预热关系数据 |
| tcn | 1.0 | 触发的更改通知 |
| pg_trgm | 1.6 | 基于三元组的文本相似度测量和索引搜索 |
| xml2 | 1.1 | XPath 查询和 XSLT |
| refint | 1.0 | 实现引用完整性的函数(已过时) |
| pg_visibility | 1.2 | 检查可见性映射(VM)和页面级可见性信息 |
| pg_stat_statements | 1.10 | 跟踪所有已执行 SQL 语句的规划和执行统计信息 |
| sslinfo | 1.2 | SSL 证书信息 |
| tablefunc | 1.0 | 操作整个表的函数,包括交叉表 |
| tsm_system_rows | 1.0 | 接受行数作为限制的 TABLESAMPLE 方法 |
| tsm_system_time | 1.0 | 接受毫秒时间作为限制的 TABLESAMPLE 方法 |
| unaccent | 1.1 | 去除重音符号的文本搜索字典 |
| uuid-ossp | 1.1 | 生成通用唯一标识符(UUID) |
| plpgsql | 1.0 | PL/pgSQL 过程语言 |
| babelfishpg_money | 1.1.0 | babelfishpg_money |
| system_stats | 2.0 | PostgreSQL 的 EnterpriseDB 系统统计信息 |
| tds_fdw | 2.0.3 | 查询 TDS 数据库(Sybase 或 Microsoft SQL Server)的外部数据包装器 |
| babelfishpg_common | 3.3.3 | Transact SQL 数据类型支持 |
| babelfishpg_tds | 1.0.0 | TDS 协议扩展 |
| pg_hint_plan | 1.5.1 | |
| babelfishpg_tsql | 3.3.1 | Transact SQL 兼容性 |
11.16.4 - IvorySQL
IvorySQL 是一个开源的"Oracle 兼容"PostgreSQL 内核,由 HighGo 开发,采用 Apache 2.0 许可证。
这里的 Oracle 兼容性是指在 PL/SQL、语法、内置函数、数据类型、系统视图、MERGE 和 GUC 参数级别的兼容性。它不是像 Babelfish、openHalo 或 FerretDB 那样的线协议兼容性, 不能使用原始客户端驱动程序。用户仍需要使用 PostgreSQL 客户端工具访问 IvorySQL,但可以使用 Oracle 兼容的语法。
目前,IvorySQL 的最新版本 5.0 与 PostgreSQL 的最新次要版本 18.0 保持兼容,并为主流 Linux 发行版提供二进制 RPM/DEB 包。 Pigsty 提供了在 PG RDS 中用 IvorySQL 内核替换原生 PostgreSQL 的选项,支持所有 Pigsty 支持的 Linux 系统。
快速开始
对于生产部署,您应该编辑自动生成的 pigsty.yml 配置文件,在执行 ./install.yml 进行部署之前修改密码等参数。
最新的 IvorySQL 5.0 等价于 PostgreSQL 18.0。任何与 PostgreSQL 线协议兼容的客户端工具都可以访问 IvorySQL 集群。
默认情况下,您可以使用 PostgreSQL 客户端通过替代的 1521 端口访问,该端口默认启用 Oracle 兼容模式。
配置说明
要在 Pigsty 中使用 IvorySQL 内核,请修改以下四个配置参数:
pg_mode:使用ivory兼容模式repo_extra_packages:下载ivorysql包pg_packages:安装ivorysql包pg_libs:加载 Oracle 语法兼容性扩展
就这么简单——只需在配置文件的全局变量中添加这四行,Pigsty 就会用 IvorySQL 替换原生 PostgreSQL 内核:
IvorySQL 还提供了一系列新的 GUC 参数,可以在 pg_parameters 中指定。
扩展
PGSQL 模块的大多数扩展(非 SQL 类)不能直接在 IvorySQL 内核上使用。 如果您需要使用它们,您需要为新内核从源代码重新编译和安装。
注意事项
- IvorySQL 软件包位于
pigsty-infra仓库中,而不在pigsty-pgsql或pigsty-ivory仓库中。 - Pigsty 不为使用 IvorySQL 内核承担任何保证,任何问题或请求应联系制造商。
11.16.5 - Percona
Percona Postgres 是一个带有 pg_tde(透明数据加密)扩展的补丁 Postgres 内核。
它与 PostgreSQL 18.1 兼容,在所有 Pigsty 支持的平台上都可用。
快速开始
配置
需要调整以下参数来部署 Percona 集群:
扩展
Percona 提供了 80 个可用的扩展,包括 pg_tde, pgvector, postgis, pgaudit, set_user, pg_stat_monitor 等实用三方扩展。
| name | version | comment |
|---|---|---|
| hstore_plperlu | 1.0 | transform between hstore and plperlu |
| jsonb_plperl | 1.0 | transform between jsonb and plperl |
| intagg | 1.1 | integer aggregator and enumerator (obsolete) |
| pltcl | 1.0 | PL/Tcl procedural language |
| isn | 1.3 | data types for international product numbering standards |
| pgstattuple | 1.5 | show tuple-level statistics |
| postgis_topology-3 | 3.5.4 | PostGIS topology spatial types and functions |
| postgis_raster | 3.5.4 | PostGIS raster types and functions |
| tsm_system_rows | 1.0 | TABLESAMPLE method which accepts number of rows as a limit |
| lo | 1.2 | Large Object maintenance |
| hstore_plperl | 1.0 | transform between hstore and plperl |
| ltree | 1.3 | data type for hierarchical tree-like structures |
| postgis_raster-3 | 3.5.4 | PostGIS raster types and functions |
| postgis_topology | 3.5.4 | PostGIS topology spatial types and functions |
| pgrowlocks | 1.2 | show row-level locking information |
| address_standardizer_data_us-3 | 3.5.4 | Address Standardizer US dataset example |
| uuid-ossp | 1.1 | generate universally unique identifiers (UUIDs) |
| postgis-3 | 3.5.4 | PostGIS geometry and geography spatial types and functions |
| hstore_plpython3u | 1.0 | transform between hstore and plpython3u |
| postgis | 3.5.4 | PostGIS geometry and geography spatial types and functions |
| set_user | 4.2.0 | similar to SET ROLE but with added logging |
| postgis_tiger_geocoder-3 | 3.5.4 | PostGIS tiger geocoder and reverse geocoder |
| jsonb_plperlu | 1.0 | transform between jsonb and plperlu |
| pg_surgery | 1.0 | extension to perform surgery on a damaged relation |
| xml2 | 1.2 | XPath querying and XSLT |
| pg_stat_monitor | 2.3 | The pg_stat_monitor is a PostgreSQL Query Performance Monitoring tool, based on PostgreSQL contrib module pg_stat_statements. pg_stat_monitor provides aggregated statistics, client information, plan details including plan, and histogram information. |
| pg_tde | 2.1 | pg_tde access method |
| plpgsql | 1.0 | PL/pgSQL procedural language |
| address_standardizer-3 | 3.5.4 | Used to parse an address into constituent elements. Generally used to support geocoding address normalization step. |
| tablefunc | 1.0 | functions that manipulate whole tables, including crosstab |
| hstore | 1.8 | data type for storing sets of (key, value) pairs |
| vector | 0.8.1 | vector data type and ivfflat and hnsw access methods |
| postgis_tiger_geocoder | 3.5.4 | PostGIS tiger geocoder and reverse geocoder |
| dblink | 1.2 | connect to other PostgreSQL databases from within a database |
| pltclu | 1.0 | PL/TclU untrusted procedural language |
| pg_trgm | 1.6 | text similarity measurement and index searching based on trigrams |
| sslinfo | 1.2 | information about SSL certificates |
| pg_stat_statements | 1.12 | track planning and execution statistics of all SQL statements executed |
| bool_plperlu | 1.0 | transform between bool and plperlu |
| cube | 1.5 | data type for multidimensional cubes |
| ltree_plpython3u | 1.0 | transform between ltree and plpython3u |
| amcheck | 1.5 | functions for verifying relation integrity |
| postgis_sfcgal | 3.5.4 | PostGIS SFCGAL functions |
| plpython3u | 1.0 | PL/Python3U untrusted procedural language |
| tsm_system_time | 1.0 | TABLESAMPLE method which accepts time in milliseconds as a limit |
| intarray | 1.5 | functions, operators, and index support for 1-D arrays of integers |
| btree_gist | 1.8 | support for indexing common datatypes in GiST |
| plperlu | 1.0 | PL/PerlU untrusted procedural language |
| fuzzystrmatch | 1.2 | determine similarities and distance between strings |
| bool_plperl | 1.0 | transform between bool and plperl |
| btree_gin | 1.3 | support for indexing common datatypes in GIN |
| pg_prewarm | 1.2 | prewarm relation data |
| pg_repack | 1.5.3 | Reorganize tables in PostgreSQL databases with minimal locks |
| citext | 1.8 | data type for case-insensitive character strings |
| pgcrypto | 1.4 | cryptographic functions |
| moddatetime | 1.0 | functions for tracking last modification time |
| plperl | 1.0 | PL/Perl procedural language |
| seg | 1.4 | data type for representing line segments or floating-point intervals |
| earthdistance | 1.2 | calculate great-circle distances on the surface of the Earth |
| unaccent | 1.1 | text search dictionary that removes accents |
| postgres_fdw | 1.2 | foreign-data wrapper for remote PostgreSQL servers |
| pg_logicalinspect | 1.0 | functions to inspect logical decoding components |
| tcn | 1.0 | Triggered change notifications |
| bloom | 1.0 | bloom access method - signature file based index |
| dict_int | 1.0 | text search dictionary template for integers |
| autoinc | 1.0 | functions for autoincrementing fields |
| address_standardizer_data_us | 3.5.4 | Address Standardizer US dataset example |
| postgis_sfcgal-3 | 3.5.4 | PostGIS SFCGAL functions |
| jsonb_plpython3u | 1.0 | transform between jsonb and plpython3u |
| file_fdw | 1.0 | foreign-data wrapper for flat file access |
| pgaudit | 18.0 | provides auditing functionality |
| dict_xsyn | 1.0 | text search dictionary template for extended synonym processing |
| pg_walinspect | 1.1 | functions to inspect contents of PostgreSQL Write-Ahead Log |
| pg_buffercache | 1.6 | examine the shared buffer cache |
| refint | 1.0 | functions for implementing referential integrity (obsolete) |
| pg_freespacemap | 1.3 | examine the free space map (FSM) |
| insert_username | 1.0 | functions for tracking who changed a table |
| address_standardizer | 3.5.4 | Used to parse an address into constituent elements. Generally used to support geocoding address normalization step. |
| pg_visibility | 1.2 | examine the visibility map (VM) and page-level visibility info |
| pageinspect | 1.13 | inspect the contents of database pages at a low level |
11.16.6 - PolarDB
PolarDB 是一个由阿里云开发并开源的 aurora RAC 风格"云原生"数据库系统。
当前仓库中的最新版本 v15.15.5.0 与 PostgreSQL 15 兼容,在所有 Pigsty 支持的操作系统上都可用。
快速开始
配置
需要调整以下参数来部署 PolarDB 集群:
PolarDB for PostgreSQL 本质上等价于 PostgreSQL 15,任何与 PostgreSQL 线协议兼容的客户端工具都可以访问 PolarDB 集群。
扩展
PGSQL 模块的大多数扩展(非纯 SQL)不能直接在 PolarDB 内核上使用。如果您需要使用它们,您需要为新内核从源代码重新编译和安装。
这是 PolarDB 内核提供的扩展列表:
| name | Version | comment |
|---|---|---|
| adminpack | 2.1 | administrative functions for PostgreSQL |
| amcheck | 1.3 | functions for verifying relation integrity |
| autoinc | 1.0 | functions for autoincrementing fields |
| bloom | 1.0 | bloom access method - signature file based index |
| bool_plperl | 1.0 | transform between bool and plperl |
| bool_plperlu | 1.0 | transform between bool and plperlu |
| btree_gin | 1.3 | support for indexing common datatypes in GIN |
| btree_gist | 1.7 | support for indexing common datatypes in GiST |
| citext | 1.6 | data type for case-insensitive character strings |
| cube | 1.5 | data type for multidimensional cubes |
| dblink | 1.2 | connect to other PostgreSQL databases from within a database |
| dict_int | 1.0 | text search dictionary template for integers |
| dict_xsyn | 1.0 | text search dictionary template for extended synonym processing |
| earthdistance | 1.1 | calculate great-circle distances on the surface of the Earth |
| file_fdw | 1.0 | foreign-data wrapper for flat file access |
| fuzzystrmatch | 1.1 | determine similarities and distance between strings |
| hll | 2.18 | type for storing hyperloglog data |
| hstore | 1.8 | data type for storing sets of (key, value) pairs |
| hstore_plperl | 1.0 | transform between hstore and plperl |
| hstore_plperlu | 1.0 | transform between hstore and plperlu |
| hstore_plpython3u | 1.0 | transform between hstore and plpython3u |
| hypopg | 1.3.1 | Hypothetical indexes for PostgreSQL |
| insert_username | 1.0 | functions for tracking who changed a table |
| intagg | 1.1 | integer aggregator and enumerator (obsolete) |
| intarray | 1.5 | functions, operators, and index support for 1-D arrays of integers |
| isn | 1.2 | data types for international product numbering standards |
| jsonb_plperl | 1.0 | transform between jsonb and plperl |
| jsonb_plperlu | 1.0 | transform between jsonb and plperlu |
| jsonb_plpython3u | 1.0 | transform between jsonb and plpython3u |
| lo | 1.1 | Large Object maintenance |
| log_fdw | 1.4 | foreign-data wrapper for Postgres log file access |
| ltree | 1.2 | data type for hierarchical tree-like structures |
| ltree_plpython3u | 1.0 | transform between ltree and plpython3u |
| moddatetime | 1.0 | functions for tracking last modification time |
| old_snapshot | 1.0 | utilities in support of old_snapshot_threshold |
| pageinspect | 1.11 | inspect the contents of database pages at a low level |
| pase | 0.0.1 | ant ai similarity search |
| pg_bigm | 1.2 | text similarity measurement and index searching based on bigrams |
| pg_buffercache | 1.4 | examine the shared buffer cache |
| pg_freespacemap | 1.2 | examine the free space map (FSM) |
| pg_jieba | 1.1.0 | a parser for full-text search of Chinese |
| pg_prewarm | 1.2 | prewarm relation data |
| pg_repack | 1.5.1-1 | Reorganize tables in PostgreSQL databases with minimal locks |
| pg_stat_statements | 1.10 | track planning and execution statistics of all SQL statements executed |
| pg_surgery | 1.0 | extension to perform surgery on a damaged relation |
| pg_trgm | 1.6 | text similarity measurement and index searching based on trigrams |
| pg_visibility | 1.2 | examine the visibility map (VM) and page-level visibility info |
| pg_walinspect | 1.0 | functions to inspect contents of PostgreSQL Write-Ahead Log |
| pgcrypto | 1.3 | cryptographic functions |
| pgrowlocks | 1.2 | show row-level locking information |
| pgstattuple | 1.5 | show tuple-level statistics |
| plperl | 1.0 | PL/Perl procedural language |
| plperlu | 1.0 | PL/PerlU untrusted procedural language |
| plpgsql | 1.0 | PL/pgSQL procedural language |
| plpython3u | 1.0 | PL/Python3U untrusted procedural language |
| pltcl | 1.0 | PL/Tcl procedural language |
| pltclu | 1.0 | PL/TclU untrusted procedural language |
| polar_audit | 1.0 | provides auditing functionality |
| polar_feature_utils | 1.0 | PolarDB feature utilization |
| polar_io_stat | 1.0 | polar io stat in multi dimension |
| polar_login_history | 1.0 | record user login information |
| polar_masking | 1.0.0 | provides data masking for polardb |
| polar_monitor | 1.0 | monitor functions for PolarDB |
| polar_monitor_preload | 1.0 | examine the polardb information |
| polar_parameter_manager | 1.1 | Extension to select parameters for manger. |
| polar_password_policy | 1.0 | create password policies and check user passwords based on the policies |
| polar_proxy_utils | 1.0 | Extension to provide operations about proxy. |
| polar_resource_manager | 1.0 | a background process that forcibly frees user session process memory |
| polar_smgrperf | 1.0 | smgr perf test extension |
| polar_sql_mapping | 1.0 | Record error sqls and mapping them to correct one |
| polar_stat_env | 1.0 | env stat functions for PolarDB |
| polar_vfs | 1.0 | polar virtual file system for different storage |
| polar_worker | 1.0 | polar_worker |
| postgres_fdw | 1.1 | foreign-data wrapper for remote PostgreSQL servers |
| refint | 1.0 | functions for implementing referential integrity (obsolete) |
| roaringbitmap | 0.5 | support for Roaring Bitmaps |
| seg | 1.4 | data type for representing line segments or floating-point intervals |
| sslinfo | 1.2 | information about SSL certificates |
| tablefunc | 1.0 | functions that manipulate whole tables, including crosstab |
| tcn | 1.0 | Triggered change notifications |
| tsm_system_rows | 1.0 | TABLESAMPLE method which accepts number of rows as a limit |
| tsm_system_time | 1.0 | TABLESAMPLE method which accepts time in milliseconds as a limit |
| unaccent | 1.1 | text search dictionary that removes accents |
| uuid-ossp | 1.1 | generate universally unique identifiers (UUIDs) |
| vector | 0.6.2 | vector data type and ivfflat and hnsw access methods |
| xml2 | 1.1 | XPath querying and XSLT |
PolarDB for Oracle
还有 PolarDB 的第二个分支,即 PolarDB for Oracle,它不是开源的。
Pigsty Pro 支持将 PolarDB for Oracle 作为 RDS 运行。
11.16.7 - OrioleDB
OrioleDB 是一个 PostgreSQL 存储引擎扩展,声称能够 提供 4 倍 OLTP 性能,没有 xid 环绕和表膨胀问题,并具有"云原生"(数据存储在 s3)能力。
OrioleDB 的最新版本基于 补丁版 PostgreSQL 17.0 和一个额外的扩展
您可以使用 pigsty 将 OrioleDB 作为 RDS 运行,它与 PG 17 兼容,在所有支持的 Linux 平台上都可用。 最新版本为 beta12 ,基于 PG 17_11 补丁。
快速开始
按照 Pigsty 标准安装 流程,使用 oriole 配置模板。
对于生产部署,请确保在运行 install 剧本之前修改 pigsty.yml 配置中的密码参数。
配置
使用
要使用 OrioleDB,您需要安装 orioledb_17 和 oriolepg_17 包(目前仅提供 RPM 版本)。
使用 pgbench 初始化类似 TPC-B 的表,包含 100 个仓库:
接下来,您可以使用 orioledb 存储引擎重建这些表并观察性能差异:
11.16.8 - OpenHalo
OpenHalo 是一个开源的 PostgreSQL 内核,提供 MySQL 线协议兼容性。
OpenHalo 基于 PostgreSQL 14.10 内核版本,提供与 MySQL 5.7.32-log / 8.0 版本的线协议兼容性。
Pigsty 在所有支持的 Linux 平台上为 OpenHalo 提供部署支持。
快速开始
使用 Pigsty 的 标准安装流程 和 mysql 配置模板。
对于生产部署,请确保在运行安装剧本之前修改 pigsty.yml 配置文件中的密码参数。
配置
使用
访问 MySQL 时,实际连接使用的是 postgres 数据库。请注意,MySQL 中的"数据库"概念实际上对应于 PostgreSQL 中的"Schema"。因此,use mysql 实际上使用的是 postgres 数据库内的 mysql Schema。
用于 MySQL 的用户名和密码与 PostgreSQL 中的相同。您可以使用标准的 PostgreSQL 方法管理用户和权限。
客户端访问
OpenHalo 提供 MySQL 线协议兼容性,默认监听端口 3306,允许 MySQL 客户端和驱动程序直接连接。
Pigsty 的 conf/mysql 配置默认安装 mysql 客户端工具。
您可以使用以下命令访问 MySQL:
目前,OpenHalo 官方确保 Navicat 可以正常访问此 MySQL 端口,但 Intellij IDEA 的 DataGrip 访问会导致错误。
修改
Pigsty 安装的 OpenHalo 内核基于 HaloTech-Co-Ltd/openHalo 内核进行了少量修改:
- 将默认数据库名称从
halo0root改回postgres - 从默认版本号中删除
1.0.前缀,恢复为14.10 - 修改默认配置文件以启用 MySQL 兼容性并默认监听端口
3306
请注意,Pigsty 不为使用 OpenHalo 内核提供任何保证。使用此内核时遇到的任何问题或需求应与原始供应商联系。
11.16.9 - Cloudberry
您可以部署和监控 Cloudberry 集群,这是 Greenplum 的一个分支。
要定义 Greenplum 集群,您需要指定以下参数:
我们正在等待 Apache Cloudberry 2.0 的官方发布,因此现在请勿在生产环境中使用
安装
要安装 cloudberry,您必须启用 gpsql 仓库模块:
配置
设置 pg_mode = gpsql 和额外的标识参数 pg_shard 和 gp_role。
11.16.10 - Supabase
最新的自托管教程请参阅:Supabase
Supabase 很好,拥有属于你自己的 supabase 则好上加好。 Pigsty 可以帮助您在自己的服务器上(物理机/虚拟机/云服务器),一键自建企业级 supabase —— 更多扩展,更好性能,更深入的控制,更合算的成本。
Pigsty 是 Supabase 官网文档上列举的三种自建部署之一:Self-hosting: Third-Party Guides
简短版本
准备 Linux,执行 Pigsty 标准安装 流程,选择 supabase 配置模板,依次执行:
安装完毕后,使用浏览器访问 8000 端口造访 Supa Studio,用户名 supabase,密码 pigsty。

目录
Supabase是什么?
Supabase 是一个 BaaS (Backend as Service),开源的 Firebase,是 AI Agent 时代最火爆的数据库 + 后端解决方案。 Supabase 对 PostgreSQL 进行了封装,并提供了身份认证,消息传递,边缘函数,对象存储,并基于 PG 数据库模式自动生成 REST API 与 GraphQL API。
Supabase 旨在为开发者提供一条龙式的后端解决方案,减少开发和维护后端基础设施的复杂性。 它能让开发者告别绝大部分后端开发的工作,只需要懂数据库设计与前端即可快速出活! 开发者只要用 Vibe Coding 糊个前端与数据库模式设计,就可以快速完成一个完整的应用。
目前,Supabase 是 PostgreSQL 开源生态 中人气最高的开源项目,在 GitHub 上已有 八万 Star。 Supabase 还为小微创业者提供了“慷慨”的免费云服务额度 —— 免费的 500 MB 空间,对于存个用户表,浏览数之类的东西绰绰有余。
为什么要自建?
既然 Supabase 云服务这么香,为什么要自建呢?
最直观的原因是是我们在《云数据库是智商税吗?》中提到过的:当你的数据/计算规模超出云计算适用光谱(Supabase:4C/8G/500MB免费存储),成本很容易出现爆炸式增长。 而且在当下,足够可靠的 本地企业级 NVMe SSD 在性价比上与 云端存储 有着三到四个数量级的优势,而自建能更好地利用这一点。
另一个重要的原因是 功能, Supabase 云服务的功能受限 —— 很多强力PG扩展因为多租户安全挑战与许可证的原因无法以云服务的形式。 故而尽管 扩展是 PostgreSQL 的核心特色,在 Supabase 云服务上也依然只有 64 个扩展可用。 而通过 Pigsty 自建的 Supabase 则提供了多达 437 个开箱即用的 PG 扩展。
此外,自主可控与规避供应商锁定也是自建的重要原因 —— 尽管 Supabase 虽然旨在提供一个无供应商锁定的 Google Firebase 开源替代,但实际上自建高标准企业级的 Supabase 门槛并不低。 Supabase 内置了一系列由他们自己开发维护的 PG 扩展插件,并计划将原生的 PostgreSQL 内核替换为收购的 OrioleDB,而这些内核与扩展在 PGDG 官方仓库中并没有提供。
这实际上是某种隐性的供应商锁定,阻止了用户使用除了 supabase/postgres Docker 镜像之外的方式自建,Pigsty 则提供开源,透明,通用的方案解决这个问题。 我们将所有 Supabase 自研与用到的 10 个缺失的扩展打成开箱即用的 RPM/DEB 包,确保它们在所有 主流Linux操作系统发行版 上都可用:
| 扩展 | 说明 |
|---|---|
pg_graphql |
提供PG内的GraphQL支持 (RUST),Rust扩展,由PIGSTY提供 |
pg_jsonschema |
提供JSON Schema校验能力,Rust扩展,由PIGSTY提供 |
wrappers |
Supabase提供的外部数据源包装器捆绑包,,Rust扩展,由PIGSTY提供 |
index_advisor |
查询索引建议器,SQL扩展,由PIGSTY提供 |
pg_net |
用 SQL 进行异步非阻塞HTTP/HTTPS 请求的扩展 (supabase),C扩展,由PIGSTY提供 |
vault |
在 Vault 中存储加密凭证的扩展 (supabase),C扩展,由PIGSTY提供 |
pgjwt |
JSON Web Token API 的PG实现 (supabase),SQL扩展,由PIGSTY提供 |
pgsodium |
表数据加密存储 TDE,扩展,由PIGSTY提供 |
supautils |
用于在云环境中确保数据库集群的安全,C扩展,由PIGSTY提供 |
pg_plan_filter |
使用执行计划代价过滤阻止特定查询语句,C扩展,由PIGSTY提供 |
同时,我们在 Supabase 自建部署中默认 安装绝大多数扩展,您可以参考可用扩展列表按需 启用。
同时,Pigsty 还会负责好底层 高可用 PostgreSQL 数据库集群,高可用 MinIO 对象存储集群的自动搭建,甚至是 Docker 容器底座的部署与 Nginx 反向代理,域名配置 与 HTTPS证书签发。 您可以使用 Docker Compose 拉起任意数量的无状态 Supabase 容器集群,并将状态存储在外部 Pigsty 自托管数据库服务中。
在这一自建部署架构中,您获得了使用不同内核的自由(PG 15-18,OrioleDB),加装 437 个扩展的自由,扩容与伸缩 Supabase / Postgres / MinIO 的自由, 免于数据库运维杂务的自由,以及免于供应商锁定,本地运行到地老天荒的自由。 而相比于使用云服务需要付出的代价,不过是准备服务器和多敲几行命令而已。
单节点自建快速上手
让我们先从单节点 Supabase 部署开始,我们会在后面进一步介绍多节点高可用部署的方法。
准备 一台全新 Linux 服务器,使用 Pigsty 提供的 supabase 配置模板执行 标准安装,
然后额外运行 docker.yml 与 app.yml 拉起无状态部分的 Supabase 容器即可(默认端口 8000/8433)。
在部署 Supabase 前请根据实际情况修改自动生成的 pigsty.yml 配置文件中的参数(域名与密码)
如果只是本地开发测试,可以先跳过,我们将在后面介绍如何通过修改配置文件来进一步定制。
如果配置无误,大约十分钟后,就可以在本地网络通过 http://<your_ip_address>:8000 访问到 Supabase Studio 图形管理界面了。
默认的用户名与密码分别是: supabase 与 pigsty。

在中国大陆地区,Pigsty 默认使用 1Panel 与 1ms 提供的 DockerHub 镜像站点下载 Supabase 相关镜像,可能会较慢。
你也可以自行配置 代理 与 镜像站 ,cd /opt/supabase; docker compose pull 手动拉取镜像。
我们亦提供包含完整离线安装方案的 Supabase 自建专家咨询服务。
如果你需要使用的对象存储功能,那么需要通过域名与 HTTPS 访问 Supabase,否则会出现报错。
对于严肃的生产部署,请 务必 修改所有默认密码!
自建关键技术决策
以下是一些自建 Supabase 会涉及到的关键技术决策,供您参考:
使用默认的单节点部署 Supabase 无法享受到 PostgreSQL / MinIO 的高可用能力。 尽管如此,单节点部署相比官方纯 Docker Compose 方案依然要有显著优势: 例如开箱即用的监控系统,自由安装扩展的能力,各个组件的扩缩容能力,以及提供兜底数据库时间点恢复能力等。
如果您只有一台服务器,或者选择在云服务器上自建,Pigsty 建议您使用外部的 S3 替代本地的 MinIO 作为对象存储,存放 PostgreSQL 的备份,并承载 Supabase Storage 服务。 这样的部署在故障时可以在单机部署条件下,提供一个兜底级别的 RTO (小时级恢复时长)/ RPO (MB级数据损失)容灾水平。
在严肃的生产部署中,Pigsty 建议使用至少3~4个节点的部署策略,确保 MinIO 与 PostgreSQL 都使用满足企业级高可用要求的多节点部署。 在这种情况下,您需要相应准备更多节点与磁盘,并相应调整 pigsty.yml 配置清单中的集群配置,以及 supabase 集群配置中的接入信息,使用高可用接入点访问服务。
Supabase 的部分功能需要发送邮件,所以要用到 SMTP 服务。除非单纯用于内网,否则对于严肃的生产部署,建议使用 SMTP 云服务。自建的邮件服务器发送的邮件容易被标记为垃圾邮件导致拒收。
如果您的服务直接向公网暴露,我们强烈建议您使用真正的域名与 HTTPS 证书,并通过 Nginx 门户 访问。
接下来,我们会依次讨论一些进阶主题。如何在单节点部署的基础上,进一步提升 Supabase 的安全性、可用性与性能。
进阶主题:安全加固
Pigsty基础组件
对于严肃的生产部署,我们强烈建议您修改 Pigsty 基础组件的密码。因为这些默认值是公开且众所周知的,不改密码上生产无异于裸奔:
grafana_admin_password:pigsty,Grafana管理员密码pg_admin_password:DBUser.DBA,PG超级用户密码pg_monitor_password:DBUser.Monitor,PG监控用户密码pg_replication_password:DBUser.Replicator,PG复制用户密码patroni_password:Patroni.API,Patroni 高可用组件密码haproxy_admin_password:pigsty,负载均衡器管控密码minio_secret_key:minioadmin,MinIO 根用户密钥- 此外,强烈建议您修改 Supabase 使用的 PostgreSQL 业务用户 密码,默认为
DBUser.Supa
以上密码为 Pigsty 组件模块的密码,强烈建议在安装部署前就设置完毕。
Supabase密钥
除了 Pigsty 组件的密码,你还需要 修改 Supabase 的密钥,包括
JWT_SECRETANON_KEYSERVICE_ROLE_KEYPG_META_CRYPTO_KEYDASHBOARD_USERNAMESupabase Studio Web 界面的默认用户名,默认为supabaseDASHBOARD_PASSWORDSupabase Studio Web 界面的默认密码,默认为pigsty
这里请您务必参照 Supabase教程:保护你的服务 里的说明:
- 生成一个长度超过 40 个字符的
JWT_SECRET,并使用教程中的工具签发ANON_KEY与SERVICE_ROLE_KEY两个 JWT。 - 使用教程中提供的工具,根据
JWT_SECRET以及过期时间等属性,生成一个ANON_KEYJWT,这是匿名用户的身份凭据。 - 使用教程中提供的工具,根据
JWT_SECRET以及过期时间等属性,生成一个SERVICE_ROLE_KEY,这是权限更高服务角色的身份凭据。 - 指定一个32个字符以上的随机字符串密钥
PG_META_CRYPTO_KEY,用于加密 Studio UI 与 meta 服务的交互 - 如果您使用的 PostgreSQL 业务用户使用了不同于默认值的密码,请相应修改 `POSTGRES_PASSWORD`` 的值
- 如果您的对象存储使用了不同于默认值的密码,请相应修改
S3_ACCESS_KEY``](https://github.com/pgsty/pigsty/blob/v3.7.0/conf/supabase.yml#L154) 与 [S3_SECRET_KEY`` 的值
Supabase 部分的凭据修改后,您可以重启 Docker Compose 容器以应用新的配置:
进阶主题:域名接入
如果你在本机或局域网内使用 Supabase,那么可以选择 IP:Port 直连 Kong 对外暴露的 HTTP 8000 端口访问 Supabase。
你可以使用一个内网静态解析的域名,但对于严肃的生产部署,我们建议您使用真域名 + HTTPS 来访问 Supabase。
在这种情况下,您的服务器应当有一个公网 IP 地址,你应当拥有一个域名,使用云/DNS/CDN 供应商提供的 DNS 解析服务,将其指向安装节点的公网 IP(可选默认下位替代:本地 /etc/hosts 静态解析)。
比较简单的做法是,直接批量替换占位域名(supa.pigsty)为你的实际域名,假设为 supa.pigsty.cc:
如果你没有事先配置好,那么重载 Nginx 和 Supabase 的配置生效即可:
修改后的配置应当类似下面的片段:
完整的域名/HTTPS 配置可以参考 证书管理 教程,您也可以使用 Pigsty 自带的本地静态解析与自签发 HTTPS 证书作为下位替代。
进阶主题:外部对象存储
您可以使用 S3 或 S3 兼容的服务,来作为 PGSQL 备份与 Supabase 使用的对象存储。这里我们使用一个 阿里云 OSS 对象存储作为例子。
Pigsty 提供了一个
terraform/spec/aliyun-meta-s3.tf模板, 可以用于在阿里云上拉起一台服务器,以及一个 OSS 存储桶。
首先,我们修改 all.children.supa.vars.apps.[supabase].conf 中 S3 相关的配置,将其指向阿里云 OSS 存储桶:
同样使用以下命令重载 Supabase 配置:
您同样可以使用 S3 作为 PostgreSQL 的备份仓库,在 all.vars.pgbackrest_repo 新增一个 aliyun 备份仓库的定义:
然后在 all.vars.pgbackrest_mehod 中指定使用 aliyun 备份仓库,重置 pgBackrest 备份:
Pigsty 会将备份仓库切换到外部对象存储上,更多备份配置可以参考 PostgreSQL 备份 文档。
进阶主题:使用SMTP
你可以使用 SMTP 来发送邮件,修改 supabase 应用配置,添加 SMTP 信息:
不要忘了使用 app.yml 来重载配置
进阶主题:真·高可用
经过这些配置,您拥有了一个带公网域名,HTTPS 证书,SMTP,PITR 备份,监控,IaC,以及 400+ 扩展的企业级 Supabase (基础单机版)。 高可用的配置请参考 Pigsty 其他部份的文档,如果您懒得阅读学习,我们提供手把手扶上马的 Supabase 自建专家咨询服务 —— ¥2000 元免去折腾与下载的烦恼。
单节点的 RTO / RPO 依赖外部对象存储服务提供兜底,如果您的这个节点挂了,外部 S3 存储中保留了备份,您可以在新的节点上重新部署 Supabase,然后从备份中恢复。 这样的部署在故障时可以提供一个最低标准的 RTO (小时级恢复时长)/ RPO (MB级数据损失)兜底容灾水平 兜底。
如果想要达到 RTO < 30s ,切换零数据丢失,那么需要使用多节点进行高可用部署,这涉及到:
- ETCD: DCS 需要使用三个节点或以上,才能容忍一个节点的故障。
- PGSQL: PGSQL 同步提交不丢数据模式,建议使用至少三个节点。
- INFRA:监控基础设施故障影响稍小,建议生产环境使用双副本
- Supabase 无状态容器本身也可以是多节点的副本,可以实现高可用。
在这种情况下,您还需要修改 PostgreSQL 与 MinIO 的接入点,使用 DNS / L2 VIP / HAProxy 等 高可用接入点
关于这些部分,您只需参考 Pigsty 中各个模块的文档进行配置部署即可。
建议您参考 conf/ha/trio.yml 与 conf/ha/safe.yml 中的配置,将集群规模升级到三节点或以上。
11.16.11 - FerretDB
FerretDB 是开源的 MongoDB 线协议兼容中间件,可将 PostgreSQL 作为 MongoDB 的直接替代后端。依赖 MongoDB 线协议的应用可以通过它无缝使用 PostgreSQL,在两个数据库生态之间建立桥梁。
启用 FerretDB 需要使用 FerretDB 修订的 documentdb 扩展;Pigsty 软件仓库也提供该扩展。此冻结版本中的最新组合为 FerretDB 2.7 与 DocumentDB 0.107.0。
快速上手
按照 Pigsty 的标准安装流程,使用 mongo 配置模板:
生产部署时,务必在运行安装剧本前修改 pigsty.yml 中的密码参数。
配置
使用
完整说明请参阅 FERRET 模块文档。
安装客户端工具
可以使用 MongoDB 命令行工具 MongoSH 访问 FerretDB。
先用 pig 添加 MongoDB 软件仓库,再通过 yum 或 apt 安装 mongosh:
连接 FerretDB
任何语言的 MongoDB 驱动都可以使用 MongoDB 连接串访问 FerretDB。以下为 mongosh 示例:
认证
可以使用不同用户登录,细节参阅 FerretDB:认证:
使用示例
连接 FerretDB 后,可以像使用 MongoDB 集群一样执行命令:
MongoDB 命令会转换为 SQL,并在底层 PostgreSQL 中执行:
如果不熟悉 MongoDB,可以参考同样适用于 FerretDB 的 MongoDB Shell CRUD 教程。
下面的 mongosh 脚本可用于生成简单的示例负载:
11.17 - 扩展
Pigsty 允许您通过三样东西来利用 Postgres 扩展生态系统的协同超能力:目录、仓库和 pig。
完整的 <span class="text-lg font-black text-emerald-500">437</span> 可用 PostgreSQL 扩展列表
提供 PostgreSQL 扩展的 APT/YUM 仓库
PostgreSQL 和扩展缺失的包管理器
如何获取、安装、配置、管理这些扩展?
v3.7.0 扩展目录共收录 437 个 PostgreSQL 扩展,且 PostgreSQL 18 是默认版本。
下表是归档中保留的 PG13–17 兼容性快照,并未记录最终 PG18 分项统计;PG18 请以 v3.7.0 软件包别名和发布说明为准。
| 发行版 | 全部 | PGDG | PIGSTY | CONTRIB | 其他 | 缺失 | PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| EL | 417 | 119 | 227 | 71 | 0 | 6 | 399 | 407 | 410 | 394 | 368 |
| Debian | 410 | 103 | 236 | 71 | 0 | 13 | 397 | 400 | 403 | 391 | 363 |
时间 地理 向量 搜索 分析 特性 语言 类型 工具 函数 管理 统计 安全 外部 兼容 数据
MIT ISC PostgreSQL BSD-0 BSD-2 BSD-3 Artistic Apache-2.0 MPL-2.0 GPL-2.0 GPL-3.0 LGPL-2.1 LGPL-3.0 AGPL-3.0 Timescale
使用方法
使用包别名下载和安装扩展
从 PGDG / Pigsty 仓库下载扩展
安装 Postgres 扩展包
配置扩展并设置预加载
从 PGDG / Pigsty 仓库下载扩展
安装 Postgres 扩展包
配置扩展并设置预加载
在数据库中创建 Postgres 扩展
升级 Postgres 扩展
卸载 Postgres 扩展
索引
11.17.1 - 快速开始
Pigsty 为 14 个主流 Linux 发行版提供了无与伦比的 437 扩展。
概述
步骤 1
[**下载**](#download-extension):要下载哪些扩展包
```yaml tab="config" title="定义要下载的扩展"
repo_extra_packages: [ postgis, timescaledb, vector ]
```
```bash tab="apply" title="下载包"
make repo
```
步骤 2
[**安装**](#install-extension):要安装哪些扩展
```yaml tab="config"
pg_extensions: [ postgis, pgvector, timescaledb ]
```
```bash tab="apply"
./pgsql.yml -t pg_ext # 安装扩展
```
步骤 3
[**加载**](#load-extension):要预加载哪些扩展
```yaml tab="config"
pg_libs: 'timescaledb, pg_stat_statements, auto_explain' # 将扩展添加到预加载库(并非所有扩展都需要此操作)
```
```bash tab="apply" title="编辑现有集群配置并重新加载"
pg edit-config --force -p shared_preload_libraries='timescaledb, pg_stat_statements, auto_explain'
```
步骤 4
[**创建**](#create-extension):在[数据库](/zh/docs/pgsql/db)中创建扩展
```yaml tab="config"
pg_databases:
- { name: meta ,extensions: [ postgis, timescaledb, vector ] }
```
```sql tab="apply" title="在现有数据库中创建扩展"
CREATE EXTENSION postgis CASCADE;
```
快速开始
您可以在配置清单中描述扩展,Pigsty 将为您下载、安装、配置和启用扩展。
此示例使 postgis、pgvector、timescaledb 开箱即用:
当您初始化此 PG 集群时,这些扩展将在 pg-meta 集群中为您提供。
这里是一个更复杂的示例:启动 Postgres 并带有自托管 supabase 所需的扩展:
下载并安装了 PG 17 的所有可用扩展,并加载和启用了所需的扩展。
11.17.2 - 软件包
管理扩展和包并不简单,这里有两个常见的扩展示例:

| 实体 | 示例 pgvector |
示例 postgis… |
|---|---|---|
| 扩展 | vector |
postgis, postgis_topology, postgis_raster,… |
| 包 | pgvector |
postgis |
| 操作系统包 | pgvector_17 | postgresql-16-postgis-3 |
| RPM/DEB | pgvector_17_0.8.0-1PGDG.rhel8.x86_64.rpm | postgresql-17-postgis-3_3.5.2+dfsg-1.pgdg22.04+1_amd64.deb |
要以最小的努力安装正确的 RPM / DEB,我们需要使用抽象层:包别名。
因此您可以通过指定"标准化"名称(如 pgvector 或 postgis)来安装这些扩展。
无需了解 PG 和操作系统版本、架构、扩展版本以及任何其他详细信息。
包别名 pkg 用于扩展下载和安装,但在数据库中 CREATE EXTENSION 时您必须使用扩展名称 ext(如 meta 数据库中的 vector)。
请注意,某些扩展需要显式预加载,如上述示例中的 timescaledb。
此外,所有扩展都被分类为 16 个主要类别,我们也为整个扩展类别提供别名 这样您就可以批量下载和安装它们,例如:
除了 olap 类别外,所有扩展都可以同时安装,在 olap 类别中,citus 与 hydra 冲突,pg_duckdb 与 pg_mooncake 冲突。
所以您可以下载所有扩展,但要一次安装一个。
11.17.3 - 下载
在 Pigsty 中,下载和安装扩展是两个独立的步骤。在 INFRA 模块安装期间,Pigsty 将所有必需的软件下载到本地机器上,并为整个部署创建本地 YUM/APT 仓库。
这种方法加速了安装过程,消除了冗余下载,移除了数据库节点访问互联网的需求,减少了网络流量,提高了交付可靠性,并确保了环境中版本的一致性——这些都是生产部署的最佳实践。
对于开发环境,直接从互联网仓库安装扩展也是可以接受的
快速开始
在 repo_packages 和 repo_extra_packages 中定义的包会在 Pigsty 安装期间自动下载到您的本地仓库。
对于 PostgreSQL 相关的包(内核和扩展),通常将它们放在 repo_extra_packages 中,而让 repo_packages 保持其特定于操作系统的全局默认值。
repo_extra_packages 的默认值是 [pgsql-main],这是一个别名,代表当前活跃主版本的核心 PostgreSQL 和关键扩展。
要添加特定扩展,只需将 Pigsty 扩展包名称(pkg)添加到此参数中。Pigsty 会自动为您的活跃 PG 版本和当前操作系统发行版下载适当的包。
要下载当前 PG 版本的所有可用扩展,添加所有 16 个扩展类别别名(如 rich 配置模板中所示):
或者,使用特定版本的别名来下载多个 PostgreSQL 版本的扩展:
要向本地仓库添加新扩展,修改上述参数并运行:
要在您环境中的所有其他节点上刷新仓库元数据,运行:
别名映射
PostgreSQL 拥有丰富的开源生态系统,在不同系统和架构中有众多包。
Pigsty 提供了一个抽象层,将 PostgreSQL 包分类为"别名",隐藏了系统、架构和 PG 版本之间的差异。
在 快速开始部分,我们使用了 pgsql-main 和 pgsql-core 等别名。这些别名根据您的系统和架构转换为特定的包名称。对于 EL 系统,pgsql-main 扩展为 postgresql$v* 内核包以及 pgvector_$v*、pg_repack_$v* 和 wal2json_$v* 扩展包。
$v 占位符被 pg_version 值(默认:18)替换以指向正确的版本。* 通配符扩展以包括所有包变体(例如 server、libs、contrib、devel)。Pigsty 自动处理这些细节。
可用包和别名的完整列表在 roles/node_id/vars/<os_package>.yml 中。以下是在所有支持的系统中可用的常用别名:
使用这些别名时,$v 占位符会被来自 pg_version(默认:18)的 PostgreSQL 主版本号替换。
要为不同的 PostgreSQL 版本下载包,可以:
- 更改
pg_version参数,或 - 通过将
pgsql-前缀替换为pg18-、pg17-、pg16-等来使用特定版本的别名。
并非所有扩展在所有系统上都可用。某些扩展在别名中被注释掉,因为它们:
- 在特定系统上不可用
- 具有大量依赖项(如
pl/R) - 依赖于商业软件(如
oracle_fdw) - 在最新的 PG 18 中不可用但在早期版本中可用
如果需要,您仍然可以手动添加这些扩展。
11.17.4 - 安装
Pigsty 依托标准的操作系统包管理器(yum/apt)来安装 PostgreSQL 扩展。
快速开始
为集群 pg-meta 安装在 pg_extensions 参数中明确指定的所有扩展:
或者通过类别别名全局安装所有扩展:
您也可以在这些别名中明确指定 PG 主版本:
同时安装所有扩展是可行的(除了在 olap 类别中的两个冲突)但不推荐。只需在 pg_extensions 参数中明确指定您需要的扩展。
配置
在 PGSQL 集群初始化期间,Pigsty 将自动安装在 pg_packages 和 pg_extensions 中指定的包(和别名)。
这两个参数都可以用来安装 PostgreSQL 相关的包。通常,pg_packages 用于全局指定应在环境中所有 PostgreSQL 集群上安装的包:如 PostgreSQL 内核、高可用代理(如 Patroni)、连接池(pgBouncer)、监控(pgExporter)等。
默认情况下,Pigsty 还在这里指定了 3 个重要扩展:pgvector、pg_repack 和 wal2json,分别用于向量搜索、膨胀管理和 CDC 变更提取。
同时,pg_extensions 通常用于为特定集群指定扩展。默认值是一个空列表,表示默认不会安装其他扩展。
一个重要的区别:通过 pg_packages 安装的包只确保存在,而通过 pg_extensions 安装的包会自动升级到最新可用版本。
当使用本地软件仓库时,这个区别并不重要。但是,当使用上游互联网仓库时,请仔细考虑这一点,并将您不希望自动升级的扩展移至 pg_packages。
安装
在 pg_extensions(和 pg_packages)中预定义的扩展将在集群置备期间安装。
要在已置备的 PostgreSQL 集群上安装新扩展:
首先,将扩展添加到 pg_extensions,然后执行 playbook 子任务:
注意,在 pg_extension 任务中指定的扩展插件默认将升级到您当前环境中的最新可用版本。
仓库
要安装扩展,您需要确保满足以下条件之一:
- 本地仓库:您已配置使用 Pigsty 的本地仓库,并且扩展已经下载到本地仓库。
- 在线仓库:您已在目标节点上直接配置了上游互联网仓库,并且这些节点上有互联网访问。
对于生产环境,我们建议使用 Pigsty 的本地软件仓库来统一管理和安装扩展:首先将扩展下载到本地仓库,然后从那里安装它们。 这确保了您环境中扩展版本的一致性,并防止数据库节点直接访问互联网。从本地仓库安装时您无需做任何事情,只需确保它们已下载到本地仓库。
对于开发环境,您可以选择直接使用上游互联网仓库以便于操作。使用以下命令在目标集群上添加互联网仓库并直接安装扩展:
包别名
在安装扩展时,用户可以使用扩展别名来指定扩展。
别名将被转换为当前活跃的 PG 主版本和操作系统环境。
并通过别名转换机制转换为相应的 RPM/DEB 包名称。
注意事项
- 有两个已知冲突:
citus和hydra是互斥的,因为 hydra 是 citus columnar 的分支,未重命名- 只从
pg_duckdb、pg_mooncake、duckdb_fdw中安装一个,它们都使用自己的 libduckdb
pgaudit在 el 系统的 pg 15- 版本中有不同的命名模式:pg16+ = pgaudit,pg15=pgaudit17,pg14=pgaudit16,pg13=pgaudit15,pg12=pgaudit14postgis在 el 包名中有自己的版本:默认为 postgis35,遗留 el7 为 postgis33
11.17.5 - 配置
虽然大多数用 SQL 编写的 PostgreSQL 扩展可以使用 CREATE EXTENSION 直接启用,但一些使用特殊 postgres 钩子的扩展在使用前需要额外的步骤来预加载它们。
预加载
大多数扩展都有一个或多个对应的动态库(.so、.dylib、.dll),其中一些在使用前需要预加载。
尝试在没有正确预加载的情况下 CREATE 这些扩展将导致错误。
错误配置的预加载库可能导致数据库重启/启动失败。
一些扩展可以在没有预加载的情况下部分工作,这意味着扩展功能的一部分可以直接使用,其余功能在预加载后可用。
要预加载扩展,将其添加到 shared_preload_libraries 并重启数据库服务器。
扩展目录 提供了需要动态预加载的扩展的完整列表。
配置
要在新 postgres 集群上配置预加载,可以使用 pg_libs 参数。
它将在 postgres 集群引导期间填充到 shared_preload_libraries 参数中。
此示例展示如何使用 pg_libs 参数指定预加载的扩展。
shared_preload_libraries 是一个以逗号分隔的扩展列表。
请注意,这仅在集群创建之前有效。之后,
您必须配置集群来更改现有集群上的 shared_preload_libraries 参数。(使用 patronictl、ALTER SYSTEM 等…)
如果您想手动配置预加载,您可以自己更改 postgresql.conf
默认值
pg_libs 的默认值是 pg_stat_statements, auto_explain,
它默认预加载这两个 Contrib 扩展,这两个扩展提供基本的可观测性:
auto_explain: 自动记录慢查询执行计划pg_stat_statements: 跟踪分组 SQL 语句的规划和执行统计信息
注意事项
预加载库是逐个加载的,因此 shared_preload_libraries 中扩展的顺序很重要,
以下是一些需要遵循的已知规则:
- 对于 STAT 扩展,在
pg_stat_statements之后添加它们以确保使用相同的 query_id。 timescaledb和citus应该放在shared_preload_libraries的开头- 如果您同时使用
citus和timescaledb,请将citus放在timescaledb之前。 - 对于 documentdb,使用
pg_documentdb和pg_documentdb_core作为库名称。 pg_search在 PostgreSQL 17 及更高版本中不需要预加载,但早期版本需要。
参数
一些扩展有可配置的参数,您可以在不同的地方管理它们。
pg_parameters: 写入/pg/data/postgresql.auto.conf- 您也可以在 patroni 模板 中自定义它们
- 或者使用 patronictl 动态更改它们
有关详细信息,请查阅每个扩展的官方文档。
11.17.6 - 创建
快速开始
您可以使用 CREATE EXTENSION 语句启用(创建)扩展:
一些扩展依赖于其他扩展。
在这种情况下,您可以先安装依赖项
或使用 CASCADE 子句一次安装所有依赖项。
您也可以使用 Pigsty 配置扩展,它会自动为您创建扩展。
配置
扩展(数据库逻辑对象)在逻辑上是 PostgreSQL 数据库 的一部分。
在 Pigsty 中,您可以使用 pg_databases 参数指定在数据库中创建哪些扩展。
但您可以使用 object 格式显式指定扩展详细信息,比如在特定模式中创建它们。
或安装特定版本。这里是一个完整的示例(自托管 supabase):
定义扩展
extensions 字段是要在数据库中创建的扩展(名称或对象)列表。
它将在 dbsu 的 search_path 中的第一个模式下创建(通常是 public 模式)。
这里,数据库对象中的 extensions 是一个列表,其中每个元素可以是:
- 表示扩展名称的简单字符串,如
vector - 或者,可以使用包含以下字段的字典:
name:扩展名称,必需,注意它可能与扩展包名称不同。schema:安装扩展的模式,可选,默认为当前 dbsu search_path 中的第一个模式,通常是默认的public。version:指定扩展版本,可选,默认为最新版本,很少使用。
如果数据库尚不存在,这里定义的扩展将在通过 Pigsty 创建集群或创建数据库时自动创建。
重新创建具有非平凡基线模式的数据库可能很危险(如果您在那里放置一些 DROP)
因此,对于现有集群/数据库,建议使用您自己的模式迁移工具来管理扩展。(pgadmin、psql、bytebase、flyway、sqlitch…)
但将它们列在配置清单中用于记录保存目的是有帮助的。(这样如果您想分叉这个集群,它包含这些扩展)
默认扩展
Pigsty 默认创建一些内置扩展和一个特殊的 pg_repack。
这些扩展由 pg_default_extensions 定义,默认在 template1 数据库和 postgres 数据库中创建。
新创建的数据库将从 template1 继承这些扩展,因此您无需再次创建它们。
由 pg_default_schemas 定义的一个额外默认模式 monitor 也默认创建。
它用于包含监控相关的扩展、表、函数和视图。
在 Pigsty 中默认可用的有三个第三方扩展:
| 扩展 | 作用 | 位置 |
|---|---|---|
pg_repack |
在线膨胀控制工具 | 在 pg_default_extensions 中 |
wal2json |
JSON 格式的变更数据捕获 | 无 DDL 扩展,安装意味着可用 |
vector |
向量数据类型和索引 | 在 pg_databases 中作为示例 |
pg_repack 扩展是在线维护膨胀表的重要工具。
vector 是用于 RAG 的非常流行的扩展,
它默认安装(在 pgsql-main 别名中)并在大多数配置模板的占位符 meta 数据库中创建。
wal2json 是用于变更数据捕获(CDC)的另一个重要扩展。它默认安装,但它是一个无 DDL 的扩展,
因此您无需显式 CREATE 它。
无 DDL 扩展
无 DDL 扩展不需要 CREATE EXTENSION 命令即可工作
PostgreSQL 扩展通常由三部分组成:必需的控制文件、可选的 SQL 文件和可选的库。
如果扩展没有 SQL 文件,则不需要 CREATE EXTENSION 命令。
| 组件 | 描述 | 必需 |
|---|---|---|
| 控制文件 | 关键元数据,名称、依赖项、模式、版本… | 必需 |
| SQL 文件 | SQL DDL 语句、类型、函数等… | 可选 |
| 库文件 | 二进制共享库(.so、.dylib、.dll) |
可选 |
由于 SQL / LIB 文件是可选的,有四种可能的扩展类型组合:
| LOAD / DDL | 需要 CREATE EXTENSION |
不需要 CREATE EXTENSION |
|---|---|---|
需要 LOAD |
使用钩子的扩展 | 无头扩展 |
不需要 LOAD |
不使用钩子的扩展 | 逻辑解码输出插件 |
11.17.7 - 更新
要更新现有扩展,您需要首先使用操作系统的包管理器更新 RPM/DEB 包,
然后在 PostgreSQL 中使用 ALTER EXTENSION ... UPDATE 将扩展更改为新版本。
您可以使用以下命令升级扩展包
在 pg_extensions 中列出的所有扩展将在 pgsql.yml playbook 执行期间升级。
升级扩展
在 pg_extensions 中列出的扩展(包别名)将通过 pgsql.yml 的 pg_ext 子任务升级:
此 playbook 将自动安装您当前环境中可用的最新版本的扩展 RPM/DEB 包。
(从构建的本地仓库或直接通过互联网)。
您也可以直接使用 Linux 系统的 yum/apt upgrade 命令升级扩展,但您需要指定完整的包名称:
Pigsty 的 pig CLI 也可以帮助您完成此操作,无需指定完整包名称的负担:
更改扩展
执行 ALTER EXTENSION ... UPDATE SQL 命令将扩展更新到新版本:
如果省略 TO new_version 子句,扩展将更新到可用的最新版本。
11.17.8 - 移除
移除扩展
要卸载扩展,您通常需要运行 DROP EXTENSION SQL 语句:
如果其他扩展或数据库对象依赖于此扩展,您需要先移除这些依赖项才能卸载扩展。
或者使用 CASCADE 选项一次性移除所有依赖:
CASCADE 选项将删除所有依赖于此扩展的对象,
包括数据库对象、函数、视图等。请谨慎使用!
某些扩展没有 DDL,这些扩展不需要 DROP EXTENSION 语句来卸载。
相反,您可以简单地从 shared_preload_libraries(如果已配置)中移除扩展并卸载包。
请参考无 DDL 扩展部分了解更多详细信息。
移除加载
如果您使用的扩展需要动态加载(修改 shared_preload_libraries 参数),您需要首先重新配置 shared_preload_libraries 参数。
从 shared_preload_libraries 中移除扩展名称,并重启数据库集群以使更改生效。
对于需要动态加载的扩展,请参考需要加载的扩展列表。
卸载包
在从集群中的所有数据库中移除扩展(逻辑对象)后,您可以安全地卸载扩展的软件包。Ansible 命令可以帮助您方便地执行此操作:
您也可以使用 pig,或直接使用 apt/yum 命令来卸载。
如果您不知道扩展包名称,可以参考扩展列表或查看在 roles/node_id/vars 中定义的扩展包名称映射。
12 - 基础设施
架构、核心概念、身份管理
配置基础设施模块,并使用多个基础设施节点。
使用 57+ 参数自定义基础设施组件
管理本地仓库、nginx 门户、域名、证书等
可在此模块中使用的 Ansible 剧本
仪表板、指标、记录和告警规则。
关于基础设施模块的常见问题
12.1 - 架构
标准 Pigsty 部署包含 INFRA 模块,默认提供以下服务:

这些组件为生产级 PostgreSQL 服务提供必要的基础设施。
| 组件 | 端口 | 域名 | 说明 |
|---|---|---|---|
nginx |
80 |
h.pigsty |
Web 服务入口与 YUM/APT 仓库 |
alertmanager |
9059 |
a.pigsty |
告警聚合与投递 |
prometheus |
9058 |
p.pigsty |
监控时序数据库 |
grafana |
3000 |
g.pigsty |
可视化平台 |
loki |
3100 |
- | 日志收集服务器 |
pushgateway |
9091 |
- | 收集一次性任务指标 |
blackbox_exporter |
9115 |
- | ICMP、TCP、HTTP 探测 |
dnsmasq |
53 |
- | 可选 DNS 服务器 |
chronyd |
123 |
- | 可选 NTP 时间服务器 |
如果不需要这些组件,可使用最小化安装,在不安装 INFRA 模块的情况下部署高可用 PostgreSQL。
- Nginx:本地仓库 Web 服务器及其他 Web UI 的反向代理
- Grafana:指标、仪表板和数据分析的可视化平台
- Loki:通过 Grafana 查询的集中日志系统
- Prometheus:采集、保存指标并计算告警的时序数据库
- AlertManager:聚合、静默并投递告警
- PushGateway:接收一次性任务与批处理任务指标
- BlackboxExporter:探测节点 IP 与 VIP 的可达性
- DNSMASQ:解析 Pigsty 内部域名
- Chronyd:保持节点时间同步
INFRA 并非高可用 PostgreSQL 的硬依赖,例如最小化安装 就会省略它。但它提供生产集群通常需要的支撑服务,因此大多数部署都建议保留。
如果已有 Nginx、本地仓库、监控、DNS 或 NTP 基础设施,可以禁用对应组件, 并通过 INFRA 配置 接入既有系统。
Nginx
Nginx 是 Pigsty 所有 Web UI 的入口,默认监听 HTTP 80 与 HTTPS 443。
它代理 Grafana、Prometheus、AlertManager、HAProxy 控制台等 Web UI,同时提供
本地 YUM/APT 仓库等静态资源。
Nginx 根据 infra_portal 生成配置:
其他服务会引用这些 endpoint:日志发送至 Loki,Grafana 数据源注册到 Grafana,
告警则投递给 AlertManager。Nginx 也可作为本地文件服务器或通用反向代理,并可
使用自签名证书或真实 HTTPS 证书。
本地软件仓库
安装时,Pigsty 可在 INFRA 节点创建本地软件仓库,以加速后续安装。仓库位于
/www/pigsty,由 Nginx 通过 http://h.pigsty/pigsty 提供服务。
离线软件包就是预先构建好的仓库目录压缩包。如果
/www/pigsty 存在并带有 /www/pigsty/repo_complete 标记,Pigsty 会跳过上游
下载,适用于离线环境。
仓库定义文件为 /www/pigsty.repo,可通过以下命令获取:
也可以不经过 Nginx,直接使用文件仓库:
仓库参数参阅:INFRA - REPO。
Prometheus
Prometheus 是 Pigsty v3.7 的监控时序数据库,监听 9058,可通过 IP:9058 或
http://p.pigsty 访问。它负责:
- 通过带身份标签的本地静态文件发现服务;
- 拉取、预处理并保存指标;
- 计算告警规则并将告警发送给 AlertManager。
AlertManager
AlertManager 监听 9059(IP:9059 或 http://a.pigsty),负责接收、聚合、
静默和路由 Prometheus 告警。发送邮件等通知需要额外配置。
Prometheus、AlertManager、PushGateway 与 BlackboxExporter 参数参阅: INFRA - PROMETHEUS。
Grafana
Grafana 监听 3000(IP:3000 或 http://g.pigsty)。Pigsty 的监控以仪表板和
URL 导航为核心,可在全局、集群、实例、数据库和对象之间快速下钻或上卷。
Pigsty 还预装 ECharts 等可视化插件,因此 Grafana 也可用于低代码数据应用。
Loki 在 3100 端口保存日志,节点上的 Promtail 将日志发送到 Loki。
参数参阅:INFRA - GRAFANA 与 INFRA - Loki。
Ansible
Ansible 会在引导时安装到 管理节点。INFRA 节点上的 Ansible 通常不会被 使用,但当管理节点不可用时可作为备用控制入口。
DNSMASQ
DNSMASQ 为 Pigsty 内部域名提供解析,其他模块会将域名记录注册到 INFRA 的
DNSMASQ。记录保存在所有 INFRA 节点的 /etc/hosts.d/。
参数参阅:INFRA - DNS。Pigsty 内部仍主要使用
/etc/hosts 静态记录,因此 DNSMASQ 只是便利功能。
Chronyd
Chronyd 用于保持所有节点时间同步。参数参阅: NODE - NTP。如果已有 NTP 服务,可以不启用它。
12.2 - 配置
INFRA 模块主要提供监控基础设施,对于 PostgreSQL 服务是 可选的。
除非您在其他地方手动配置了对 INFRA 节点的 DNS/NTP 服务依赖,否则 INFRA 模块的故障通常不会影响 PostgreSQL 数据库集群的正常运行。
在大多数情况下,单个 INFRA 节点足以满足典型场景。对于有更高要求的生产环境,我们建议使用 2-3 个 INFRA 节点以实现高可用性。
为了提高资源利用率,PostgreSQL 高可用性通常依赖于 ETCD 模块,该模块可以与 INFRA 模块共享节点。
使用超过 3 个 INFRA 节点提供的好处有限,但您可以使用更多 ETCD 节点(例如 5 个)来增强 DCS 服务的可用性和可靠性。
示例
要在节点上安装 INFRA 模块,首先将节点 IP 添加到 清单 中的 infra 组,并为它们分配一个 Infra 实例编号 infra_seq。
默认情况下,单个 INFRA 节点配置可以满足大多数要求。所有配置模板都包含默认的 infra 组定义:
在 配置 期间,infra 组中的 10.10.10.10 IP 占位符将被替换为 当前节点的主 IP 地址,这意味着 INFRA 模块将安装在当前节点上。
然后使用 infra.yml playbook 在节点上初始化 INFRA 模块。
更多节点
要配置两个 INFRA 节点,请将新 IP 添加到 infra.hosts:
要配置三个 INFRA 节点并使用自定义集群/节点参数:
高可用性
Infra 模块中的大多数组件是"无状态/共享状态"的。对于这些组件,高可用性主要需要解决负载均衡问题。
Infra 组件负载均衡可以通过两种方法实现:Keepalived L2 VIP 或 HAProxy 四层负载均衡。
如果您的网络环境支持二层连接,您可以使用 Keepalived L2 VIP 实现高可用性:
除了配置像 vip_address 这样的 VIP 相关参数外,您还需要在 infra_portal 中修改 Infra 服务的端点。
12.3 - 参数
Pigsty 基础设施组件的参数:本地 YUM 仓库、Nginx、DNSMasq、Prometheus、Grafana、Loki、AlertManager、PushGateway、Blackbox Exporter 等。
本模块共有 9 个部分,57 个参数。
META:基础设施元数据CA:自签名 CAINFRA_ID:门户和身份REPO:本地 YUM/APT 仓库INFRA_PACKAGE:要安装的包NGINX:Nginx Web 服务器DNS:DNSMasq 域名服务器PROMETHEUS:Prometheus、AlertManager、PushGateway 和 Blackbox ExporterGRAFANA:Grafana,可视化平台LOKI:Loki,日志服务器
参数
| 名称 | 部分 | 类型 | 级别 | 注释 |
|---|---|---|---|---|
version |
META |
string |
G | pigsty 版本字符串 |
admin_ip |
META |
ip |
G | 管理员节点 IP 地址 |
region |
META |
enum |
G | 上游镜像区域:default、china、europe |
proxy_env |
META |
dict |
G | 下载包时的全局代理环境 |
ca_create |
CA |
bool |
G | CA 缺失时创建,默认为 true |
ca_cn |
CA |
string |
G | CA 通用名称,固定为 pigsty-ca |
cert_validity |
CA |
interval |
G | 证书有效期,默认 20 年 |
infra_seq |
INFRA_ID |
int |
I | 基础设施节点身份,必需 |
infra_portal |
INFRA_ID |
dict |
G | 通过门户暴露的基础设施服务 |
repo_enabled |
REPO |
bool |
G/I | 在此基础设施节点上创建 yum 仓库? |
repo_home |
REPO |
path |
G | 仓库主目录,默认 /www |
repo_name |
REPO |
string |
G | 仓库名称,默认为 pigsty |
repo_endpoint |
REPO |
url |
G | 通过域名或 IP:端口访问此仓库的接入点 |
repo_remove |
REPO |
bool |
G/A | 移除现有上游仓库 |
repo_modules |
REPO |
string |
G/A | 在 repo_upstream 中安装哪些仓库模块 |
repo_upstream |
REPO |
upstream[] |
G | 从哪里下载上游包 |
repo_packages |
REPO |
string[] |
G | 包含哪些包 |
repo_extra_packages |
REPO |
string[] |
G/C/I | 要包含的额外包 |
repo_url_packages |
REPO |
string[] |
G | 来自 URL 的额外包 |
infra_packages |
INFRA_PACKAGE |
string[] |
G | 要在基础设施节点上安装的包 |
infra_packages_pip |
INFRA_PACKAGE |
string |
G | 为基础设施节点安装的 pip 包 |
nginx_enabled |
NGINX |
bool |
G/I | 在此基础设施节点上启用 nginx? |
nginx_exporter_enabled |
NGINX |
bool |
G/I | 在此基础设施节点上启用 nginx_exporter? |
nginx_sslmode |
NGINX |
enum |
G | nginx SSL 模式?disable、enable、enforce |
nginx_cert_validity |
NGINX |
duration |
G | nginx 自签名证书有效期,默认 397 天 |
nginx_home |
NGINX |
path |
G | nginx 内容目录,默认 /www |
nginx_port |
NGINX |
port |
G | nginx 监听端口,默认 80 |
nginx_ssl_port |
NGINX |
port |
G | nginx SSL 监听端口,默认 443 |
nginx_navbar |
NGINX |
index[] |
G | nginx 索引页导航链接 |
certbot_sign |
NGINX |
bool |
G/A | 设置期间使用 certbot 签名 nginx 证书? |
certbot_email |
NGINX |
string |
G/A | certbot 邮箱地址,用于免费 SSL |
certbot_options |
NGINX |
string |
G/A | certbot 额外选项 |
dns_enabled |
DNS |
bool |
G/I | 在此基础设施节点上设置 dnsmasq? |
dns_port |
DNS |
port |
G | DNS 服务器监听端口,默认 53 |
dns_records |
DNS |
string[] |
G | 由 dnsmasq 解析的动态 DNS 记录 |
prometheus_enabled |
PROMETHEUS |
bool |
G/I | 在此基础设施节点上启用 prometheus? |
prometheus_port |
PROMETHEUS |
port |
G | prometheus 监听端口号,默认为 9058 |
prometheus_clean |
PROMETHEUS |
bool |
G/A | 初始化期间清理 prometheus 数据? |
prometheus_data |
PROMETHEUS |
path |
G | prometheus 数据目录,默认 /data/prometheus |
prometheus_sd_dir |
PROMETHEUS |
path |
G | prometheus 文件服务发现目录 |
prometheus_sd_interval |
PROMETHEUS |
interval |
G | prometheus 目标刷新间隔,默认 5 秒 |
prometheus_scrape_interval |
PROMETHEUS |
interval |
G | prometheus 抓取和评估间隔,默认 10 秒 |
prometheus_scrape_timeout |
PROMETHEUS |
interval |
G | prometheus 全局抓取超时,默认 8 秒 |
prometheus_options |
PROMETHEUS |
arg |
G | prometheus 额外服务器选项 |
pushgateway_enabled |
PROMETHEUS |
bool |
G/I | 在此基础设施节点上设置 pushgateway? |
pushgateway_options |
PROMETHEUS |
arg |
G | pushgateway 额外服务器选项 |
blackbox_enabled |
PROMETHEUS |
bool |
G/I | 在此基础设施节点上设置 blackbox_exporter? |
blackbox_options |
PROMETHEUS |
arg |
G | blackbox_exporter 额外服务器选项 |
alertmanager_enabled |
PROMETHEUS |
bool |
G/I | 在此基础设施节点上设置 alertmanager? |
alertmanager_port |
PROMETHEUS |
port |
G | alertmanager 监听端口,默认 9059 |
alertmanager_options |
PROMETHEUS |
arg |
G | alertmanager 额外服务器选项 |
exporter_metrics_path |
PROMETHEUS |
path |
G | exporter 指标路径,默认 /metrics |
exporter_install |
PROMETHEUS |
enum |
G | 如何安装 exporter?none、yum、binary |
exporter_repo_url |
PROMETHEUS |
url |
G | 如果通过 yum 安装 exporter 的仓库文件 URL |
grafana_enabled |
GRAFANA |
bool |
G/I | 在此基础设施节点上启用 grafana? |
grafana_clean |
GRAFANA |
bool |
G/A | 初始化期间清理 grafana 数据? |
grafana_admin_username |
GRAFANA |
username |
G | grafana 管理员用户名,默认 admin |
grafana_admin_password |
GRAFANA |
password |
G | grafana 管理员密码,默认 pigsty |
loki_enabled |
LOKI |
bool |
G/I | 在此基础设施节点上启用 loki? |
loki_clean |
LOKI |
bool |
G/A | 是否移除现有 loki 数据? |
loki_data |
LOKI |
path |
G | loki 数据目录,默认 /data/loki |
loki_retention |
LOKI |
interval |
G | loki 日志保留期,默认 15 天 |
META
本部分包含当前 Pigsty 部署的元数据,如版本字符串、管理员节点 IP 地址、仓库镜像 region 和下载包时的 HTTP(S) 代理。
version
类型:string,级别:G
pigsty 版本字符串
默认值:v3.7.0
它将用于 pigsty 内省和内容渲染。
admin_ip
类型:ip,级别:G
管理员节点 IP 地址
默认值:10.10.10.10
具有此 IP 地址的节点将被视为管理员节点,通常指向安装 Pigsty 的第一个节点。
默认值 10.10.10.10 是一个占位符,将在 配置 过程中被替换
此参数被许多其他参数引用,例如:
确切的字符串 ${admin_ip} 将被替换为上述参数的实际 admin_ip。
region
类型:enum,级别:G
上游镜像区域:default、china、europe
默认值:default
如果设置了除 default 以外的区域,并且在 repo_upstream.[repo].baseurl 中有相应的条目,它将被使用而不是 default。
例如,如果使用 china,pigsty 将使用在 repo_upstream 中指定的中国镜像(如果适用)。
proxy_env
类型:dict,级别:G
下载包时的全局代理环境
默认值:
在受限制的生产环境中或当您的互联网访问被阻止时(例如中国大陆),使用 HTTP 代理非常重要。
请注意,如果使用 Docker 模块,代理服务器配置也将写入 Docker 守护程序配置文件。
请注意,如果在 ./configure 期间指定了 -x 参数,当前环境中的代理配置信息将自动填入生成的 pigsty.yaml 文件。
CA
Pigsty 使用自签名 CA;高级安全功能依赖它。
ca_create
类型:bool,级别:G
默认值为 true。ca 角色仅在 files/pki/ca/ca.key 与
files/pki/ca/ca.crt 缺失时创建 CA,已有 CA 始终复用。若要使用自行
提供的密钥与证书,可设为 false;此时密钥缺失会立即中止。
ca_cn
类型:string,级别:G
CA 通用名称,不建议修改,默认值为 pigsty-ca。
可使用 openssl x509 -text -in /etc/pki/ca.crt 检查。
cert_validity
类型:interval,级别:G
证书有效期,默认值为 7300d(20 年)。
INFRA_ID
基础设施身份和门户定义。
infra_seq
类型:int,级别:I
基础设施节点身份,必需,没有默认值,您必须明确分配它。
infra_portal
类型:dict,级别:G
通过门户暴露的基础设施服务。
默认值将通过相应的域名通过 nginx 暴露首页、grafana、prometheus、alertmanager。
每个记录由键和值字典组成,其中 name 是键,表示组件名称,值是可以配置以下参数的对象:
每个记录由键和值字典组成,其中 name 是键,表示组件名称,值是可以配置以下参数的对象:
每个记录由键和值字典组成,其中 name 是键,表示组件名称,值是可以配置以下参数的对象:
name:必需,指定 Nginx 服务器的名称- 默认记录:home、grafana、prometheus、alertmanager、blackbox、loki 是固定名称,请不要修改它们。
- 用作 Nginx 配置文件名的一部分,对应配置文件:
/etc/nginx/conf.d/<name>.conf - 没有域字段的 Nginx 服务器不会生成配置文件,但将用作引用。
domain:可选,当服务需要通过 Nginx 对外暴露时,它是一个必需字段,指定使用的域名- 在 Pigsty 自签名 Nginx HTTPS 证书中,域名将添加到 Nginx SSL 证书的 SAN 字段
- Pigsty 网页交叉引用将使用此处的默认域名
endpoint:通常用作 path 的替代,指定上游服务器地址。设置 endpoint 表示这是一个反向代理服务器- 在配置中,
${admin_ip}可以用作占位符,并将在部署期间动态替换为 admin_ip - 默认反向代理服务器使用 endpoint.conf 作为配置模板
- 反向代理服务器还可以配置 websocket 和 schema 参数
- 在配置中,
path:通常用作 endpoint 的替代,指定本地文件服务器路径。设置 path 意味着这是一个本地 Web 服务器- 本地 Web 服务器使用 path.conf 作为配置模板
- 本地 Web 服务器还可以配置 index 参数,是否启用文件索引页
certbot:Certbot 证书名称,如果配置,将使用 Certbot 申请证书- 如果多个服务器指定相同的 certbot,Pigsty 将合并证书申请,最终证书名称将是此 certbot 的名称
cert:证书文件路径,如果配置,将覆盖默认证书路径key:证书密钥文件路径,如果配置,将覆盖默认证书密钥路径websocket:是否启用 WebSocket 支持- 只有反向代理服务器可以配置此参数,如果启用它将允许上游使用 WebSocket 连接
schema:上游服务器使用的协议,如果配置,将覆盖默认协议- 默认是 http,如果配置为 https 将强制 HTTPS 连接到上游服务器
index:是否启用文件索引页- 只有本地 Web 服务器可以配置此参数,如果启用它将启用 autoindex 配置以自动为目录生成索引页
log:Nginx 日志文件路径- 如果指定,访问日志将写入此文件,否则将根据服务器类型使用默认日志文件
- 反向代理服务器使用
/var/log/nginx/<name>.log作为默认日志文件路径 - 本地 Web 服务器使用默认访问日志
conf:Nginx 配置文件路径- 明确指定要使用的配置模板文件,位于 roles/infra/templates/nginx 或 templates/nginx 目录
- 如果未指定此参数,将使用默认配置模板,位于 roles/infra/templates/nginx 或 templates/nginx 目录
config:Nginx 配置代码块- 直接注入到 Nginx Server 配置块的配置文本
enforce_https:将 HTTP 重定向到 HTTPS- 全局配置可以通过 nginx_sslmode: enforce 指定
- 此配置不影响默认主页服务器,它将始终同时监听端口 80 和 443 以确保兼容性。
REPO
本部分是关于本地软件仓库的。Pigsty 在初始化基础设施节点时将创建一个本地软件仓库(APT/YUM)。
在初始化过程中,Pigsty 将从互联网上游仓库(由 repo_upstream 指定)下载所有包及其依赖项(由 repo_packages 指定)到 {{ nginx_home }} / {{ repo_name }}(默认为 /www/pigsty),所有依赖软件的总大小约为 1GB。
创建本地仓库时,如果目录已经存在并且目录中有名为 repo_complete 的标记文件,Pigsty 将跳过软件下载阶段。
如果某些包的下载速度太慢,您可以通过使用 proxy_env 配置条目设置下载代理或直接下载预打包的 离线包 来完成初始下载,这本质上是在同一操作系统上构建的本地软件源。
repo_enabled
类型:bool,级别:G/I
在此基础设施节点上创建 YUM 仓库?默认值:true
如果您有多个基础设施节点,您可以在其他备用节点上禁用 YUM 仓库以减少互联网流量。
repo_home
类型:path,级别:G
仓库主目录,默认 /www
repo_name
类型:string,级别:G
仓库名称,默认为 pigsty,不建议更改此值
repo_endpoint
类型:url,级别:G
通过域名或 IP:端口访问此仓库的接入点,默认值:http://${admin_ip}:80
如果您更改了 nginx_port 或 nginx_ssl_port,或使用与管理员节点不同的基础设施节点,请相应调整此参数。
${admin_ip} 将在运行时被替换为实际的 admin_ip。
repo_remove
类型:bool,级别:G/A
移除现有上游仓库,默认值:true
如果您想保留现有上游仓库,请将此值设置为 false。
repo_modules
类型:string,级别:G/A
在 repo_upstream 中安装哪些仓库模块,默认值:infra,node,pgsql
这是一个逗号分隔的值字符串,用于过滤 repo_upstream 中具有相应 module 字段的条目。
对于 Ubuntu/Debian 用户,您可以将 redis 添加到列表中:infra,node,pgsql,redis
repo_upstream
类型:upstream[],级别:G
此参数定义 Pigsty 的上游软件仓库。它没有默认值;您可以明确指定它,或者如果您想使用默认值则留空。
留空时,Pigsty 将根据您的操作系统使用在 roles/node_id/vars 中定义的 repo_upstream_default 的默认值。
对于 EL(8、9、10)系统,默认值为:
对于 Debian(11,12,13)或 Ubuntu(22.04, 24.04)系统,默认值为:
repo_packages
类型:string[],级别:G
此参数是一个字符串数组,每个字符串是用空格分隔的软件包列表,指定要包含和下载哪些包。
此参数没有默认值,您可以明确指定它,或者如果您想使用默认值则留空。
留空时,Pigsty 将根据您的操作系统使用在 roles/node_id/vars 中定义的 repo_packages_default 的默认值。
repo_packages 中的每个元素将根据上述文件中定义的 package_map 翻译为特定操作系统发行版版本的包名称列表。
例如,在 EL 系统上,它将被翻译为:
在 Debian/Ubuntu 系统上,它将被翻译为:
按照惯例,repo_packages 通常包括与 PostgreSQL 主版本无关的软件包(如 Infra、Node 和 PGDG Common),而与 PostgreSQL 主版本相关的软件包(内核、扩展)通常在 repo_extra_packages 中指定,以便于在 PG 主版本之间切换。
repo_extra_packages
类型:string[],级别:G/C/I
此参数与 repo_packages 相同,但用于需要下载的额外软件包(通常是 PostgreSQL 版本特定的包)。
默认值是空列表。您可以在集群和实例级别覆盖它以指定需要下载的额外软件包。
如果未明确定义此参数,Pigsty 将从 roles/node_id/vars 中定义的 repo_extra_packages_default 加载默认值,即:
repo_packages 中的每个元素将根据上述文件中定义的 package_map 翻译为特定操作系统发行版版本的包名称列表。
例如,在 EL 系统上,它将被翻译为:
在 Debian/Ubuntu 系统上,它将被翻译为:
这里 $v 将被实际的 PostgreSQL 主版本号 pg_version 替换,所以您可以在这里添加任何 PG 版本相关的包,Pigsty 将为您下载它们。
repo_url_packages
类型:object[] | string[],级别:G
来自 URL 的额外包,默认值:[]
您可以在此参数中使用对象列表或字符串列表,在后一种情况下,Pigsty 将使用 URL 基名作为文件名。
请注意,如果 region 设置为 china,pigsty.io 将自动替换为 pigsty.cc。
INFRA_PACKAGE
这些包仅安装在基础设施节点上,包括常见的 rpm/deb/pip 包。
infra_packages
类型:string[],级别:G
此参数是一个字符串数组,每个字符串是用空格分隔的通用软件包列表,指定要在 INFRA 节点上安装哪些包。
此参数没有默认值;您可以明确指定它,或者如果您想使用默认值则留空。
留空时,Pigsty 将根据您的操作系统使用在 roles/node_id/vars 中定义的 repo_packages_default 的默认值。
对于 EL(7/8/9)系统,默认值为:
对于 Debian(11,12)或 Ubuntu(22.04, 22.04)系统,默认值为:
infra_packages_pip
类型:string,级别:G
为基础设施节点安装的 pip 包,默认值为空字符串
NGINX
Pigsty 通过 Nginx 暴露所有 Web 服务:主页、Grafana、Prometheus、AlertManager 等,以及其他可选工具如 PGWeb、Jupyter Lab、pgAdmin、Bytebase,以及其他静态资源和报告如 pev、schemaspy 和 pgbadger。
此 Nginx 还用作本地 YUM/APT 仓库。
nginx_enabled
类型:bool,级别:G/I
在此基础设施节点上启用 nginx?默认值:true
nginx_exporter_enabled
类型:bool,级别:G/I
在此基础设施节点上启用 nginx_exporter?默认值:true。
将此设置为 false 也将禁用 /nginx 健康检查存根:如果您的 Nginx 不支持 /nginx 存根,您可以将此值设置为 false 以禁用它。
nginx_sslmode
类型:enum,级别:G
nginx SSL 模式?可以是:disable、enable、enforce,默认值:enable
disable:监听nginx_port并仅提供纯 HTTPenable:也监听nginx_ssl_port并提供 HTTPSenforce:所有链接将默认呈现为https://- 也为 nginx
infra_portal中的所有非默认服务器将 80 端口重定向到 443 端口
- 也为 nginx
nginx_cert_validity
类型:duration,级别:G
nginx 自签名证书有效期,默认 397d
不建议使用更长的有效期,因为最新的浏览器要求网站证书最多有效期为 397 天,所以这是默认值。
nginx_home
类型:path,级别:G
nginx Web 服务器静态内容目录,默认 /www
包含静态资源和仓库资源的 Nginx 根目录。明智的做法是将此值设置为与 repo_home 相同,以便自动提供本地仓库内容。
nginx_port
类型:port,级别:G
提供 HTTP 请求的 Nginx 监听端口,默认 80。
如果您的默认 80 端口被占用或不可用,您可以考虑使用另一个端口,并相应地更改 repo_endpoint 和 repo_upstream(local 条目)。
nginx_ssl_port
类型:port,级别:G
nginx SSL 监听端口,默认 443
nginx_navbar
类型:index[],级别:G
nginx 索引页导航链接
默认值:
每个记录都呈现为 Pigsty 主页应用下拉菜单的导航链接,这些应用都是可选的,默认挂载在 http://h.pigsty/ 下的 Pigsty 默认服务器上。
url 参数指定应用的 URL PATH,例外情况是如果 URL 中存在 ${grafana} 字符串,它将自动替换为在 infra_portal 中定义的 Grafana 域名。
certbot_sign
类型:bool,级别:G/A
设置期间使用 certbot 签名 nginx 证书?默认值:false
当设置为 true 时,Pigsty 将在执行 infra.yml 和 install.yml playbook(nginx 角色)期间使用 certbot 自动从 Let’s Encrypt 申请免费 SSL 证书。
在 infra_portal 定义的域中,如果定义了 certbot 参数,Pigsty 将使用 certbot 为 domain 域申请证书,证书名称将是 certbot 参数的值。如果多个服务器/域指定相同的 certbot 参数,Pigsty 将合并并为这些域申请证书,并使用 certbot 参数的值作为证书名称。
启用此选项需要:
- 当前节点可以通过公共域名访问,并且 DNS 解析已正确指向当前节点的公共 IP
- 当前节点可以访问 Let’s Encrypt API 接口
此选项默认禁用,您可以在安装后手动执行 make cert 命令来手动执行它,它实际上调用渲染的 /etc/nginx/sign-cert 脚本,使用 certbot 更新或申请证书。
certbot_email
类型:string,级别:G/A
用于接收证书到期提醒邮件的邮箱地址,默认值:[email protected]
当 certbot_sign 设置为 true 时,建议提供此参数。Let’s Encrypt 将在证书即将到期时向此邮箱发送提醒邮件。
certbot_options
类型:string,级别:G/A
传递给 certbot 的额外配置参数,默认值:空字符串。
您可以通过此参数向 certbot 传递额外的命令行选项,例如 --dry-run,然后 certbot 将不会实际申请证书,而是预览和测试。
DNS
Pigsty 将在基础设施节点上启动默认的 DNSMASQ 服务器来处理 DNS 查询。如 h.pigsty a.pigsty p.pigsty g.pigsty 和可选 MinIO 服务的 sss.pigsty。
所有记录将添加到基础设施节点的 /etc/hosts.d/*。
您必须在您的 /etc/resolv 中添加 nameserver {{ admin_ip }} 来使用此 DNS 服务器,node_dns_servers 将完成这个技巧。
dns_enabled
类型:bool,级别:G/I
在此基础设施节点上设置 dnsmasq?默认值:true
如果您不想使用默认 DNS 服务器,您可以将此值设置为 false 以禁用它。并使用 node_default_etc_hosts 和 node_etc_hosts 代替。
dns_port
类型:port,级别:G
DNS 服务器监听端口,默认 53
dns_records
类型:string[],级别:G
由 dnsmasq 解析的动态 DNS 记录,一些辅助域名将默认写入基础设施节点上的 /etc/hosts.d/default
PROMETHEUS
Prometheus 用作指标抓取、存储和分析的时间序列数据库。
prometheus_enabled
类型:bool,级别:G/I
在此基础设施节点上启用 prometheus?
默认值:true,如果关闭,这个基础设施上将不会部署 Prometheus。
prometheus_port
类型:port,级别:G
Prometheus 监听的端口号,默认值为 9058。
从 3.7 版开始,从此前的默认值 9090 修改为新值,原因是 EL10 在此端口上启动了一个默认 Web 服务。
prometheus_clean
类型:bool,级别:G/A
初始化期间清理 prometheus 数据?默认值:true
prometheus_data
类型:path,级别:G
prometheus 数据目录,默认 /data/prometheus
prometheus_sd_dir
类型:path,级别:G,默认值:/etc/prometheus/targets
prometheus 静态文件服务发现目标目录,prometheus 将从此目录中找到动态监控目标。
prometheus_sd_interval
类型:interval,级别:G,默认值:5s
Prometheus 将默认每 5 秒检查 prometheus_sd_interval 目录以找到新的监控目标。
prometheus_scrape_interval
类型:interval,级别:G
prometheus 抓取和评估间隔,默认 10s
prometheus_scrape_timeout
类型:interval,级别:G
prometheus 全局抓取超时,默认 8s
不要将此设置为大于 prometheus_scrape_interval
prometheus_options
类型:arg,级别:G
prometheus 额外服务器选项
默认值:--storage.tsdb.retention.time=15d
prometheus 服务器的额外 cli 参数,默认值将设置 15 天数据保留以限制磁盘使用。
pushgateway_enabled
类型:bool,级别:G/I
在此基础设施节点上设置 pushgateway?默认值:true
pushgateway_options
类型:arg,级别:G
pushgateway 额外服务器选项,默认值:--persistence.interval=1m
blackbox_enabled
类型:bool,级别:G/I
在此基础设施节点上设置 blackbox_exporter?默认值:true
blackbox_options
类型:arg,级别:G
blackbox_exporter 额外服务器选项,默认值为空字符串
alertmanager_enabled
类型:bool,级别:G/I
在此基础设施节点上设置 alertmanager?默认值:true
alertmanager_port
类型:port,级别:G
AlertManager 的监听端口,默认值为 9059。
默认值自 Pigsty v3.7 起修改为 9059,因为 Kafka 的默认端口之一也使用 9093。
alertmanager_options
类型:arg,级别:G
alertmanager 额外服务器选项,默认值为空字符串
exporter_metrics_path
类型:path,级别:G
exporter 指标路径,默认 /metrics
exporter_install
类型:enum,级别:G
(过时)如何安装 exporter?none、yum、binary
默认值:none
指定如何安装 Exporter:
none:不安装,(默认情况下,Exporter 已经由node_pkg任务预先安装)yum:使用 yum 安装(如果启用 yum 安装,在部署 Exporter 之前运行 yum 安装node_exporter和pg_exporter)binary:使用复制二进制文件安装(直接从本地文件目录复制node_exporter和pg_exporter二进制文件,不推荐)
使用 yum 安装时,如果指定了 exporter_repo_url(非空),安装将首先将该 URL 下的 REPO 文件安装到 /etc/yum.repos.d。此功能允许您直接安装 Exporter 而无需初始化节点基础设施。不建议常规用户使用 binary 安装。此模式通常用于紧急故障排除和临时问题修复。
exporter_repo_url
类型:url,级别:G
(过时)如果通过 yum 安装 exporter 的仓库文件 URL
默认值为空字符串
默认为空;当 exporter_install 为 yum 时,此参数指定的仓库将添加到节点源列表。
GRAFANA
Grafana 是 Pigsty 监控系统的可视化平台。
它也可以用作低代码数据可视化环境
grafana_enabled
类型:bool,级别:G/I
在此基础设施节点上启用 grafana?默认值:true
grafana_clean
类型:bool,级别:G/A
初始化期间清理 grafana 数据?默认值:true
grafana_admin_username
类型:username,级别:G
grafana 管理员用户名,默认 admin
grafana_admin_password
类型:password,级别:G
grafana 管理员密码,默认 pigsty
默认值:pigsty
警告:在部署到生产环境之前,请将其更改为强密码
LOKI
loki_enabled
类型:bool,级别:G/I
在此基础设施节点上启用 loki?默认值:true
loki_clean
类型:bool,级别:G/A
是否移除现有 loki 数据?默认值:false
loki_data
类型:path,级别:G
loki 数据目录,默认值:/data/loki
loki_retention
类型:interval,级别:G
loki 日志保留期,默认 15d
12.4 - 管理
这里是与 INFRA 模块相关的一些管理任务
WebUI 服务的 Nginx 门户
管理本地 APT / YUM 仓库
使用本地/公共域名
使用自签名或真实的 HTTPS 证书
安装 INFRA
使用 infra.yml playbook 在基础设施节点上安装 INFRA 模块:
移除 INFRA
使用 infra-rm.yml playbook 从基础设施节点卸载 INFRA 模块:
扩展 INFRA
要扩展现有的 INFRA 部署,首先通过添加新节点 IP 并分配唯一的 infra_seq 数字来修改 infra 组:
然后使用 infra.yml playbook 在新节点上安装 INFRA:
本地仓库
使用这些 playbook 任务在基础设施节点上管理本地软件包仓库(YUM/APT):
常用命令:
管理 Nginx
如果用户在 infra_portal 的 certbot 字段中指定证书名称,您可以使用 certbot 获取免费的 HTTPS 证书:
管理基础设施组件
使用这些 playbook 任务在基础设施节点上管理基础设施组件
其他有用的任务
12.5 - 剧本
有三个与 INFRA 模块相关的 playbook:
infra.yml:在基础设施节点上初始化 Pigsty 基础设施infra-rm.yml:从基础设施节点移除基础设施组件install.yml:在当前节点上执行 Pigsty 的完整一次性安装
infra.yml
INFRA 模块 playbook infra.yml 在配置文件的 infra 组中定义的 Infra 节点 上初始化基础设施模块。
此 playbook 执行以下任务:
- 在 Infra 节点上配置目录和环境变量
- 下载并创建本地软件仓库以加速后续安装(如果使用离线包或本地仓库已存在则跳过)
- 将当前 Infra 节点纳入由 Pigsty 管理的 普通节点
- 部署基础设施组件,包括 Prometheus、Grafana、Loki、Alertmanager、PushGateway、Blackbox Exporter 等
此 playbook 默认在 infra 组上执行:
- Pigsty 在配置文件中名为
infra的组上安装INFRA模块 - 在 配置 期间,Pigsty 将当前安装节点标记为 Infra 节点,并将配置模板中的占位符 IP 地址
10.10.10.10替换为 当前节点的主 IP 地址 - 此节点可以发起管理任务并托管基础设施组件,同时像任何常规被管理节点一样工作
Playbook 注意事项:
-
这是一个幂等的 playbook - 重复执行将覆盖 Infra 节点上的基础设施组件
- 除非
prometheus_clean设置为false,否则 Prometheus 时间序列指标将丢失 - 除非
loki_clean设置为false,否则 Loki 日志数据将丢失 - 除非
grafana_clean设置为false,否则 Grafana 仪表板和配置更改将丢失
- 除非
-
当本地软件仓库
/www/pigsty/repo_complete存在时,此 playbook 跳过从互联网下载软件- 完整执行大约需要 1 ~ 3 分钟,取决于机器配置和网络条件
- 直接从原始上游源下载软件(不使用离线包)可能需要 5-10 分钟,取决于您的网络连接
演示
可用任务
以下是 infra.yml playbook 中可用任务的列表:
infra-rm.yml
INFRA 模块 playbook infra-rm.yml 从配置文件的 infra 组中定义的 Infra 节点 移除 Pigsty 基础设施。
常见子任务包括:
install.yml
INFRA 模块 playbook install.yml 在所有节点上执行 Pigsty 的完整一次性安装。
此 playbook 在 Playbook:一次性部署 中有更详细的描述。
12.6 - 监控
仪表板
告警规则
Pigsty 为 INFRA 模块提供以下两个告警规则:
InfraDown:基础设施组件宕机AgentDown:监控代理宕机
您可以在 files/prometheus/rules/infra.yml 中修改或添加新的基础设施告警规则。
12.7 - FAQ
INFRA 包含哪些组件
- Ansible 用于自动化、部署和管理;
- Nginx 用于公开任何 WebUI 服务并提供 YUM/APT 仓库;
- 自签名 CA 用于 SSL/TLS 证书;
- Prometheus 用于监控指标
- Grafana 用于监控/可视化
- Loki 用于日志收集
- AlertManager 用于告警聚合
- Chronyd 用于管理节点上的 NTP 时间同步。
- DNSMasq 用于 DNS 注册和解析。
- ETCD 作为 PostgreSQL HA 的 DCS(专用模块);
- 元节点上的 PostgreSQL 作为 CMDB(可选);
- Docker 用于无状态应用程序和工具(可选)。
如何恢复 Prometheus 目标
如果您意外删除了 Prometheus 目标目录,您可以使用以下方式再次向 Prometheus 注册监控目标:
如何恢复 Grafana 数据源
pg_databases 中的 PGSQL 数据库默认注册为 Grafana 数据源。
如果您意外删除了 Grafana 中注册的 postgres 数据源,您可以使用以下方式再次注册它们:
如何恢复 HAProxy 管理页面代理
haproxy 管理页面由默认服务器下的 Nginx 代理。
如果您意外删除了 /etc/nginx/conf.d/haproxy 中注册的 haproxy 代理设置,您可以使用以下方式再次恢复它们:
如何恢复 DNS 注册
PGSQL 集群/实例域名默认注册到基础设施节点上的 /etc/hosts.d/<name>。
您可以使用以下命令恢复它们:
如何公开新的 Nginx 上游服务
如果您希望通过 Nginx 门户公开新的 WebUI 服务,您可以将服务定义添加到 infra_portal 参数。
并重新运行 ./infra.yml -t nginx_config,nginx_launch 来更新和应用 Nginx 配置。
如果您希望使用 HTTPS 访问,您必须删除 files/pki/csr/pigsty.csr、files/pki/nginx/pigsty.{key,crt} 以强制重新生成 Nginx SSL/TLS 证书以包含新上游的域名。
如何通过 Nginx 公开 Web 服务?
虽然您可以通过 IP:Port 直接访问服务,但我们仍然建议通过使用域名并通过 Nginx 门户统一访问各种基于 Web 的服务来整合访问点。这种方法有助于集中访问、减少暴露的端口数量,并促进访问控制和审计。
如果您希望通过 Nginx 门户公开新的 WebUI 服务,您可以将服务定义添加到 infra_portal 参数。例如,这是公共演示站点使用的配置,它公开了几个额外的 Web 服务:
完成 Nginx 上游服务定义后,使用以下命令向 Nginx 注册新服务。
如果您希望通过 HTTPS 访问,您必须删除 files/pki/csr/pigsty.csr 和 files/pki/nginx/pigsty.{key,crt} 以强制重新生成 Nginx SSL/TLS 证书以包含新的上游域名。如果您更愿意使用权威组织颁发的 SSL 证书而不是 Pigsty 自签名 CA 颁发的证书,您可以将其放在 /etc/nginx/conf.d/cert/ 目录中并修改相应的配置:/etc/nginx/conf.d/<name>.conf。
如何手动添加上游仓库文件
Pigsty 有一个内置的包装脚本 bin/repo-add,它将调用 Ansible playbook node.yml 来向相应的节点添加仓库文件。
13 - 节点
要部署 模块,您必须通过在 Linux 服务器上安装 NODE 模块将它们注册到 pigsty 中。
架构、核心概念、身份管理
配置节点身份
使用 64 个参数自定义节点组件
设置 VIP,管理监控节点目标
可在节点模块中使用的 Ansible 剧本
仪表板、指标、记录和告警规则。
关于节点模块的常见问题
13.1 - 架构
“节点”是可通过 SSH 访问、
并提供裸 Linux 环境的资源。它可以是物理机、虚拟机,也可以是带有 systemd、
sudo 和 sshd 的类操作系统容器。
Pigsty 中有三类节点;在单节点部署中,它们是同一台机器。
示例
下面的四节点沙箱包含四个普通节点,其中
10.10.10.10 同时是基础设施节点和管理节点。
普通节点
普通节点默认启用以下组件:
| 组件 | 端口 | 说明 | 默认状态 |
|---|---|---|---|
node_exporter |
9100 |
节点监控指标导出器 | 启用 |
haproxy |
9101 |
HAProxy 管理与指标端口 | 启用 |
promtail |
9080 |
日志采集代理 | 启用 |
以下组件为可选项,可通过参数启用:
| 组件 | 端口 | 说明 | 默认状态 |
|---|---|---|---|
docker |
9323 |
容器服务及指标端口 | 禁用 |
keepalived |
- | 管理节点集群二层 VIP | 禁用 |
keepalived_exporter |
9650 |
监控 Keepalived 状态 | 禁用 |
管理节点
管理节点是最先安装 Pigsty、并发出全部控制命令的节点。
每套 Pigsty 部署只有一个管理节点,由 admin_ip
指定;配置时会将其设置为管理节点的主 IP。
管理节点用于向其他节点发出命令,通常与第一个 INFRA 节点重合。
可以在本地笔记本或 Mac 上准备 Pigsty 与 Ansible,并从本机发出管理命令。
基础设施节点
一套部署可以有一个或多个 INFRA 节点;生产环境建议至少两个。配置清单中的
infra 分组指定这些节点,并在其上安装 INFRA 模块。
| 组件 | 端口 | 域名 | 说明 |
|---|---|---|---|
nginx |
80 |
h.pigsty |
Web 服务入口与 YUM/APT 仓库 |
alertmanager |
9059 |
a.pigsty |
告警聚合与投递 |
prometheus |
9058 |
p.pigsty |
监控时序数据库 |
grafana |
3000 |
g.pigsty |
可视化平台 |
loki |
3100 |
- | 日志收集服务器 |
pushgateway |
9091 |
- | 一次性任务指标入口 |
blackbox_exporter |
9115 |
- | 黑盒探测 |
dnsmasq |
53 |
- | DNS 服务 |
chronyd |
123 |
- | NTP 服务 |
ansible |
- | - | 执行 Playbook |
PGSQL 节点
安装 PGSQL 模块的节点称为 PGSQL 节点。节点与 PostgreSQL
实例按 1:1 部署;node_id_from_pg 可让
节点复用 PostgreSQL 实例身份。
| 组件 | 端口 | 说明 | 状态 |
|---|---|---|---|
postgres |
5432 |
由 Patroni 管理的 PostgreSQL 服务 | 启用 |
pgbouncer |
6432 |
连接池 | 启用 |
patroni |
8008 |
PostgreSQL 高可用组件 | 启用 |
primary @ haproxy |
5433 |
主库连接池,读写服务 | 启用 |
replica @ haproxy |
5434 |
从库连接池,只读服务 | 启用 |
default @ haproxy |
5436 |
主库直连服务 | 启用 |
offline @ haproxy |
5438 |
离线实例直连服务 | 启用 |
pg_exporter |
9630 |
PostgreSQL 指标导出器 | 启用 |
pgbouncer_exporter |
9631 |
PgBouncer 指标导出器 | 启用 |
pgbackrest_exporter |
9854 |
pgBackRest 指标导出器 | 启用 |
vip-manager |
- | 将 VIP 绑定到主库 | 禁用 |
13.2 - 配置
您不需要显式定义节点集群和节点实例。 它通常由其他数据库 模块 的集群定义暗示。 如果您定义了一个 PGSQL 集群,它会隐式定义一个节点集群。
但在某些情况下,您可能希望使用显式命名的节点集群/实例。 例如运行专用用途的节点组(例如,haproxy 组、节点缓冲池等)
身份参数
Pigsty 使用节点的主要 IPv4 地址(inventory_hostname)作为其身份。
| 名称 | 类型 | 级别 | 必要性 | 注释 |
|---|---|---|---|---|
inventory_hostname |
ip |
- | 必需 | 节点 IP |
nodename |
string |
I | 可选 | 节点名称 |
node_cluster |
string |
C | 可选 | 节点集群名称 |
nodename 和 node_cluster 可以用作监控目的的可选次要身份。
当您只想监控这些节点而不是在其上运行数据库时,这会很有用。
借用身份
因为 Pigsty 在 NODE 和 PG 实例之间使用 1:1 映射(每个节点只有一个 PG 实例), 节点的身份可以从相应的 PG 实例借用:
| 名称 | 标签 | 级别 | 借用身份 | 注释 |
|---|---|---|---|---|
nodename |
ins |
I | {{ pg_cluster }}-{{ pg_seq }} |
PG 实例名称 |
node_cluster |
cls |
C | {{ pg_cluster }} |
PG 集群名称 |
这是默认行为,在监控系统中让 PG 和 NODE 具有相同的 cls / ins 身份标签很方便。
这可以通过将 node_id_from_pg 参数覆盖为 false 来禁用。
如果没有定义相应的 PG 实例,也没有明确定义 nodename 和 node_cluster,
节点将被标记为 cls 为 nodes,ins 为当前主机名。
SSH 连接
inventory_hostname 由 Ansible 用于通过 SSH 连接到节点。
如果您的节点无法通过 ssh <inventory_hostname> 简单访问,可以使用 ssh 别名 和更多 ansible 连接参数(甚至不同的 IP)。
但 inventory_hostname 仍然是节点的核心身份。
13.3 - 参数
NODE 模块有 10 个部分,65 个参数。
NODE_ID:节点身份参数NODE_DNS:节点域名解析NODE_PACKAGE:上游仓库和安装包NODE_TUNE:节点调优和功能NODE_ADMIN:管理员用户和 SSH 密钥NODE_TIME:时区、NTP、CrontabNODE_VIP:集群间可选的 L2 VIPHAPROXY:使用 HAProxy 暴露服务NODE_EXPORTER:节点监控代理PROMTAIL:Promtail 日志代理
参数
| 名称 | 部分 | 类型 | 级别 | 注释 |
|---|---|---|---|---|
nodename |
NODE_ID |
string |
I | 节点实例身份,如果缺失则使用主机名,可选 |
node_cluster |
NODE_ID |
string |
C | 节点集群身份,如果缺失则使用 ’nodes’,可选 |
nodename_overwrite |
NODE_ID |
bool |
C | 使用 nodename 覆盖节点的主机名? |
nodename_exchange |
NODE_ID |
bool |
C | 在 play 主机间交换节点名? |
node_id_from_pg |
NODE_ID |
bool |
C | 如果适用,使用 postgres 身份作为节点身份? |
node_write_etc_hosts |
NODE_DNS |
bool |
G/C/I | 修改目标节点上的 /etc/hosts? |
node_default_etc_hosts |
NODE_DNS |
string[] |
G | /etc/hosts 中的静态 DNS 记录 |
node_etc_hosts |
NODE_DNS |
string[] |
C | /etc/hosts 中的额外静态 DNS 记录 |
node_dns_method |
NODE_DNS |
enum |
C | 如何处理 DNS 服务器:add、none、overwrite |
node_dns_servers |
NODE_DNS |
string[] |
C | /etc/resolv.conf 中的动态名称服务器 |
node_dns_options |
NODE_DNS |
string[] |
C | /etc/resolv.conf 中的 DNS 解析选项 |
node_repo_modules |
NODE_PACKAGE |
string |
C | 节点上要添加的上游仓库,默认为本地 |
node_repo_remove |
NODE_PACKAGE |
bool |
C | 移除节点上现有的仓库? |
node_packages |
NODE_PACKAGE |
string[] |
C | 当前节点要安装的包 |
node_default_packages |
NODE_PACKAGE |
string[] |
G | 所有节点上要安装的默认包 |
node_disable_firewall |
NODE_TUNE |
bool |
C | 禁用节点防火墙?默认为 true |
node_disable_selinux |
NODE_TUNE |
bool |
C | 禁用节点 selinux?默认为 true |
node_disable_numa |
NODE_TUNE |
bool |
C | 禁用节点 numa,需要重启 |
node_disable_swap |
NODE_TUNE |
bool |
C | 禁用节点交换分区,谨慎使用 |
node_static_network |
NODE_TUNE |
bool |
C | 重启后保留 DNS 解析器设置 |
node_disk_prefetch |
NODE_TUNE |
bool |
C | 在 HDD 上设置磁盘预取以提高性能 |
node_kernel_modules |
NODE_TUNE |
string[] |
C | 此节点上要启用的内核模块 |
node_hugepage_count |
NODE_TUNE |
int |
C | 2MB 大页数量,优先于比率 |
node_hugepage_ratio |
NODE_TUNE |
float |
C | 节点内存大页比率,默认 0 禁用 |
node_overcommit_ratio |
NODE_TUNE |
float |
C | 节点内存过量使用比率,默认 0 禁用 |
node_tune |
NODE_TUNE |
enum |
C | 节点调优配置文件:none、oltp、olap、crit、tiny |
node_sysctl_params |
NODE_TUNE |
dict |
C | 除调优外的 k:v 格式 sysctl 参数 |
node_data |
NODE_ADMIN |
path |
C | 节点主数据目录,默认为 /data |
node_admin_enabled |
NODE_ADMIN |
bool |
C | 在目标节点上创建管理员用户? |
node_admin_uid |
NODE_ADMIN |
int |
C | 节点管理员用户的 uid 和 gid |
node_admin_username |
NODE_ADMIN |
username |
C | 节点管理员用户名,默认为 dba |
node_admin_ssh_exchange |
NODE_ADMIN |
bool |
C | 在节点集群间交换管理员 SSH 密钥 |
node_admin_pk_current |
NODE_ADMIN |
bool |
C | 将当前用户的 SSH 公钥添加到管理员 authorized_keys |
node_admin_pk_list |
NODE_ADMIN |
string[] |
C | 要添加到管理员用户的 SSH 公钥 |
node_aliases |
NODE_ADMIN |
dict |
C | 要添加的额外 shell 别名,k:v 字典 |
node_timezone |
NODE_TIME |
string |
C | 设置节点时区,空字符串跳过 |
node_ntp_enabled |
NODE_TIME |
bool |
C | 启用 chronyd 时间同步服务? |
node_ntp_servers |
NODE_TIME |
string[] |
C | /etc/chrony.conf 中的 NTP 服务器 |
node_crontab_overwrite |
NODE_TIME |
bool |
C | 覆盖还是追加到 /etc/crontab? |
node_crontab |
NODE_TIME |
string[] |
C | /etc/crontab 中的 crontab 条目 |
vip_enabled |
NODE_VIP |
bool |
C | 在此节点集群上启用 VIP? |
vip_address |
NODE_VIP |
ip |
C | IPv4 格式的节点 VIP 地址,如果启用 VIP 则必需 |
vip_vrid |
NODE_VIP |
int |
C | 必需,整数,1-254,在同一 VLAN 中应唯一 |
vip_role |
NODE_VIP |
enum |
I | 可选,master/backup,默认为 backup,用作初始角色 |
vip_preempt |
NODE_VIP |
bool |
C/I | 可选,true/false,默认为 false,启用 VIP 抢占 |
vip_interface |
NODE_VIP |
string |
C/I | 节点 VIP 监听的网络接口,默认为 eth0 |
vip_dns_suffix |
NODE_VIP |
string |
C | 节点 VIP DNS 名称后缀,默认为空字符串 |
vip_exporter_port |
NODE_VIP |
port |
C | keepalived 导出器监听端口,默认为 9650 |
haproxy_enabled |
HAPROXY |
bool |
C | 在此节点上启用 haproxy? |
haproxy_clean |
HAPROXY |
bool |
G/C/A | 清理所有现有的 haproxy 配置? |
haproxy_reload |
HAPROXY |
bool |
A | 配置后重新加载 haproxy? |
haproxy_auth_enabled |
HAPROXY |
bool |
G | 为 haproxy 管理页面启用身份验证 |
haproxy_admin_username |
HAPROXY |
username |
G | haproxy 管理员用户名,默认为 admin |
haproxy_admin_password |
HAPROXY |
password |
G | haproxy 管理员密码,默认为 pigsty |
haproxy_exporter_port |
HAPROXY |
port |
C | haproxy 管理/导出器端口,默认为 9101 |
haproxy_client_timeout |
HAPROXY |
interval |
C | 客户端连接超时,默认为 24h |
haproxy_server_timeout |
HAPROXY |
interval |
C | 服务器端连接超时,默认为 24h |
haproxy_services |
HAPROXY |
service[] |
C | 要在节点上公开的 haproxy 服务列表 |
node_exporter_enabled |
NODE_EXPORTER |
bool |
C | 在此节点上设置 node_exporter? |
node_exporter_port |
NODE_EXPORTER |
port |
C | node exporter 监听端口,默认为 9100 |
node_exporter_options |
NODE_EXPORTER |
arg |
C | node_exporter 的额外服务器选项 |
promtail_enabled |
PROMTAIL |
bool |
C | 启用 promtail 日志收集器? |
promtail_clean |
PROMTAIL |
bool |
G/A | 初始化期间清除现有的 promtail 状态文件? |
promtail_port |
PROMTAIL |
port |
C | promtail 监听端口,默认为 9080 |
promtail_positions |
PROMTAIL |
path |
C | promtail 位置状态文件路径 |
NODE
Node 模块将目标节点调优到所需状态,并将它们集成到 Pigsty 监控系统中。
NODE_ID
每个节点都有身份参数,这些参数通过 <cluster>.hosts 和 <cluster>.vars 中的参数配置。详情请查看 NODE Identity。
nodename
名称:nodename,类型:string,级别:I
节点实例身份,如果缺失则使用主机名,可选
无默认值,Null 或空字符串表示 nodename 将设置为节点的当前主机名。
如果 node_id_from_pg 为 true(默认)且 nodename 未明确定义,nodename 将首先尝试使用 ${pg_cluster}-${pg_seq},如果此节点上未定义 PGSQL,则回退到默认的 HOSTNAME。
如果 nodename_overwrite 为 true,节点名称也将用作 HOSTNAME。
node_cluster
名称:node_cluster,类型:string,级别:C
节点集群身份,如果缺失则使用 ’nodes’,可选
默认值:nodes
如果 node_id_from_pg 为 true(默认)且 node_cluster 未明确定义,node_cluster 将首先尝试使用 ${pg_cluster},如果此节点上未定义 PGSQL,则回退到默认的 HOSTNAME。
nodename_overwrite
名称:nodename_overwrite,类型:bool,级别:C
使用 nodename 覆盖节点的主机名?
默认值为 true,非空节点名 nodename 将覆盖当前节点的主机名。
当 nodename 参数未定义或为空字符串,但 node_id_from_pg 为 true 时,节点名称将尝试使用 {{ pg_cluster }}-{{ pg_seq }},借用 1:1 PostgreSQL 实例的实例名身份。
如果 nodename 未定义、为空或空字符串且 node_id_from_pg 为 false,则不对主机名进行任何更改。
nodename_exchange
名称:nodename_exchange,类型:bool,级别:C
在 play 主机间交换节点名?
默认值为 false
启用此参数时,在执行 node.yml playbook 的同一组节点之间交换节点名称,写入 /etc/hosts。
node_id_from_pg
名称:node_id_from_pg,类型:bool,级别:C
如果适用,使用 postgres 身份作为节点身份?
默认值为 true
如果适用,借用 PostgreSQL 集群和实例身份。
如果 postgres 和节点之间存在 1:1 关系,使用相同的身份很有用。
NODE_DNS
Pigsty 为节点配置静态 DNS 记录和动态 DNS 解析器。
如果您已经有 DNS 服务器,请将 node_dns_method 设置为 none 以禁用动态 DNS 设置。
node_write_etc_hosts
名称:node_write_etc_hosts,类型:bool,级别:G|C|I
修改目标节点上的 /etc/hosts?
例如,docker VM 默认无法修改 /etc/hosts,因此您可以将此值设置为 false 以禁用修改。
node_default_etc_hosts
名称:node_default_etc_hosts,类型:string[],级别:G
/etc/hosts 中的静态 DNS 记录
默认值:
node_default_etc_hosts 是一个数组。每个元素都是格式为 <ip> <name> 的 DNS 记录。
它用于全局静态 DNS 记录。您可以为每个集群使用 node_etc_hosts 来设置临时记录。
确保在 DNS 名称服务器启动之前,将类似 10.10.10.10 h.pigsty a.pigsty p.pigsty g.pigsty 的 DNS 记录写入 /etc/hosts,以确保可以使用域名访问本地 yum 仓库。
node_etc_hosts
名称:node_etc_hosts,类型:string[],级别:C
/etc/hosts 中的额外静态 DNS 记录
默认值:[]
与 node_default_etc_hosts 相同,但是额外添加的。
node_dns_method
名称:node_dns_method,类型:enum,级别:C
如何处理 DNS 服务器:add、none、overwrite
默认值:add
add:将node_dns_servers中的记录追加到/etc/resolv.conf并保留现有的 DNS 服务器。(默认)overwrite:用node_dns_servers中的记录覆盖/etc/resolv.confnone:如果在生产环境中提供了 DNS 服务器,可以跳过 DNS 服务器配置。
node_dns_servers
名称:node_dns_servers,类型:string[],级别:C
/etc/resolv.conf 中的动态名称服务器
默认值:["${admin_ip}"],管理节点上的默认名称服务器将作为第一个名称服务器添加到 /etc/resolv.conf。
node_dns_options
名称:node_dns_options,类型:string[],级别:C
/etc/resolv.conf 中的 DNS 解析选项,默认值:
NODE_PACKAGE
本节讨论要安装的上游 yum 仓库和软件包。
node_repo_modules
名称:node_repo_modules,类型:string,级别:C/A
要在节点上添加的上游仓库,默认值:local
此参数指定要添加到节点的上游仓库。它用于过滤 repo_upstream 条目,只有具有相同 module 值的条目才会添加到节点的软件源。这类似于 repo_modules 参数。
node_repo_remove
名称:node_repo_remove,类型:bool,级别:C/A
移除节点上现有的仓库?
默认值为 true,因此 Pigsty 将在添加上游仓库之前将 /etc/yum.repos.d 中的现有仓库文件移动到备份目录:/etc/yum.repos.d/backup。在 Debian/Ubuntu 上,Pigsty 将备份并移动 /etc/apt/sources.list(.d) 到 /etc/apt/backup。
node_packages
名称:node_packages,类型:string[],级别:C
要在当前节点上安装的软件包,默认值:[openssh-server]。
每个元素都是逗号分隔的软件包名称列表,除了 node_default_packages 之外,还将在当前节点上安装。
此参数中指定的软件包将升级到最新版本,默认值为 [openssh-server],默认升级 sshd 以避免 SSH CVE。
此参数通常用于安装对当前节点/集群而言是临时的额外软件包。
node_default_packages
名称:node_default_packages,类型:string[],级别:G
要在所有节点上安装的默认软件包,未定义默认值。
此参数是字符串数组,每个字符串都是逗号分隔的软件包名称列表,默认情况下将在所有节点上安装。
此参数没有默认值,您可以明确指定它,或者如果要使用默认值则将其留空。
当将其留空时,Pigsty 将根据您的操作系统使用 roles/node_id/vars 中定义的 node_packages_default 的默认值。
对于 EL 系统,默认值为:
对于 debian / ubuntu 节点,明确使用此默认值:
NODE_TUNE
在节点上配置调优模板、功能、内核模块、sysctl 参数。
node_disable_firewall
名称:node_disable_firewall,类型:bool,级别:C
禁用节点防火墙?默认为 true
默认值为 true
node_disable_selinux
名称:node_disable_selinux,类型:bool,级别:C
禁用节点 selinux?默认为 true
默认值为 true
node_disable_numa
名称:node_disable_numa,类型:bool,级别:C
禁用节点 numa,需要重启
默认值为 false
布尔标志,默认不关闭。请注意,关闭 NUMA 需要重启机器才能生效!
如果您不知道如何设置 CPU 亲和性,建议关闭 NUMA。
node_disable_swap
名称:node_disable_swap,类型:bool,级别:C
禁用节点交换分区,谨慎使用
默认值为 false
不建议关闭 SWAP。但是,当您的节点用于 Kubernetes 部署时,应该禁用 SWAP。
如果有足够的内存并且数据库独占部署,可能会略微提高性能。
node_static_network
名称:node_static_network,类型:bool,级别:C
重启后保留 DNS 解析器设置,默认值为 true
启用静态网络意味着机器重启不会因 NIC 更改而覆盖您的 DNS Resolv 配置。建议在生产环境中启用。
node_disk_prefetch
名称:node_disk_prefetch,类型:bool,级别:C
在 HDD 上设置磁盘预取以提高性能
默认值为 false,使用 HDD 时考虑启用此功能。
node_kernel_modules
名称:node_kernel_modules,类型:string[],级别:C
要在此节点上启用的内核模块
默认值:
由内核模块名称组成的数组,声明需要在节点上安装的内核模块。
node_hugepage_count
名称:node_hugepage_count,类型:int,级别:C
2MB 大页数量,优先于比率,默认为 0
优先于 node_hugepage_ratio。如果给出非零值,将写入 /etc/sysctl.d/hugepage.conf
如果 node_hugepage_count 和 node_hugepage_ratio 都为 0(默认),大页将完全禁用。
负值不起作用,高于节点内存 90% 的数字将上限到节点内存的 90%。
如果不为零,它应该略大于 pg_shared_buffer_ratio。
node_hugepage_ratio
名称:node_hugepage_ratio,类型:float,级别:C
节点内存大页比率,0 禁用它(默认),有效范围:0 ~ 0.40
默认值:0,将设置 vm.nr_hugepages=0 并且根本不使用 HugePage。
此内存的百分比将分配为 HugePage,并为 PostgreSQL 保留。
如果不为零,它应该等于或略大于 pg_shared_buffer_ratio。
例如,如果您为 postgres 共享缓冲区使用默认的 25% 内存,您可以将此值设置为 0.27 ~ 0.30,浪费的大页可以稍后使用 /pg/bin/pg-tune-hugepage 回收。
node_overcommit_ratio
名称:node_overcommit_ratio,类型:int,级别:C
节点内存过量使用比率,0 禁用它(默认)。这是一个从 0 到 100+ 的整数。
默认值:0,将设置 vm.overcommit_memory=0,否则将使用 vm.overcommit_memory=2,此值将用作 vm.overcommit_ratio。
建议在专用 pgsql 节点上设置使用 vm.overcommit_ratio。例如 50 ~ 100。
node_tune
名称:node_tune,类型:enum,级别:C
节点调优配置文件:none、oltp、olap、crit、tiny
默认值:oltp
tiny:微型虚拟机(1 ~ 3 核,1 ~ 8 GB 内存)oltp:优化延迟的常规 OLTP 模板olap:优化吞吐量的常规 OLAP 模板crit:核心金融业务模板,优化脏页数量
通常,数据库调优模板 pg_conf 应该与节点调优模板配对:node_tune
node_sysctl_params
名称:node_sysctl_params,类型:dict,级别:C
除调优外的 k:v 格式 sysctl 参数
默认值:{}
字典 K-V 结构,Key 是内核 sysctl 参数名称,Value 是参数值。
您也可以使用调优配置文件定义 sysctl 参数。
NODE_ADMIN
本节讨论管理员用户及其凭据。
node_data
名称:node_data,类型:path,级别:C
节点主数据目录,默认为 /data
默认值:/data
如果指定,此路径将用作主数据磁盘挂载点。如果路径不存在,将创建目录并抛出警告。
数据目录由 root 拥有,模式为 0777。
node_admin_enabled
名称:node_admin_enabled,类型:bool,级别:C
在目标节点上创建管理员用户?
默认值为 true
在每个节点上创建管理员用户(免密 sudo 和 ssh),默认创建名为 dba (uid=88) 的管理员用户,可以从元节点通过 SSH 免密访问环境中的其他节点并执行 sudo。
node_admin_uid
名称:node_admin_uid,类型:int,级别:C
节点管理员用户的 uid 和 gid
默认值:88
node_admin_username
名称:node_admin_username,类型:username,级别:C
节点管理员用户名,默认为 dba
默认值:dba
node_admin_ssh_exchange
名称:node_admin_ssh_exchange,类型:bool,级别:C
在节点集群间交换管理员 SSH 密钥
默认值为 true
启用时,Pigsty 将在 playbook 执行期间在成员之间交换 SSH 公钥,允许管理员 node_admin_username 从不同节点相互访问。
node_admin_pk_current
名称:node_admin_pk_current,类型:bool,级别:C
将当前用户的 SSH 公钥添加到管理员 authorized_keys
默认值为 true
启用时,在当前节点上,当前用户的 SSH 公钥(~/.ssh/id_rsa.pub)被复制到目标节点管理员用户的 authorized_keys。
在生产环境中部署时,请务必注意此参数,它将当前执行命令的用户的默认公钥安装到所有机器的管理员用户。
node_admin_pk_list
名称:node_admin_pk_list,类型:string[],级别:C
要添加到管理员用户的 SSH 公钥
默认值:[]
数组的每个元素都是一个字符串,包含写入管理员用户 ~/.ssh/authorized_keys 的密钥,具有相应私钥的用户可以作为管理员用户登录。
在生产环境中部署时,请务必注意此参数,并且只将受信任的密钥添加到此列表。
node_aliases
名称:node_aliases,类型:dict,级别:C/I
要添加到管理员用户 shell 配置文件的额外别名
默认值:{}
您可以向其添加额外的 shell 别名,pigsty 将这些别名添加到目标节点上的 /etc/profile.d/node.alias.sh 文件:
这将生成:
NODE_TIME
node_timezone
名称:node_timezone,类型:string,级别:C
设置节点时区,空字符串跳过
默认值为空字符串,不会更改默认时区(通常为 UTC)
node_ntp_enabled
名称:node_ntp_enabled,类型:bool,级别:C
启用 chronyd 时间同步服务?
默认值为 true,因此 Pigsty 将使用 node_ntp_servers 覆盖节点的 /etc/chrony.conf。
如果您已经配置了 NTP 服务器,只需设置为 false 即可保持不变。
node_ntp_servers
名称:node_ntp_servers,类型:string[],级别:C
/etc/chrony.conf 中的 NTP 服务器,默认值:["pool pool.ntp.org iburst"]
只有当 node_ntp_enabled 为 true 时才生效。
您可以使用 ${admin_ip} 与管理节点上的 NTP 服务器同步时间,而不是公共 NTP 服务器。
node_crontab_overwrite
名称:node_crontab_overwrite,类型:bool,级别:C
覆盖还是追加到 /etc/crontab?
默认值为 true,pigsty 将以覆盖模式渲染 node_crontab 中的记录,而不是追加到其中。
node_crontab
名称:node_crontab,类型:string[],级别:C
/etc/crontab 中的 crontab 条目
默认值:[]
NODE_VIP
您可以在一个节点集群之间绑定可选的 L2 VIP,默认情况下是禁用的。
L2 VIP 只能在同一 L2 LAN 中使用,这可能会对您的网络拓扑产生额外限制。
如果启用,您必须为每个节点集群手动分配 vip_address 和 vip_vrid。
用户有责任确保地址 / vrid 在同一 LAN 中是唯一的。
vip_enabled
名称:vip_enabled,类型:bool,级别:C
在此节点集群上启用 VIP?默认值为 false,表示不为此节点集群创建 L2 VIP。
L2 VIP 只能在同一 L2 LAN 中使用,这可能会对您的网络拓扑产生额外限制。
vip_address
名称:vip_address,类型:ip,级别:C
IPv4 格式的节点 VIP 地址,如果节点 vip_enabled 则必需。
无默认值。此参数必须明确分配并在您的 LAN 中唯一。
vip_vrid
名称:vip_vrid,类型:int,级别:C
整数,1-254,在同一 VLAN 中应唯一,如果节点 vip_enabled 则必需。
无默认值。此参数必须明确分配并在您的 LAN 中唯一。
vip_role
名称:vip_role,类型:enum,级别:I
节点 VIP 角色,可以是 master 或 backup,将用作初始 keepalived 状态。
vip_preempt
名称:vip_preempt,类型:bool,级别:C/I
可选,true/false,默认为 false,启用 VIP 抢占
默认值为 false,表示当备份具有比活跃主服务器更高的优先级时不会发生抢占。
vip_interface
名称:vip_interface,类型:string,级别:C/I
节点 VIP 监听的网络接口,默认为 eth0。
它应该是节点的相同主要内网接口,即您在清单文件中使用的 IP 地址。
如果您的节点有不同的接口,您可以在实例变量上覆盖它。
vip_dns_suffix
名称:vip_dns_suffix,类型:string,级别:C/I
节点 VIP DNS 名称后缀,默认为空字符串。它将用作节点 VIP 的 DNS 名称。
vip_exporter_port
名称:vip_exporter_port,类型:port,级别:C/I
keepalived 导出器监听端口,默认为 9650。
HAPROXY
默认情况下,HAProxy 安装在每个节点上,以 NodePort 方式公开服务。
haproxy_enabled
名称:haproxy_enabled,类型:bool,级别:C
在此节点上启用 haproxy?
默认值为 true
haproxy_clean
名称:haproxy_clean,类型:bool,级别:G/C/A
清理所有现有的 haproxy 配置?
默认值为 false
haproxy_reload
名称:haproxy_reload,类型:bool,级别:A
配置后重新加载 haproxy?
默认值为 true,它将在配置更改后重新加载 haproxy。
如果您希望在应用之前检查,您可以使用 cli 参数关闭此功能并检查它。
haproxy_auth_enabled
名称:haproxy_auth_enabled,类型:bool,级别:G
为 haproxy 管理页面启用身份验证
默认值为 true,这将需要管理页面的 http 基本身份验证。
不建议禁用它,因为您的流量控制将被暴露。
haproxy_admin_username
名称:haproxy_admin_username,类型:username,级别:G
haproxy 管理员用户名,默认为 admin
haproxy_admin_password
名称:haproxy_admin_password,类型:password,级别:G
haproxy 管理员密码,默认为 pigsty
请在您的生产环境中更改它!
haproxy_exporter_port
名称:haproxy_exporter_port,类型:port,级别:C
haproxy 管理/导出器端口,默认为 9101
haproxy_client_timeout
名称:haproxy_client_timeout,类型:interval,级别:C
客户端连接超时,默认为 24h
haproxy_server_timeout
名称:haproxy_server_timeout,类型:interval,级别:C
服务器端连接超时,默认为 24h
haproxy_services
名称:haproxy_services,类型:service[],级别:C
要在节点上公开的 haproxy 服务列表,默认值:[]
每个元素都是一个服务定义,这是一个临时 haproxy 服务示例:
它将渲染到 /etc/haproxy/<service.name>.cfg 并在重新加载后生效。
NODE_EXPORTER
node_exporter_enabled
名称:node_exporter_enabled,类型:bool,级别:C
在此节点上设置 node_exporter?默认值为 true
node_exporter_port
名称:node_exporter_port,类型:port,级别:C
node exporter 监听端口,默认为 9100
node_exporter_options
名称:node_exporter_options,类型:arg,级别:C
node_exporter 的额外服务器选项,默认值:--no-collector.softnet --no-collector.nvme --collector.tcpstat --collector.processes
默认情况下,Pigsty 启用 tcpstat、processes 收集器并禁用 nvme、softnet 指标收集器。
PROMTAIL
Promtail 将从其他模块收集日志,并将它们发送到 LOKI
INFRA:基础设施日志,仅在基础设施节点上收集。nginx-access:/var/log/nginx/access.lognginx-error:/var/log/nginx/error.loggrafana:/var/log/grafana/grafana.log
NODES:主机节点日志,在所有节点上收集。syslog:/var/log/messagesdmesg:/var/log/dmesgcron:/var/log/cron
PGSQL:PostgreSQL 日志,当节点使用pg_cluster定义时收集。postgres:/pg/log/postgres/*patroni:/pg/log/patroni.logpgbouncer:/pg/log/pgbouncer/pgbouncer.logpgbackrest:/pg/log/pgbackrest/*.log
REDIS:Redis 日志,当节点使用redis_cluster定义时收集。redis:/var/log/redis/*.log
日志目录可根据
pg_log_dir、patroni_log_dir、pgbouncer_log_dir、pgbackrest_log_dir自定义
promtail_enabled
名称:promtail_enabled,类型:bool,级别:C
启用 promtail 日志收集器?
默认值为 true
promtail_clean
名称:promtail_clean,类型:bool,级别:G/A
初始化期间清除现有的 promtail 状态文件?
默认值为 false,如果您选择清理,Pigsty 将删除由 promtail_positions 定义的现有状态文件,这意味着 Promtail 将重新收集当前节点上的所有日志并再次将它们发送到 Loki。
promtail_port
名称:promtail_port,类型:port,级别:C
promtail 监听端口,默认为 9080
默认值:9080
promtail_positions
名称:promtail_positions,类型:path,级别:C
promtail 位置状态文件路径
默认值:/var/log/positions.yaml
Promtail 记录所有日志的消费偏移量,定期写入由 promtail_positions 指定的文件。
13.4 - 管理
节点管理 SOP,添加和移除节点,设置管理员,绑定 VIP 和其他杂项
以下是 NODE 模块的一些常见管理任务。
添加节点
要将节点添加到 Pigsty,您需要对该节点具有免密 ssh/sudo 访问权限
移除节点
要从 Pigsty 中移除节点,您可以使用以下命令:
创建管理员
如果当前用户对节点没有免密 ssh/sudo 访问权限,您可以使用其他管理员用户来引导节点:
绑定 VIP
您可以使用 vip_enabled 在节点集群上绑定可选的 L2 VIP。
其他任务
节点调优
Pigsty 为不同的工作负载预定义了四个调优配置文件:
您也可以在节点上使用 tuned-adm 命令管理调优配置文件:
内核模块
您可以在 node.yml 中使用 node_kernel_modules 管理内核模块。
要手动管理内核模块,您可以在节点上使用以下命令:
13.5 - 剧本
Pigsty 提供两个用于节点管理的 playbooks:
| 剧本 | 目的 | 用法 | 范围 |
|---|---|---|---|
node.yml |
将节点添加到 pigsty | ./node.yml -l <target> |
单个节点或集群 |
node-rm.yml |
从 pigsty 中移除节点 | ./node-rm.yml -l <target> |
单个节点或集群 |
node.yml
node.yml playbook 将裸机计算资源转换为 Pigsty 基础设施中完全配置、监控和服务就绪的节点。这个全面的自动化处理从基本操作系统配置到高级监控设置的所有内容。
node-rm.yml
node-rm.yml playbook 执行从 Pigsty 基础设施中干净、全面地移除节点。此自动化确保所有服务、配置和监控集成都正确注销和清理,防止孤立资源并保持系统卫生。
13.6 - 监控
仪表板
NODE 模块有 6 个仪表板。
NODE Overview:所有节点概览
NODE Cluster:特定节点集群的详细信息
NODE Instance:单个节点实例的详细信息
NODE Alert:所有节点集群/实例的关键指标概览
NODE VIP:节点集群上 L2 VIP 的详细信息
NODE Haproxy:haproxy 负载均衡器的详细信息
告警规则
以下是节点模块的默认告警规则:
13.7 - FAQ
如何配置 NTP 服务?
如果未配置 NTP,请使用公共 NTP 服务或与管理节点同步时间。
如果您的节点已经配置了 NTP,您可以通过将 node_ntp_enabled 设置为 false 来保持不变。
否则,如果您有互联网访问权限,您可以使用公共 NTP 服务,如 pool.ntp.org。
如果您没有互联网访问权限,至少您可以使用以下方式与管理节点同步时间:
如何强制在节点上同步时间?
使用 chronyc 同步时间。您必须首先配置 NTP 服务。
您可以将 all 替换为任何组或主机 IP 地址来限制执行范围。
远程节点无法通过 SSH 命令访问。
如果目标机器隐藏在 SSH 跳板机后面,或者进行了一些自定义以至于无法使用 ssh ip 直接访问,请考虑使用 Ansible 连接参数。可以使用 ansible_port 或 ansible_host 指定 SSH 别名的额外 SSH 端口。
远程节点 SSH 和 SUDO 需要密码
在执行部署和更改时,使用的管理员用户必须对所有节点具有 ssh 和 sudo 权限。不需要免密。
您可以在执行 playbook 时通过 -k|-K 参数传入 ssh 和 sudo 密码,甚至可以通过 -eansible_host=<another_user> 使用另一个用户运行 playbook。但是,Pigsty 强烈建议为管理员用户配置 SSH 免密登录和免密 sudo。
使用现有管理员用户创建管理员用户。
这将使用该节点上的现有管理员用户创建由 node_admin_username 指定的管理员用户。
使用 HAProxy 公开节点服务
您可以在 node.yml 中使用 haproxy_services 公开服务。
这是使用它公开 MinIO 服务的示例:公开 MinIO 服务
为什么我的节点 /etc/yum.repos.d/* 被清除了?
Pigsty 将尝试在基础设施节点上的本地 yum 仓库中包含所有依赖项。此仓库文件将根据 node_repo_modules 添加。现有的仓库文件将根据 node_repo_remove 的默认值默认删除。这将防止节点使用互联网仓库或一些愚蠢的问题。
如果您想在节点初始化期间保留现有的仓库文件,只需将 node_repo_remove 设置为 false。
如果您想在基础设施节点本地仓库引导期间保留现有的仓库文件,只需将 repo_remove 设置为 false。
为什么我的 shell 提示符改变了,如何恢复?
pigsty 提示符在 /etc/profile.d/node.sh 中使用环境变量 PS1 定义。
要恢复您现有的提示符,只需删除该文件并重新登录。
腾讯 OpenCloudOS 兼容性问题
OpenCloudOS 没有 softdog 模块,在全局变量上覆盖 node_kernel_modules:
14 - ETCD
ETCD 是一个分布式、可靠的键值存储,用于分布式系统的最关键数据。 etcd 被用作 patroni 的 DCS(分布式配置存储),为 PostgreSQL 高可用代理提供配置管理和领导者选举功能。
简而言之,PGSQL 依赖于全局的 ETCD 模块,而 ETCD 依赖于 NODE 模块才能正常工作(使用节点 CA)。
定义不同规模的 etcd 集群
使用 10 个参数自定义 etcd 组件
添加/删除 etcd 成员,刷新端点...
可在 etcd 模块中使用的 Ansible 剧本
仪表板、指标、记录和告警规则
关于 etcd 模块的常见问题
14.1 - 配置
在部署之前,您必须在配置清单中定义 etcd 集群。
通常您可以选择一个 etcd 集群:
使用偶数个 etcd 节点是没有意义的,超过五个节点也不常见。
单节点
在清单中定义组 etcd,它将创建一个单例 etcd 实例。
这一行几乎存在于所有单节点配置模板中,其中占位符 IP 地址 10.10.10.10 将被替换为当前管理节点 IP。
唯一必要的参数是 etcd_seq 和 etcd_cluster,它们唯一地标识集群和每个实例。
三节点
三节点 etcd 集群非常常见,容忍一个节点故障,适用于大多数情况。
trio 和 safe 配置模板使用三节点 etcd 集群,如下所示:
五节点
五节点 etcd 集群可以容忍两个节点故障,适用于大型生产环境。
在 prod 模板中有一个五节点 etcd 集群示例:
您可以使用更多节点,但建议使用 3 或 5 个节点。
为集群大小使用奇数,如 1、3、5、7、…
Etcd 使用
这些是当前使用 Etcd 的服务:
- patroni:使用 etcd 作为 PostgreSQL HA 的共识后端
- vip-manager:从 Etcd 读取领导者信息,在 PostgreSQL 集群上绑定可选的 L2 VIP
在对 etcd 集群成员进行任何永久更改后,您必须重新加载 etcd 配置。
例如,更新 patroni 对 etcd 端点的引用:
例如,更新 vip-manager 对 etcd 端点的引用(如果您使用 PGSQL L2 VIP):
14.2 - 参数
ETCD 模块共有 12 个参数。
ETCD: 9 个参数:
| 参数 | 类型 | 级别 | 说明 |
|---|---|---|---|
etcd_seq |
int | I | etcd 实例标识符,必需 |
etcd_cluster |
string | C | etcd 集群和组名,默认为 etcd |
etcd_learner |
bool | I | 防止清除运行中的 etcd 实例? |
etcd_data |
path | C | etcd 数据目录,默认为 /data/etcd |
etcd_port |
port | C | etcd 客户端端口,默认为 2379 |
etcd_peer_port |
port | C | etcd 对等端口,默认为 2380 |
etcd_init |
enum | C | etcd 初始集群状态,new 或 existing |
etcd_election_timeout |
int | C | etcd 选举超时,默认为 1000ms |
etcd_heartbeat_interval |
int | C | etcd 心跳间隔,默认为 100ms |
ETCD_REMOVE: 3 个 参数:
| 参数 | 类型 | 级别 | 说明 |
|---|---|---|---|
etcd_safeguard |
bool | G/C/A | 防止清除运行中的 etcd 实例? |
etcd_rm_data |
bool | G/C/A | 移除期间删除 etcd 数据?(默认:true) |
etcd_rm_pkg |
bool | G/C/A | 移除期间卸载 etcd 包?(默认:false) |
默认值
默认参数在 roles/etcd/defaults/main.yml 中定义
额外的移除参数在 roles/etcd_remove/defaults/main.yml 中定义
ETCD_REMOVE 参数
etcd_seq
名称:etcd_seq,类型:int,级别:I
etcd 实例标识符,必需
没有默认值,您必须明确指定它。这里是一个 3 节点 etcd 集群示例:
etcd_cluster
名称:etcd_cluster,类型:string,级别:C
etcd 集群和组名,默认为 etcd
默认值:etcd,这是一个固定的组名,当您想要部署一些额外的 etcd 集群时很有用
etcd_learner
名称:etcd_learner,类型:bool,级别:I
将 etcd 实例初始化为学习者?默认值为 false
当设置为 true 时,etcd 实例将被初始化为学习者,因此它无法在 etcd 集群中投票。
您可以稍后使用 etcdctl member promote 命令将其提升为完整成员。
etcd_data
名称:etcd_data,类型:path,级别:C
etcd 数据目录,默认为 /data/etcd
etcd_port
名称:etcd_port,类型:port,级别:C
etcd 客户端端口,默认为 2379
etcd_peer_port
名称:etcd_peer_port,类型:port,级别:C
etcd 对等端口,默认为 2380
etcd_init
名称:etcd_init,类型:enum,级别:C
etcd 初始集群状态,new 或 existing
默认值:new,将创建一个独立的新 etcd 集群。
值 existing 在尝试向现有 etcd 集群追加新成员时使用。
etcd_election_timeout
名称:etcd_election_timeout,类型:int,级别:C
etcd 选举超时,默认为 1000(毫秒)
etcd_heartbeat_interval
名称:etcd_heartbeat_interval,类型:int,级别:C
etcd 心跳间隔,默认为 100(毫秒)
ETCD_REMOVE
这一节包含 etcd_remove 角色中定义的参数,
一些供 etcd-rm.yml 剧本使用的行为控制标记。
etcd_safeguard
名称:etcd_safeguard,类型:bool,级别:G/C/A
防止清除 etcd 实例?默认值为 false
如果启用,运行中的 etcd 实例将不会被 etcd-rm.yml playbook 清除。
etcd_rm_data
名称:etcd_rm_data,类型:bool,级别:G/C/A
移除期间删除 etcd 数据?默认值为 true
启用时,etcd-rm.yml playbook 将在集群或成员移除期间删除 etcd 数据目录和配置文件。
etcd_rm_pkg
名称:etcd_rm_pkg,类型:bool,级别:G/C/A
移除期间卸载 etcd 包?默认值为 false
启用时,etcd-rm.yml playbook 将在集群或成员移除期间卸载 etcd 包。
14.3 - 管理预案
以下是一些常见的 etcd 管理任务 SOP(预案):
- 创建集群:如何初始化 etcd 集群?
- 销毁集群:如何销毁 etcd 集群?
- 环境变量:如何配置 etcd 客户端,以访问 etcd 服务器集群?
- 重载配置:如何更新客户端使用的 etcd 服务器成员列表?
- 添加成员:如何向现有 etcd 集群添加新成员?
- 移除成员:如何从 etcd 集群移除老成员?
- 便捷脚本:使用
bin/etcd-add和bin/etcd-rm简化操作
更多问题请参考 FAQ:ETCD。
创建集群
要创建一个集群,首先需要在 配置清单 中定义 etcd 集群:
执行 etcd.yml 剧本即可。
自 Pigsty v3.6 起,etcd.yml 剧本专注于集群安装和成员添加,不再包含移除功能。所有移除操作请使用独立的 etcd-rm.yml 剧本。
对于已初始化的生产环境 etcd 集群,可以打开防误删保护 etcd_safeguard,避免误删现有的 etcd 实例。
销毁集群
要销毁一个 etcd 集群,请使用独立的 etcd-rm.yml 剧本。执行此命令前请务必三思!
或使用便捷脚本:
移除剧本会尊重 etcd_safeguard 防误删保险的配置。如果该参数设置为 true,剧本将中止执行以防止误删。
在移除 etcd 集群之前,请确保没有 PostgreSQL 集群正在使用该 etcd 作为 DCS 服务。否则会导致 PostgreSQL 高可用功能失效。
环境变量
Pigsty 默认使用 etcd v3 API(v3.6+ 已移除 v2 API 支持)。Pigsty 会在 etcd 节点上自动配置环境变量脚本 /etc/profile.d/etcdctl.sh,登录后会自动加载。
以下是 etcd 客户端配置环境变量的示例:
配置好客户端环境变量后,你可以使用以下命令进行 etcd CRUD 操作:
Pigsty v4.0 默认启用 etcd 的 RBAC(基于角色的访问控制)认证机制。在集群初始化时,etcd_auth 任务会自动创建 root 用户并启用认证。
root 用户密码由 etcd_root_password 参数指定,默认值为 Etcd.Root。密码存储在 /etc/etcd/etcd.pass 文件中,权限为 0640(root 所有,etcd 组可读)。
在生产环境中,强烈建议修改默认密码:
客户端认证方式:
Patroni 与 etcd 认证:
PostgreSQL 高可用组件 Patroni 通过 pg_etcd_password 参数配置连接 etcd 的密码。如果该参数为空,Patroni 会使用集群名称作为密码(不推荐)。建议在生产环境中为每个 PG 集群配置独立的 etcd 密码。
重载配置
如果 etcd 集群的成员发生变化(添加或移除成员),我们需要刷新对 etcd 服务端点的引用。目前 Pigsty 中有以下几处 etcd 引用需要更新:
| 配置位置 | 配置文件 | 更新方式 |
|---|---|---|
| etcd 成员配置 | /etc/etcd/etcd.conf |
./etcd.yml -t etcd_conf |
| etcdctl 环境变量 | /etc/profile.d/etcdctl.sh |
./etcd.yml -t etcd_config |
| Patroni DCS 配置 | /pg/bin/patroni.yml |
./pgsql.yml -t pg_conf |
| VIP-Manager 配置 | /etc/default/vip-manager |
./pgsql.yml -t pg_vip_config |
刷新 etcd 成员配置文件:
刷新 etcdctl 客户端环境变量:
更新 Patroni DCS 端点配置:
更新 VIP-Manager 端点配置(仅当使用 PGSQL L2 VIP 时需要):
使用 bin/etcd-add 和 bin/etcd-rm 便捷脚本时,脚本会在操作完成后提示您需要执行的配置刷新命令。
添加成员
ETCD 参考: 添加成员
推荐方式:使用便捷脚本
使用 bin/etcd-add 脚本是向现有 etcd 集群添加新成员的推荐方式:
脚本会自动完成以下操作:
- 验证 IP 地址有效性
- 执行
etcd.yml剧本(自动设置etcd_init=existing) - 提供安全警告和倒计时
- 操作完成后提示配置刷新命令
手动方式:分步操作
向现有的 etcd 集群添加新成员需要以下步骤:
- 更新配置清单:将新实例添加到
etcd组 - 通知集群:执行
etcdctl member add命令(可选,剧本会自动执行) - 初始化新成员:使用
etcd_init=existing参数运行剧本 - 提升成员:将学习者提升为正式成员(可选,使用
etcd_learner=true时需要) - 重载配置:更新所有客户端的 etcd 端点引用
添加新成员时必须使用 etcd_init=existing 参数,否则新实例会尝试创建新集群而非加入现有集群。
详细步骤:向etcd集群添加成员
下面是具体操作的详细细节,让我们从一个单实例 etcd 集群开始:
使用便捷脚本添加新成员(推荐):
或者手动操作。首先使用 etcdctl member add 向现有 etcd 集群宣告新的学习者实例 etcd-2 即将到来:
使用 etcdctl member list(或 em list)检查成员列表,我们可以看到一个 unstarted 新成员:
接下来使用 etcd.yml 剧本初始化新的 etcd 实例 etcd-2,完成后,我们可以看到新成员已经启动:
新成员初始化完成并稳定运行后,可以将新成员从学习者提升为追随者:
新成员添加完成,请不要忘记 重载配置 ,让所有客户端也知道新成员的存在。
重复以上步骤,可以添加更多成员。记住,生产环境中至少要使用 3 个成员。
移除成员
推荐方式:使用便捷脚本
使用 bin/etcd-rm 脚本是从 etcd 集群移除成员的推荐方式:
脚本会自动完成以下操作:
- 从集群中优雅地移除成员
- 停止并禁用 etcd 服务
- 清理数据和配置文件
- 从监控系统中注销
手动方式:分步操作
要从 etcd 集群中删除一个成员实例,通常需要以下步骤:
- 从配置清单中移除:注释或删除该实例,并 重载配置
- 从集群中踢除:使用
etcdctl member remove命令 - 清理实例:使用
etcd-rm.yml剧本清理实例
详细步骤:从etcd集群移除成员
让我们以一个 3 节点的 etcd 集群为例,从中移除 3 号实例。
方法一:使用便捷脚本(推荐)
脚本会自动完成所有操作,包括从集群中移除成员、停止服务、清理数据。
方法二:手动操作
首先,为了刷新配置,您需要 注释 待删除的成员,然后 重载配置,让所有客户端都不要再使用此实例。
然后,使用移除剧本:
剧本会自动执行以下操作:
- 获取成员列表并找到对应的成员 ID
- 执行
etcdctl member remove从集群中踢除 - 停止 etcd 服务
- 清理数据和配置文件
如果需要手动操作,可以这样做:
执行完毕后,您可以将其从配置清单中永久删除,移除成员至此完成。
重复以上步骤,可以移除更多成员,与添加成员配合使用,可以对 etcd 集群进行滚动升级搬迁。
便捷脚本
Pigsty v3.6+ 提供了便捷脚本简化 etcd 集群的扩容和缩容操作:
bin/etcd-add
向现有 etcd 集群添加新成员:
脚本功能:
- 验证 IP 地址是否在配置清单中定义
- 自动设置
etcd_init=existing参数 - 执行
etcd.yml剧本完成成员添加 - 操作完成后提示配置刷新命令
bin/etcd-rm
从 etcd 集群移除成员或整个集群:
脚本功能:
- 提供安全警告和确认倒计时
- 自动执行
etcd-rm.yml剧本 - 优雅地从集群中移除成员
- 清理数据和配置文件
14.4 - 剧本
有一个内置的 playbook:etcd.yml 用于 etcd 集群安装。
etcd.yml
要创建新的 etcd 集群,运行以下 playbook:
以下是可用的子任务:
etcd_assert:生成 etcd 身份etcd_install:安装 etcd rpm 包etcd_dir:创建 etcd 数据和配置目录etcd_config:生成 etcd 配置etcd_conf:生成 etcd 主配置etcd_cert:生成 etcd ssl 证书
etcd_launch:启动 etcd 服务etcd_register:向 prometheus 注册 etcd
如果您想向现有 etcd 集群追加新成员,
您必须将其添加到配置清单中,并使用 etcd_init = existing
对新成员运行 playbook:
通常重新运行 playbook 是可以的,它会更新 etcd 集群配置并重启 etcd 实例。
从 Pigsty v3.6+ 开始,etcd.yml playbook 不再具有集群移除功能。请使用专用的 etcd-rm.yml playbook 和 etcd_remove 角色进行 etcd 集群移除操作。
etcd-rm.yml
要移除 etcd 集群,运行以下 playbook:
以下是可用的子任务:
etcd_safeguard:检查安全防护并在启用时中止prometheus:从 prometheus 移除 etcd 目标注册etcd_leave:在清除前尝试优雅地离开 etcd 集群etcd_stop:使用 systemd 停止并禁用 etcd 服务etcd_data:移除 etcd 数据(使用etcd_rm_data=false禁用)etcd_pkg:卸载 etcd 包(使用etcd_rm_pkg=true启用)
要从现有 etcd 集群中移除成员,您可以运行 playbook
移除 playbook 使用新的 etcd_remove 角色,具有可配置参数:
etcd_safeguard:设置为true时防止意外移除etcd_rm_data:控制是否删除 ETCD 数据(默认为true)etcd_rm_pkg:控制是否卸载 ETCD 包(默认为false)
14.5 - 监控
仪表板
ETCD 模块提供一个监控仪表板:Etcd Overview。
ETCD Overview:ETCD 集群概览
该仪表板提供有关 ETCD 状态的关键信息,其中最值得注意的是 ETCD Aliveness,它显示 ETCD 集群的整体服务状态。
红色条带表示实例不可用的时期,而下方的蓝灰色条带显示整个集群不可用的时期。
告警规则
Pigsty 为 INFRA 模块提供以下两个告警规则:
| 告警规则 | 描述 | 严重程度 |
|---|---|---|
EtcdServerDown |
Etcd 节点宕机,关键告警 | Critical |
EtcdNoLeader |
Etcd 集群没有领导者,关键告警 | Critical |
EtcdQuotaFull |
Etcd 配额使用率超过 90%,警告 | Warning |
EtcdNetworkPeerRTSlow |
Etcd 网络延迟慢,提醒 | Notice |
EtcdWalFsyncSlow |
Etcd 磁盘 fsync 慢,提醒 | Notice |
您可以在 files/prometheus/rules/etcd.yml 中修改或添加新的 etcd 告警规则。
14.6 - 常见问题
etcd集群起什么作用?
etcd 是一个分布式的、可靠的键-值存储,用于存放系统中最为关键的数据,Pigsty 使用 etcd 作为 Patroni 的 DCS(分布式配置存储)服务,用于存储 PostgreSQL 集群的高可用状态信息。
Patroni 将通过 etcd,实现集群故障检测、自动故障转移、主从切换,集群配置管理等功能。
etcd 对于 PostgreSQL 集群的高可用至关重要,而 etcd 本身的可用性与容灾,是通过使用多个分布式的节点来保证的。
etcd集群使用多大规模合适?
如果超过集群成员数一半(包括正好一半)的 etcd 实例不可用,那么 etcd 集群将进入不可用状态,拒绝对外提供服务。
例如:使用 3 节点的 etcd 集群允许最多一个节点宕机,而其他两个节点仍然可以正常工作;而使用 5 节点的 etcd 集群则可以容忍 2 节点失效。
请注意,etcd 集群中的 学习者(Learner)实例不计入成员数,因此在 3 节点 etcd 集群中,如果有一个学习者实例,那么实际上成员数量为 2,不能容忍任一节点失效。
在生产环境中,我们建议使用奇数个 etcd 实例,对于生产环境,建议使用 3 节点或 5 节点的 etcd 集群部署以确保足够的可靠性。
etcd集群不可用会有什么影响?
如果 etcd 集群不可用,那么会影响 PostgreSQL 的管控平面,但不会影响数据平面 —— 现有的 PostgreSQL 集群将继续运行,但通过 Patroni 进行的管理操作将无法执行。
etcd 故障期间,PostgreSQL 高可用将无法实现自动故障转移,您也无法使用 patronictl 对 PostgreSQL 集群发起管理操作,例如修改配置,执行手动故障转移等。
通过 Ansible 发起的管理命令不受 etcd 故障影响:例如创建数据库,创建用户,刷新 HBA 与 Service 配置等,etcd 故障期间,您依然可以直接操作 PostgreSQL 集群来实现这些功能。
请注意,以上描述的行为仅适用于较新版本的 Patroni (>=3.0,对应 Pigsty >= 2.0)。如果您使用的是较老版本的 Patroni (<3.0,对应 Pigsty 版本为 1.x),则 etcd / consul 故障会引发极为严重的全局性影响: 所有 PostgreSQL 集群将发生降级:主库将降级为从库,拒绝写请求,etcd 故障将放大为全局性 PostgreSQL 故障。在 Patroni 3.0 引入 DCS Failsafe 功能后,这种情况得到了显著改善。
etcd集群中存储着什么数据?
在 Pigsty 中,etcd 仅用于 PostgreSQL 高可用,并不会用于存储任何其他配置或状态数据。
而 PG 高可用组件 Patroni 会自动生成并管理 etcd 中的数据,当这些数据在 etcd 中丢失时,Patroni 会自动重建。
因此默认情况下,Pigsty 中的 etcd 可以视作 “无状态服务”,可以进行销毁与重建,这为维护工作带来了极大的便利。
如果您将 etcd 用于其他目的,例如作为 Kubernetes 的元数据存储,或自行存储其他数据,那么您需要自行备份 etcd 数据,并在 etcd 集群恢复后进行数据恢复。
如何从etcd故障中恢复?
因为 Pigsty 中的 etcd 只用于 PostgreSQL 高可用,本质上是可销毁、可重建的 “无状态服务”,因此在出现故障时,您可以通过 “重启” / “重置” 来进行快速止血。
要 重启 etcd 集群,您可以使用以下 Ansible 命令:
要 重置 etcd 集群,您可以直接执行以下剧本,实现覆盖抹除式重装:
如果您自行使用 etcd 存储了其他数据,那么通常需要备份 etcd 数据,并在 etcd 集群恢复后进行数据恢复。
维护etcd有什么注意事项?
简单的版本是:不要写爆 etcd 就好。
Pigsty v2.6+ 默认启用了 etcd 自动压实(Auto Compact)和 16GB 的后端存储配额,通常无需担心写满 etcd 的问题。
etcd 的数据模型 使得每一次写入都会产生一个新的版本。 因此如果您的 etcd 集群频繁写入,即使只有极个别的 Key,etcd 数据库的大小也可能会不断增长。 当达到容量上限时,etcd 将会拒绝写入请求,这可能导致依赖 etcd 的 PostgreSQL 高可用机制无法正常工作。
Pigsty 默认的 etcd 配置已包含以下优化:
更多维护细节请阅读 etcd 官方文档维护指南。
对于 Pigsty v2.6 之前的版本,请参照下面的说明手动启用 etcd 自动垃圾回收。
如何启动etcd自动垃圾回收?
如果您使用的早先版本的 Pigsty (v2.0 - v2.5),我们强烈建议您通过以下步骤,在生产环境中启用 etcd 的自动压实功能,从而避免 etcd 容量配额写满导致的 etcd 不可用故障。
在 Pigsty 源码目录中,编辑 etcd 配置文件模板:roles/etcd/templates/etcd.conf,添加以下三条配置项:
然后将所有相关 PostgreSQL 集群设置为 维护模式 后,重新使用 ./etcd.yml 覆盖部署 etcd 集群即可。
该配置会将 etcd 默认的容量配额从 2 GiB 提高到 16 GiB,并确保只保留最近一天的写入历史版本,从而避免了 etcd 数据库大小的无限增长。
etcd中的PostgreSQL高可用数据存储在哪里?
默认情况下,Patroni 使用 pg_namespace 指定的前缀(默认为 /pg)作为所有元数据键的前缀,随后是 PostgreSQL 集群名称。
例如,名为 pg-meta 的 PG 集群,其元数据键将存储在 /pg/pg-meta 下。
其中的数据样本如下所示:
如何使用一个外部的已经存在的 etcd 集群?
配置清单中硬编码了所使用 etcd 的分组名为 etcd,这个分组里的成员将被用作 PGSQL 的 DCS 服务器。您可以使用 etcd.yml 对它们进行初始化,或直接假设它是一个已存在的外部 etcd 集群。
要使用现有的外部 etcd 集群,只要像往常一样定义它们即可,您可以跳过 etcd.yml 剧本的执行,因为集群已经存在,不需要部署。
但用户必须确保 现有 etcd 集群证书是由 Pigsty 使用的相同 CA 签名颁发的。否则客户端无法使用 Pigsty 自签名 CA 颁发的证书来访问外部的 etcd 集群。
如何向现有etcd集群添加新的成员?
详细过程,请参考向 etcd 集群添加成员
推荐方式:使用便捷脚本
手动方式:
请注意,我们建议一次只添加一个新成员。
如何从现有etcd集群中移除成员?
详细过程,请参考从 etcd 集群中移除成员
推荐方式:使用便捷脚本
手动方式:
15 - MinIO
Min.IO:兼容 S3 的开源多云对象存储服务,设计为可扩展、安全且便捷。 它具有原生的多节点多驱动器 HA 支持,可以存储文档、图片、视频和备份。它是 Pigsty 中的一个 可选模块。
您可以使用 MinIO 作为可选的 PostgreSQL 备份 存储仓库,除了默认的本地 posix FS 仓库之外。如果使用 MinIO 仓库,
MINIO 模块应该在任何 PGSQL 模块之前安装。MinIO 需要受信任的 CA 才能工作,所以您必须在 NODE 之后安装它。
配置 minio 模块,并使用多个 minio 节点。
使用 22 个参数自定义 minio 组件
创建、移除、扩展、收缩、升级 minio 集群
可在此模块中使用的 Ansible 剧本
仪表板、指标、记录和告警规则。
如何使用 mcli 和配置备份仓库
15.1 - 使用
MinIO 集群 配置 并通过 剧本 部署完成后,您可以按照以下说明开始使用和访问 MinIO 集群。
部署集群
使用 Pigsty 部署单节点 MinIO 实例非常简单。
在 配置清单 中定义它,然后运行剧本:
install.yml 剧本将自动创建清单中定义的 MinIO 集群,因此如果您选择默认的一次性安装,无需手动运行 minio.yml 剧本。
如果您计划部署生产级大规模多节点 MinIO 集群,我们 强烈 建议您在开始之前阅读 Pigsty MinIO 配置文档 和 MinIO 官方文档。
访问集群
您必须通过 HTTPS 访问 MinIO,因此请确保默认的 minio 服务域名(sss.pigsty)指向正确的位置:
- 您可以在
node_etc_hosts中添加静态解析记录或手动修改/etc/hosts文件 - 如果您正在使用 DNS 服务,可以在内部 DNS 服务器上添加记录
- 如果您正在使用基础设施节点上的 DNSMASQ,可以在
dns_records中添加记录
建议使用第一种方法:静态 DNS 解析记录,以避免 MinIO 在生产环境中对 DNS 的额外依赖。
您必须将 MinIO 服务域名指向 MinIO 服务器节点的 IP 地址和服务端口,或负载均衡器的 IP 地址和服务端口。Pigsty 将使用默认域名 sss.pigsty 和默认端口 9000。
例如,如果您使用 haproxy 来暴露 MinIO 服务 像这样,端口可能是 9002。
添加别名
要使用 mcli 客户端访问 MinIO 服务器集群,您需要首先配置服务器别名:
在管理节点的管理用户上有一个预配置的名为 sss 的 MinIO 别名,您可以直接使用它。
关于 MinIO 客户端工具 mcli 的完整功能,请参考文档:MinIO Client。
管理用户
您可以使用 mcli 在 MinIO 中管理业务用户,例如,您可以使用命令行创建两个默认业务用户:
管理桶
您可以使用 mcli 管理桶:
管理对象
您可以使用 cli 执行对象 CRUD 操作,例如:
详细信息请查看 教程:对象管理
使用 rclone
Pigsty 仓库中提供了 rclone,这是一个方便的云对象存储客户端,您可以使用它来访问 MinIO 服务。
备份仓库
在 Pigsty 中,MinIO 默认用作 pgBackRest 的备份仓库。当您将 pgbackrest_method 修改为 minio 时,PGSQL 模块将自动将备份仓库切换到 MinIO。
请注意,如果您通过负载均衡器使用 MinIO,您应该在此处使用相应的域名和端口号。
15.2 - 集群配置
在部署 MinIO 之前,你需要在 配置清单 中定义一个 MinIO 集群,MinIO 有三种经典部署模式:
- 单机单盘:SNSD:单机单盘模式,可以使用任意目录作为数据盘,仅作为开发、测试、演示使用。
- 单机多盘:SNMD:折中模式,在单台服务器上使用多块磁盘 (>=2),仅当资源极为有限时使用。
- 多机多盘:MNMD:多机多盘模式,标准生产环境部署,具有最好的可靠性,但需要多台服务器。
通常我们建议使用 SNSD 与 MNMD 这两种模式,前者用于开发测试,后者用于生产部署,SNMD 仅在资源有限(只有一台服务器)的情况下使用。
此外,还可以使用 多池部署 来实现现有 MinIO 集群的扩容,或者直接部署 多套集群。
使用多节点 MinIO 集群时,访问任意节点都可以获取服务,因此最佳实践是在 MinIO 集群前使用负载均衡与高可用服务接入机制。
核心参数
MinIO 部署中,MINIO_VOLUMES 是一个核心配置参数,用于指定 MinIO 的部署模式。
Pigsty 提供了一些便捷的参数用于自动根据配置清单,生成 MINIO_VOLUMES 与其他配置参数的值,但您也可以直接指定它们。
- 单机单盘:
MINIO_VOLUMES指向本机上的一个普通目录,默认由minio_data指定,默认位置为/data/minio。 - 单机多盘:
MINIO_VOLUMES指向本机上的序列挂载点,同样是由minio_data指定,但需要用特殊语法显式覆盖指定真实挂载点,例如/data{1...4}。 - 多机多盘:
MINIO_VOLUMES指向多台服务器上的序列挂载点,由以下两部分自动组合生成:- 首先要使用
minio_data指定集群每个成员的磁盘挂载点序列/data{1...4}, - 还需要使用
minio_node指定节点的命名模式${minio_cluster}-${minio_seq}.pigsty
- 首先要使用
- 多池部署: 您需要显式指定
minio_volumes参数来分配每个存储池的节点,从而实现集群扩容
单机单盘
SNSD 模式,部署参考教程:MinIO 单机单盘部署
在 Pigsty 中,定义一个单例 MinIO 实例非常简单:
单机模式下,唯一必要的参数是 minio_seq 和 minio_cluster,它们会唯一标识每一个 MinIO 实例。
单节点单磁盘模式仅用于开发目的,因此您可以使用一个普通的目录作为数据目录,该目录由参数 minio_data 默认为 /data/minio。
在您使用 MinIO 时,强烈建议您通过静态解析的域名记录访问 MinIO,例如,假设 minio_domain 设置的内部服务域名使用了默认的 sss.pigsty,
那么您可以在所有节点上添加一个静态解析,便于其他节点访问此服务。
单节点单盘模式应当仅用于开发、测试、演示目的,因为它无法容忍任何硬件故障,也无法带来多磁盘的性能改善。生产环境请使用 多机多盘 模式。
单机多盘
SNMD 模式,部署参考教程:MinIO 单机多盘部署
要在单节点上使用多块磁盘,所需的操作与 单机单盘 基本一致,但用户需要以 {{ prefix }}{x...y} 的特定格式指定 minio_data,该格式定义了序列磁盘挂载点。
请注意,SNMD 模式不支持使用普通目录作为数据目录。如果您使用 SNMD 模式拉起 MinIO,但数据目录不是有效的磁盘挂载点,MinIO 将拒绝启动。请确保使用 XFS 格式化的真实磁盘。
例如 Vagrant MinIO 沙箱 定义了一个带有4块磁盘的单节点 MinIO 集群:/data1、/data2、/data3 和 /data4。启动 MinIO 之前,你需要正确地挂载它们(请务必使用 xfs 格式化磁盘):
挂载磁盘属于服务器置备的部分,超出 Pigsty 的处理范畴。挂载的磁盘应该同时写入 /etc/fstab 以便在服务器重启后可以自动挂载。
SNMD 模式可以利用单机上的多块磁盘,提供更高的性能和容量,并且容忍部分磁盘故障。 但单节点模式无法容忍整个节点的故障,而且您无法在运行时添加新的节点,因此如果没有特殊原因,我们不建议在生产环境中使用 SNMD 模式。
多机多盘
MNMD 模式,部署参考教程:MinIO 多机多盘部署
除了需要 单机多盘 模式中的 minio_data 指定磁盘驱动器,使用MinIO 多节点部署需要使用一个额外的 minio_node 参数。
例如,以下配置定义了一个 MinIO 集群,其中有四个节点,每个节点有四块磁盘:
minio_node 参数指定了 MinIO 节点名称的模式,用于生成每个节点的唯一名称。
默认情况下,节点名称是 ${minio_cluster}-${minio_seq}.pigsty,其中 ${minio_cluster} 是集群名称,${minio_seq} 是节点序号。
MinIO 实例的名称非常重要,会自动写入到 MinIO 节点的 /etc/hosts 中进行静态解析。MinIO 依靠这些名称来识别并访问集群中的其他节点。
在这种情况下,MINIO_VOLUMES 将被设置为 https://minio-{1...4}.pigsty/data{1...4} ,以标识四个节点上的四块盘。
您可以直接在 MinIO 集群中指定 minio_volumes 参数,来覆盖自动根据规则生成的值。
但通常不需要这样做,因为 Pigsty 会自动根据配置清单生成它。
多池部署
MinIO 的架构允许通过添加新的存储池来扩容。在 Pigsty 中,您可以通过显式指定 minio_volumes 参数来分配每个存储池的节点,从而实现集群扩容。
例如,假设您已经创建了 多机多盘 样例中定义的 MinIO 集群,现在您想要添加一个新的存储池,同样由四个节点构成。
那么,你需要直接覆盖指定 minio_volumes 参数:
在这里,空格分割的两个参数分别代表两个存储池,每个存储池有四个节点,每个节点有四块磁盘。更多关于存储池的信息请参考 管理预案:MinIO集群扩容
多套集群
您可以将新的 MinIO 节点部署为一个全新的 MinIO 集群,使用不同的集群名称定义一个新的分组即可,以下配置声明了两个独立的 MinIO 集群:
请注意,Pigsty 默认一套部署中只有一个 MinIO 集群,如果您需要部署多个 MinIO 集群,那么一些带有默认值的参数需要显式设置,无法省略,否则会出现命名冲突,如上所示。
服务接入
MinIO 默认使用 9000 端口提供服务。多节点 MinIO 集群可以通过访问 任意一个节点 来访问其服务。
服务接入属于 NODE 模块的功能范畴,这里仅做基本介绍。
多节点 MinIO 集群的高可用接入可以使用 L2 VIP 或 HAProxy 实现。例如,您可以选择使用 keepalived 在 MinIO 集群上绑定一个 L2 VIP,
或者使用由 NODE 模块的提供的 haproxy 组件,通过负载均衡器对外暴露 MinIO 服务。
例如,上面的配置块为 MinIO 集群的所有节点上启用了 HAProxy ,在 9002 端口上暴露 MinIO 服务,同时为集群绑定了一个二层 VIP。
当使用时,用户应当将 sss.pigsty 域名解析指向 VIP 地址 10.10.10.9,并使用 9002 端口访问 MinIO 服务。这样当任意一个节点发生故障时,VIP 会自动切换到另一个节点,保证服务的高可用性。
在这种情况下,您通常还需要在全局修改域名解析的目的地,以及 minio_endpoint 参数,修改写入管理节点 MinIO Alias 对应的端点地址:
专用负载均衡
Pigsty 允许用户使用专用的负载均衡服务器组,而不是集群本身来运行 VIP 与 HAProxy。例如 prod 模板中就使用了这种方式。
在这种情况下,您通常还需要在全局修改 MinIO 域名的解析,将 sss.pigsty 指向负载均衡器的地址,并修改 minio_endpoint 参数,修改写入管理节点 MinIO Alias 对应的端点地址:
访问服务
如果您想要访问上面通过 HAProxy 暴露的 MinIO,以 PGSQL 备份配置为例,可以修改 pgbackrest_repo 中的配置,添加新的备份仓库定义:
暴露管控
MinIO 默认通过 9001 端口(由 minio_admin_port 参数指定)提供Web管控界面。
将后台管理界面暴露给外部可能存在安全隐患。如果你希望这样做,请将 MinIO 添加到 infra_portal 并刷新 Nginx 配置。
请注意,MinIO 管控页面需要使用 HTTPS,请 不要 在生产环境中暴露未加密的 MinIO 管控页面。
这意味着,您通常需要在您的 DNS 服务器,或者本机 /etc/hosts 中添加 m.pigsty 的解析记录,以便访问 MinIO 管控页面。
与此同时,如果您使用的是 Pigsty 自签名的 CA 而不是一个正规的公共 CA ,通常您还需要手工信任该 CA 或证书,才能跳过浏览器中的 “不安全” 提示信息。
15.3 - 参数
MinIO 是一个兼容 S3 的对象存储服务。它被用作 PostgreSQL 的可选中央备份存储仓库。
您也可以将其用于其他目的,例如存储大文件、文档、图片和视频。
参数
MinIO 模块记录 21 项设置:16 个 MINIO 参数、2 个可覆盖的派生值,以及 3 个 MINIO_REMOVE 参数。
| 参数 | 类型 | 层级 | 注释 |
|---|---|---|---|
minio_seq |
int | I | minio 实例标识符,必需 |
minio_cluster |
string | C | minio 集群名称,默认为 minio |
minio_user |
username | C | minio 操作系统用户,默认为 minio |
minio_https |
bool | G | 为 minio 使用 https,默认为 true |
minio_node |
string | C | minio 节点名称模式 |
minio_data |
path | C | minio 数据目录,使用 {x...y} 指定多个驱动器 |
minio_volumes |
string | C | minio 核心参数,指定节点和磁盘,默认自动生成 |
minio_domain |
string | G | minio 外部域名,默认为 sss.pigsty |
minio_port |
port | C | minio 服务端口,默认为 9000 |
minio_admin_port |
port | C | minio 控制台端口,默认为 9001 |
minio_access_key |
username | C | root 访问密钥,默认为 minioadmin |
minio_secret_key |
password | C | root 密钥,默认为 minioadmin |
minio_extra_vars |
string | C | minio 服务器的额外环境变量 |
minio_provision |
bool | G/C | 运行 minio 置备任务? |
minio_alias |
string | G | 本地 minio 部署的别名 |
minio_endpoint |
string | C | 上述 minio 别名对应的 host:port |
minio_buckets |
bucket[] | C | 要创建的 minio 桶列表 |
minio_users |
user[] | C | 要创建的 minio 用户列表 |
| 参数 | 类型 | 层级 | 注释 |
|---|---|---|---|
minio_safeguard |
bool | G/C/A | 防止意外移除?(默认:false) |
minio_rm_data |
bool | G/C/A | 移除期间删除 minio 数据?(默认:true) |
minio_rm_pkg |
bool | G/C/A | 移除期间卸载 minio 包?(默认:false) |
minio_volumes 和 minio_endpoint 是自动生成的参数,但您可以显式覆盖这两个参数。
默认值
MINIO 共有 18 项设置(含 2 个派生值),定义于 roles/minio/defaults/main.yml 中
MINIO_REMOVE 共有 3 个参数,定义于 roles/minio_remove/defaults/main.yml 中:
minio_seq
名称:minio_seq,类型:int,层级:I
minio 实例标识符,必需的身份参数。没有默认值,您必须手动分配它
minio_cluster
名称:minio_cluster,类型:string,层级:C
minio 集群名称,默认为 minio。这在部署多个 MinIO 集群时很有用
minio_user
名称:minio_user,类型:username,层级:C
minio 操作系统用户名,默认为 minio
minio_https
名称:minio_https,类型:bool,层级:G
为 MinIO 服务使用 HTTPS 还是 HTTP,默认为 true,表示使用 HTTPS。
请注意,pgbackrest 需要 MinIO HTTPS 才能正常工作,但如果您不将 minio 用于此目的,并且不想为 MinIO 使用 HTTPS,您可以将其设置为 false。
minio_node
名称:minio_node,类型:string,层级:C
minio 节点名称模式,这用于 多节点 部署
默认值:${minio_cluster}-${minio_seq}.pigsty
minio_data
名称:minio_data,类型:path,层级:C
minio 数据目录
默认值:/data/minio,这是 单节点 部署的通用目录。
对于 多驱动器 部署,您可以使用 {x...y} 概念来指定多个驱动器。
minio_volumes
名称:minio_volumes,类型:string,层级:C
MinIO 的唯一核心参数,如果未指定,将按以下规则自动生成:
- 在 SNSD 或 SNMD 部署的情况下,
minio_volumes直接使用minio_data的值 - 在 MNMD 部署的情况下,
minio_volumes使用minio_node、minio_port、minio_data的值来生成此参数: - 在多个存储池的情况下,您必须覆盖
minio_volumes来显式指定多个节点池。
用户有责任确保 minio_volumes 中使用的参数与 minio_node、minio_port、minio_data 一致。
minio_domain
名称:minio_domain,类型:string,层级:G
minio 服务域名,默认为 sss.pigsty。
客户端可以通过此域名访问 minio S3 服务。此名称将注册到本地 DNSMASQ 并包含在 SSL 证书中。
minio_port
名称:minio_port,类型:port,层级:C
minio 服务端口,默认为 9000
minio_admin_port
名称:minio_admin_port,类型:port,层级:C
minio 控制台端口,默认为 9001
minio_access_key
名称:minio_access_key,类型:username,层级:C
root 访问密钥,默认为 minioadmin
minio_secret_key
名称:minio_secret_key,类型:password,层级:C
root 密钥,默认为 minioadmin
默认值:minioadmin
在您的部署中更改此密码非常重要!
minio_extra_vars
名称:minio_extra_vars,类型:string,层级:C
minio 服务器的额外环境变量。查看 Minio Server 获取完整列表。
默认值为空字符串,您可以使用多行字符串传递多个环境变量。
minio_alias
名称:minio_alias,类型:string,层级:G
本地 MinIO 集群的 MinIO 别名
默认值:sss,将写入基础设施节点/管理用户的客户端别名配置文件。
minio_endpoint
名称:minio_endpoint,类型:string,层级:C
上述 MinIO 别名对应的 host:port。此参数默认未定义。
如果未定义,将被以下默认值覆盖:
此别名和端点将添加到管理节点上的管理用户。
minio_buckets
名称:minio_buckets,类型:bucket[],层级:C
默认要创建的 minio 桶列表:
默认创建三个桶,具有不同的策略。
pgsql 桶默认用于 PostgreSQL 备份。而 meta 和 data 是用于其他目的的开放桶。
例如,supabase 模板可能使用 data 桶来存储业务数据。
如果您有需要版本控制的重要元数据,可以开箱即用地使用 meta 桶。
每个桶都有相应的策略,名称与桶名相同。例如,pgsql 策略对 pgsql 桶有所有权限,等等。
您还可以在桶定义中添加 lock 标志,这将启用对象锁定功能,以防止意外删除桶中的对象。
minio_users
名称:minio_users,类型:user[],层级:C
要创建的 minio 用户列表,默认值:
为 PostgreSQL DBA 和 pgBackREST 创建默认用户。
请在严肃的生产部署中更改这些密码。
minio_safeguard
名称:minio_safeguard,类型:bool,层级:G/C/A
防止意外移除?默认值为 false
如果启用,minio-rm.yml 剧本将中止并拒绝移除 MinIO 集群,提供防止意外删除的保护。
minio_rm_data
名称:minio_rm_data,类型:bool,层级:G/C/A
移除期间删除 minio 数据?默认值为 true
启用时,minio-rm.yml 剧本将在集群移除期间删除 MinIO 数据目录和配置文件。
minio_rm_pkg
名称:minio_rm_pkg,类型:bool,层级:G/C/A
移除期间卸载 minio 包?默认值为 false
启用时,minio-rm.yml 剧本将在集群移除期间卸载 MinIO 包。默认禁用此功能,以保留 MinIO 安装以供将来可能使用。
15.4 - 管理
以下是 MinIO 的一些管理标准操作程序:
查看 MINIO: FAQ 了解更多问题。
创建集群
要创建 MinIO 集群,首先在 清单 中定义 minio 集群:
minio_cluster 参数将此集群标记为 MinIO 集群,minio_seq 是 MinIO 节点的序列号,用于生成 MinIO 节点名称如 minio-1、minio-2 等。
此代码片段定义了一个单节点 MinIO 集群,使用以下命令创建 MinIO 集群:
移除集群
要销毁现有的 MinIO 集群,使用专用的 minio-rm.yml 剧本:
您也可以使用参数自定义移除过程:
传统方法(已弃用):
自 Pigsty v3.6+ 起,MinIO 集群移除已移至使用 minio_remove 角色的专用 minio-rm.yml 剧本。移除过程中会自动清理 prometheus 监控目标。
扩展集群
您无法在节点/磁盘级别扩展 MinIO,但可以在存储池(多个节点)级别扩展。
假设您有一个 4 节点的 MinIO 集群,想通过添加另一个四节点存储池来将容量翻倍。
步骤 1,在组中添加 4 个节点定义,分配序列号 5 到 8。
关键步骤是修改 minio_volumes 参数,将新的 4 个节点分配到新的 存储池。
步骤 2,将这些节点添加到 Pigsty:
步骤 3,使用 minio_install 子任务在新节点上置备 MinIO(用户、目录、包等):
步骤 4:使用 minio_config 子任务在 整个集群 上重新配置整个 MinIO 集群
也就是说,现有 4 个节点的
MINIO_VOLUMES配置也会被更新
步骤 5:同时重启整个 MinIO 集群(注意,不要滚动重启!):
步骤 6:这是 可选的,如果您使用负载均衡器,请确保负载均衡器配置已更新。
例如,将新的四个节点添加到负载均衡器配置:
然后运行 node.yml 剧本的 haproxy 子任务来更新负载均衡器配置:
如果节点 L2 VIP 也用于确保可靠的负载均衡器访问,您还需要将新节点(如果有)添加到现有的 NODE VIP 组:
收缩集群
MinIO 无法在节点/磁盘级别缩减,但您可以在存储池(多个节点)级别退役——添加新存储池,排空旧存储池,迁移到新存储池,然后退役旧存储池。
升级集群
首先,将新版本的 MinIO 软件包下载到 INFRA 节点的本地软件仓库:
- minio:
- mcli:
然后重建软件仓库:
您可以使用 Ansible package 模块升级所有 MinIO 软件包:
最后,通知 MinIO 集群使用 mc 命令行工具重启:
节点故障恢复
磁盘故障恢复
15.5 - 剧本
您必须在运行剧本之前在 配置清单 中 配置 minio 集群。
剧本
有两个内置的 MinIO 集群管理剧本:
minio.yml用于安装 MinIO 集群minio-rm.yml用于移除 MinIO 集群
minio.yml
minio-id: 生成 minio 身份minio_install: 安装 minio/mcliminio_os_user: 创建操作系统用户 miniominio_pkg: 安装 minio/mcli 包minio_dir: 创建 minio 目录
minio_config: 生成 minio 配置minio_conf: minio 主配置minio_cert: minio ssl 证书minio_dns: 写入 minio dns 记录
minio_launch: 启动 minio 服务minio_register: 将 minio 注册到 prometheusminio_provision: 创建 minio 别名/桶/用户minio_alias: 创建 minio 客户端别名minio_bucket: 创建 minio 桶minio_user: 创建 minio 业务用户
自 Pigsty v3.6+ 起,minio.yml 剧本和 minio 角色专注于集群安装。所有移除操作已移至专用的 minio-rm.yml 剧本,使用 minio_remove 角色。
您应该在 Pigsty 管理的节点上安装 MINIO 模块(即,首先安装 NODE)。
受信任的 ca 文件:/etc/pki/ca.crt 应该已经存在于所有节点上。它在 role: ca 中生成,并在 role: node 中默认加载和信任。
minio-rm.yml
要 移除 MinIO 集群,运行以下剧本:
以下是可用的子任务:
minio_id: 为移除操作生成 minio 身份prometheus: 从 prometheus 移除 minio 目标注册minio_stop: 使用 systemd 停止并禁用 minio 服务minio_data: 移除 minio 数据(使用minio_rm_data=false禁用)minio_pkg: 卸载 minio 包(使用minio_rm_pkg=true启用)
移除剧本使用新的 minio_remove 角色,带有可配置参数:
minio_safeguard:设置为true时防止意外移除minio_rm_data:控制是否删除 MinIO 数据(默认为true)minio_rm_pkg:控制是否卸载 MinIO 包(默认为false)
命令
MINIO 剧本备忘单和常用命令
15.6 - 监控
仪表板
MINIO 模块提供一个仪表板。
MinIO Overview:单个 MinIO 集群的概览
告警规则
为 MinIO 预定义了 3 个告警规则,定义在 files/prometheus/rules/minio.yml 中:
MinioServerDownMinioNodeOfflineMinioDiskOffline
15.7 - FAQ
无法启动多节点/多驱动器 MinIO 集群。
在 多驱动器 或 多节点 模式下,如果数据目录不是有效的挂载点,MinIO 将拒绝启动。
为 MinIO 数据目录使用挂载的磁盘而不是普通目录。您只能在 单节点单驱动器 模式下使用普通目录。
如何部署多节点多驱动器 MinIO 集群?
如何向现有 MinIO 集群添加成员?
您最好在部署前规划 MinIO 集群…因为这需要全局重启
查看这个:扩展 MinIO 部署
如何为 PGSQL 使用 HA MinIO 部署?
使用可选的负载均衡器和不同端口访问 HA MinIO 集群。
这是一个示例:访问 MinIO 服务
16 - Redis
配置 PostgreSQL 集群
使用 21 个参数自定义 redis 组件
创建、移除、扩展 redis 集群
可在此模块中使用的 Ansible 剧本
仪表板、指标、记录和告警规则。
关于 redis 模块的常见问题
16.1 - 配置
Redis 的实体模型与 PostgreSQL 几乎相同, 也包括集群和实例的概念。这里的集群不是指原生 Redis 集群模式。
REDIS 模块与 PGSQL 模块的核心区别是 Redis 使用单节点多实例部署而不是 1:1 部署: 通常在一个物理/虚拟机节点上部署多个 Redis 实例以充分利用多核 CPU。 因此,配置和管理 Redis 实例的方式与 PGSQL 略有不同。
在 Pigsty 管理的 Redis 中,节点完全从属于集群,这意味着目前 不允许在一个节点上部署两个不同集群的 Redis 实例。 但是,这不影响在一个节点上部署多个独立的 Redis 主副本实例。
Redis 身份
Redis 身份参数 是定义 Redis 集群时的必需参数。
| 名称 | 属性 | 描述 | 示例 |
|---|---|---|---|
redis_cluster |
必需,集群级别 | 集群名称 | redis-test |
redis_node |
必需,节点级别 | 节点序列号 | 1,2 |
redis_instances |
必需,节点级别 | 实例定义 | { 6001 : {} ,6002 : {}} |
Redis 模式
Pigsty 中有三种可用的 redis_mode:
standalone:以独立(主从)模式设置 Rediscluster:将此 Redis 集群设置为 Redis 原生集群sentinel:将 Redis 设置为独立 Redis HA 的哨兵
以下是三个示例:
- 1 节点,一个主节点和一个从节点的 Redis 独立集群:
redis-ms - 1 节点,3 实例的 Redis 哨兵集群:
redis-sentinel - 2 节点,6 实例的 Redis 集群:
redis-cluster
限制
- 一个 Redis 节点只能属于一个 Redis 集群,这意味着您不能同时将一个节点分配给两个不同的 Redis 集群。
- 在每个 Redis 节点上,您需要为 Redis 实例分配唯一的端口号以避免端口冲突。
- 通常,同一个 Redis 集群将使用相同的密码,但 Redis 节点上的多个 Redis 实例不能设置不同的密码(因为 redis_exporter 只允许一个密码)。
- Redis 集群具有内置 HA,而独立 HA 需要在哨兵中手动配置,因为我们不确定您是否有可用的哨兵。 幸运的是,配置独立 Redis HA 很简单:使用哨兵配置 HA。
16.2 - 参数
redis 模块中有 21 个参数。
| 参数 | 类型 | 级别 | 注释 |
|---|---|---|---|
redis_cluster |
string | C | redis 集群名称,必需的身份参数 |
redis_instances |
dict | I | 此 redis 节点上的 redis 实例定义 |
redis_node |
int | I | redis 节点序列号,必需的节点整数 ID |
redis_fs_main |
path | C | redis 主数据挂载点,默认为 /data |
redis_exporter_enabled |
bool | C | 在 redis 节点上安装 redis exporter? |
redis_exporter_port |
port | C | redis exporter 监听端口,默认为 9121 |
redis_exporter_options |
string | C/I | redis exporter 的 cli 参数和额外选项 |
redis_safeguard |
bool | G/C/A | 防止清除正在运行的 redis 实例? |
redis_clean |
bool | G/C/A | 初始化期间清除现有的 redis? |
redis_rmdata |
bool | G/C/A | 清除 redis 服务器时移除 redis 数据? |
redis_mode |
enum | C | redis 模式:standalone、cluster、sentinel |
redis_conf |
string | C | redis 配置模板路径,除 sentinel 外 |
redis_bind_address |
ip | C | redis 绑定地址,空字符串将使用主机 IP |
redis_max_memory |
size | C/I | 每个 redis 实例使用的最大内存 |
redis_mem_policy |
enum | C | redis 内存逐出策略 |
redis_password |
password | C | redis 密码,空字符串将禁用密码 |
redis_rdb_save |
string[] | C | redis rdb 保存指令,使用空列表禁用 |
redis_aof_enabled |
bool | C | 启用 redis 追加文件? |
redis_rename_commands |
dict | C | 重命名 redis 危险命令 |
redis_cluster_replicas |
int | C | redis 集群中一个主节点的副本数量 |
redis_sentinel_monitor |
master[] | C | sentinel 主节点列表,仅限 sentinel 集群 |
默认值
默认参数在 roles/redis/defaults/main.yml 中定义
redis_cluster
名称:redis_cluster,类型:string,级别:C
redis 集群名称,必需的身份参数。
无默认值,您必须明确定义它。
符合正则表达式 [a-z][a-z0-9-]*,建议使用与组名相同的名称并以 redis- 开头
redis_node
名称:redis_node,类型:int,级别:I
redis 节点序列号,在 redis 集群中需要唯一的整数
您必须为每个 redis 节点明确定义节点 ID。整数从 0 或 1 开始。
redis_instances
名称:redis_instances,类型:dict,级别:I
此 redis 节点上的 redis 实例定义
无默认值,您必须使用此参数在每个 redis 节点上明确定义 redis 实例。
这是一个原生 redis 集群定义的示例
端口号在节点中应该是唯一的,value 中的 replica_of 应该是同一 redis 集群的实例成员。
redis_fs_main
名称:redis_fs_main,类型:path,级别:C
redis 主数据挂载点,默认为 /data
默认值:/data,并且 /data/redis 将用作 redis 数据目录。
redis_exporter_enabled
名称:redis_exporter_enabled,类型:bool,级别:C
在 redis 节点上安装 redis exporter?
默认值为 true,这将在此 redis_node 上启动一个 redis_exporter
redis_exporter_port
名称:redis_exporter_port,类型:port,级别:C
redis exporter 监听端口,默认为 9121
默认值:9121
redis_exporter_options
名称:redis_exporter_options,类型:string,级别:C/I
redis exporter 的 cli 参数和额外选项,将添加到 /etc/default/redis_exporter。
默认值为空字符串
redis_safeguard
名称:redis_safeguard,类型:bool,级别:G/C/A
防止清除正在运行的 redis 实例?
默认值为 false,如果设置为 true,且 redis 实例正在运行,初始化/移除 playbook 将立即中止。
redis_clean
名称:redis_clean,类型:bool,级别:G/C/A
初始化期间清除现有的 redis?
默认值为 true,这将在 redis 初始化或移除期间移除 redis 服务器。
redis_rmdata
名称:redis_rmdata,类型:bool,级别:G/C/A
清除 redis 服务器时移除 redis 数据?
默认值为 true,这将与 redis 实例一起移除 redis rdb / aof。
redis_mode
名称:redis_mode,类型:enum,级别:C
redis 模式:standalone、cluster、sentinel
默认值:standalone
standalone:将 redis 设置为独立(主从)模式cluster:将此 redis 集群设置为 redis 原生集群sentinel:为独立 redis HA 设置 redis 为 sentinel
redis_conf
名称:redis_conf,类型:string,级别:C
redis 配置模板路径,除 sentinel 外
默认值:redis.conf,这是 roles/redis/templates/redis.conf 中的模板文件。
如果您想使用自己的 redis 配置模板,可以将其放在 templates/ 目录中并将此参数设置为模板文件名。
请注意,redis sentinel 使用不同的模板文件,即 roles/redis/templates/redis-sentinel.conf
redis_bind_address
名称:redis_bind_address,类型:ip,级别:C
redis 绑定地址,空字符串将使用清单主机名
默认值:0.0.0.0,这将绑定到此主机上的所有可用 IPv4 地址
请在生产环境中仅绑定到内网 IP,即将此值设置为
''
redis_max_memory
名称:redis_max_memory,类型:size,级别:C/I
每个 redis 实例使用的最大内存,默认值:1GB
redis_mem_policy
名称:redis_mem_policy,类型:enum,级别:C
redis 内存逐出策略
默认值:allkeys-lru,查看 redis 逐出策略 获取更多详情
noeviction:达到内存限制时不保存新值。当数据库使用复制时,这适用于主数据库allkeys-lru:保留最近使用的键;移除最少使用的(LRU)键allkeys-lfu:保留经常使用的键;移除最少经常使用的(LFU)键volatile-lru:移除过期字段设置为 true 的最少使用键。volatile-lfu:移除过期字段设置为 true 的最少经常使用键。allkeys-random:随机移除键以为添加的新数据腾出空间。volatile-random:随机移除过期字段设置为 true 的键。volatile-ttl:移除过期字段设置为 true 且剩余生存时间(TTL)值最短的键。
redis_password
名称:redis_password,类型:password,级别:C/N
redis 密码,空字符串将禁用密码,这是默认行为
请注意,由于 redis_exporter 的实现限制,每个节点只能设置一个 redis_password。这通常不是问题,因为 pigsty 不允许在同一节点上部署两个不同的 redis 集群。
请在生产环境中使用强密码
redis_rdb_save
名称:redis_rdb_save,类型:string[],级别:C
redis rdb 保存指令,使用空列表禁用,查看 redis 持久化 获取详情。
默认值为 ["1200 1"]:如果至少 1 个键发生变化,每 20 分钟将数据集转储到磁盘:
redis_aof_enabled
名称:redis_aof_enabled,类型:bool,级别:C
启用 redis 追加文件?默认值为 false。
redis_rename_commands
名称:redis_rename_commands,类型:dict,级别:C
重命名 redis 危险命令,这是一个 k:v old: new 的字典
默认值:{},您可以通过设置此值来隐藏像 FLUSHDB 和 FLUSHALL 这样的危险命令,这是一个示例:
redis_cluster_replicas
名称:redis_cluster_replicas,类型:int,级别:C
redis 集群中一个主节点/主要节点的副本数量,默认值:1
redis_sentinel_monitor
名称:redis_sentinel_monitor,类型:master[],级别:C
只有当 redis_mode 设置为 sentinel 时才能使用。
此 sentinel 集群要监控的 redis 主节点列表。每个主节点定义为具有 name、host、port、password、quorum 键的字典。
name 和 host 是必需的,port、password、quorum 是可选的,quorum 用于为此主节点设置法定人数,通常大于 sentinel 实例的一半。
16.3 - 管理
这里是 Redis 的一些常见管理任务。更多详情请查看 FAQ: Redis。
初始化 Redis
初始化集群/节点/实例
您也可以使用包装脚本:
移除 Redis
移除集群/节点/实例
您也可以使用包装脚本:
重新加载 Redis
您可以部分运行 redis.yml 任务来重新配置 redis。
请注意,redis 无法在线重新加载;您必须重启 redis 才能使配置生效。
使用 Redis CLI
使用 redis-cli 访问 redis 实例:
Redis 还有一个 redis-benchmark,可用于基准测试和在 redis 服务器上生成负载:
复制 Redis
https://redis.io/commands/replicaof/
使用 Sentinel 的高可用
您必须使用您的 redis sentinel 手动为 redis 独立主从集群启用 HA。
以 4 节点沙盒为例,redis sentinel 集群 redis-meta 用于管理 redis-ms 独立集群。
如果您希望从 sentinel 中移除 redis 主节点,请使用 SENTINEL REMOVE <name>。
您可以使用 redis_sentinel_monitor 在 sentinel 集群上配置多个 redis 主节点。
并使用以下方式刷新 sentinel 集群上的主节点列表:
16.4 - 剧本
redis 有两个剧本:
redis.yml:创建 redis 集群 / 节点 / 实例redis-rm.yml:移除 redis 集群 / 节点 / 实例
redis.yml
剧本 redis.yml 将初始化 redis 集群/节点/实例:
redis-rm.yml
剧本 redis-rm.yml 将移除 redis 集群/节点/实例:
16.5 - 监控
仪表板
REDIS 模块有三个仪表板。
Redis 概览
Redis Overview:所有 Redis 实例的概览
Redis 集群
Redis Cluster:单个 redis 集群的概览
Redis 实例
Redis Instance:单个 redis 实例的概览
告警规则
Redis 有 6 个预定义的告警规则,定义在 files/prometheus/rules/redis.yml 中。
| 名称 | 描述 | 级别 |
|---|---|---|
RedisDown |
Redis 服务器宕机 | Critical |
RedisRejectConn |
Redis 实例拒绝连接 | Critical |
RedisRTHigh |
Redis 实例响应时间过高 | Warning |
RedisCPUHigh |
Redis 实例 CPU 使用率过高 | Warning |
RedisMemHigh |
Redis 实例内存使用率过高 | Warning |
RedisQPSHigh |
Redis 实例 QPS 过高 | Warning |
16.6 - FAQ
由于现有 redis 实例而中止
使用
redis_clean = true和redis_safeguard = false强制清理 redis 数据
当您运行 redis.yml 初始化已经运行的 redis 实例,并且 redis_clean 设置为 false 时会发生这种情况。
如果 redis_clean 设置为 true(且 redis_safeguard 也设置为 false),redis.yml playbook 将删除现有的 redis 实例并将其重新初始化为新实例,这使得 redis.yml playbook 完全幂等。
由于启用 redis_safeguard 而中止
当使用
redis_safeguard设置为true移除 redis 实例时会发生这种情况。
您可以禁用 redis_safeguard 来移除 Redis 实例。这就是 redis_safeguard 的作用。
如何在此节点上添加一个新的 redis 实例?
使用
bin/redis-add <ip> <port>在节点上部署新的 redis 实例。
如何从节点移除单个 redis 实例?
bin/redis-rm <ip> <port>从节点移除单个 redis 实例
17 - FERRET
MongoDB 已经失去了其开源吸引力,不再适合许多用例。 相比之下,PostgreSQL 提供强大的原生 JSON 支持,作为文档数据库的性能超越了 MongoDB。
因此,FerretDB 在 postgres 之上提供了与 mongo 线协议兼容的层,使 MongoDB 用户能够平滑迁移到 PostgreSQL 的优越平台。
FERRET 是 Pigsty 中的一个 可选 模块。
自 v2.0 以来,它需要 documentdb 扩展才能工作。
Pigsty 已经打包了这个扩展,并提供了一个 mongo.yml 模板,帮助您轻松部署 FerretDB 集群。
配置 ferret 模块,并使用多个 ferret 节点。
使用 9 个参数自定义 ferret 组件
创建、移除、扩展、收缩、升级 ferret 集群
可在此模块中使用的 Ansible 剧本
仪表板、指标、记录和告警规则。
如何使用 mcli 和配置备份仓库
17.1 - 使用方法
本文档介绍如何安装 MongoDB 客户端工具并连接到 FerretDB。
安装客户端工具
您可以使用 MongoDB 的命令行工具 MongoSH 来访问 FerretDB。
使用 pig 命令添加 MongoDB 仓库,然后使用 yum 或 apt 安装 mongosh:
安装完成后,您可以使用 mongosh 命令连接到 FerretDB。
连接到 FerretDB
您可以使用任何语言的 MongoDB 驱动程序通过 MongoDB 连接字符串访问 FerretDB。以下是使用 mongosh CLI 工具的示例:
使用连接字符串
FerretDB 的身份验证完全基于 PostgreSQL。由于 Pigsty 管理的 PostgreSQL 集群默认使用 scram-sha-256 认证方式,您必须在连接字符串中指定 PLAIN 认证机制:
连接字符串格式:
使用不同的用户
您可以使用任何已在 PostgreSQL 中创建的用户连接到 FerretDB:
基本操作
连接到 FerretDB 后,您可以像使用 MongoDB 一样进行操作。以下是一些基本操作示例:
数据库操作
集合操作
文档操作
索引操作
与 MongoDB 的差异
FerretDB 实现了 MongoDB 的线协议,但底层使用 PostgreSQL 存储数据。这意味着:
- MongoDB 命令会被翻译为 SQL 语句执行
- 大多数基本操作与 MongoDB 兼容
- 某些高级功能可能有差异或不支持
您可以查阅以下资源了解详细信息:
程序语言驱动
除了 mongosh 命令行工具,您还可以使用各种编程语言的 MongoDB 驱动程序连接到 FerretDB:
Python
Node.js
Go
关键点:所有驱动程序都需要在连接字符串中指定 authMechanism=PLAIN 参数。
17.2 - 配置
FerretDB 集群
在部署 Mongo (FerretDB) 集群之前,您需要使用相关 参数 在清单中定义它。
以下示例使用默认的单节点 pg-meta 集群的 meta 数据库作为 FerretDB 的底层存储:
这里,mongo_cluster 和 mongo_seq 是基本的身份参数。对于 FerretDB,还需要 mongo_pgurl 来指定底层 PG 位置。
请注意,mongo_pgurl 参数需要一个 PostgreSQL 超级用户。在此示例中,为 FerretDB 定义了一个专用的 mongod 超级用户。
请注意,FerretDB 的 身份验证 完全基于 PostgreSQL。您可以使用 FerretDB 或 PostgreSQL 创建其他常规用户。
PostgreSQL 集群
FerretDB 2.0+ 需要一个扩展:DocumentDB,它依赖于几个其他扩展。以下是为 FerretDB 创建 PostgreSQL 集群的模板:
高可用性
您可以使用 服务 连接到高可用的 PostgreSQL 集群,并部署多个 FerretDB 实例副本,并为 FerretDB 层高可用性绑定 L2 VIP。
17.3 - 参数
FERRET 模块中有 9 个参数。
| 参数 | 类型 | 层级 | 注释 |
|---|---|---|---|
mongo_seq |
int | I | mongo 实例标识符,必需 |
mongo_cluster |
string | C | mongo 集群名称,默认为 MONGO |
mongo_pgurl |
pgurl | C/I | ferretdb 的底层 postgres URL |
mongo_ssl_enabled |
bool | C | mongo/ferretdb ssl 启用,默认为 false |
mongo_listen |
ip | C | mongo 监听地址,为空时监听所有地址 |
mongo_port |
port | C | mongo 服务端口,默认为 27017 |
mongo_ssl_port |
port | C | mongo tls 监听端口,默认为 27018 |
mongo_exporter_port |
port | C | mongo exporter 端口,默认为 9216 |
mongo_extra_vars |
string | C | MONGO 服务器的额外环境变量 |
默认值
默认参数定义在 roles/ferret/defaults/main.yml 中
mongo_cluster
名称:mongo_cluster,类型:string,层级:C
mongo 集群名称,必需的身份参数。
默认值为 MONGO,但您应该为生产使用显式定义它。
符合正则表达式 [a-z][a-z0-9-]*,建议使用描述性名称并以 mongo- 开头
mongo_seq
名称:mongo_seq,类型:int,层级:I
mongo 实例序列号,mongo 集群中需要唯一整数
您必须为每个 mongo 实例显式定义序列号。整数从 0 或 1 开始。
mongo_pgurl
名称:mongo_pgurl,类型:pgurl,层级:C/I
ferretdb 连接的底层 postgres URL。
没有默认值,您必须显式定义它。这是 FerretDB 将用作其后端存储的 PostgreSQL 数据库 URL。
格式:postgres://username:password@host:port/database
mongo_ssl_enabled
名称:mongo_ssl_enabled,类型:bool,层级:C
mongo/ferretdb ssl 启用标志。
默认值为 false。设置为 true 以启用 mongo 连接的 SSL/TLS 加密。
mongo_listen
名称:mongo_listen,类型:ip,层级:C
mongo 绑定的监听地址。
默认值为空字符串 '',这意味着监听所有可用地址。您可以指定特定的 IP 地址进行绑定。
mongo_port
名称:mongo_port,类型:port,层级:C
mongo 客户端连接的服务端口。
默认值为 27017,这是标准的 MongoDB 端口。如果您需要避免端口冲突,请更改此端口。
mongo_ssl_port
名称:mongo_ssl_port,类型:port,层级:C
mongo 加密连接的 tls 监听端口。
默认值为 27018。当为安全连接启用 SSL/TLS 时,使用此端口。
mongo_exporter_port
名称:mongo_exporter_port,类型:port,层级:C
mongo 指标收集的 exporter 端口。
默认值为 9216。此端口由监控 exporter 使用,向 Prometheus 暴露指标。
mongo_extra_vars
名称:mongo_extra_vars,类型:string,层级:C
MONGO 服务器的额外环境变量。
默认值为空字符串 ''。您可以指定将传递给 FerretDB 进程的额外环境变量。
17.4 - 管理
创建 FerretDB 集群
在 清单 中 定义 FerretDB 集群后,您可以使用以下命令安装它:
由于 FerretDB 使用 PostgreSQL 作为其底层存储,多次运行此剧本通常是安全的。
移除 FerretDB 集群
要移除 Mongo/FerretDB 集群,请使用 mongo_purge 参数运行 mongo.yml 剧本的 mongo_purge 子任务:
17.5 - 剧本
有一个内置的剧本 mongo.yml 用于在节点上安装 FerretDB。
mongo.yml
mongo.yml:在目标主机上安装 MongoDB/FerretDB。
此剧本包含以下子任务:
mongo_check:检查 mongo 身份mongo_dbsu:创建操作系统用户 mongodmongo_install:安装 mongo/ferretdb rpmmongo_purge:清除 mongo/ferretdbmongo_config:配置 mongo/ferretdbmongo_cert:签发 mongo/ferretdb ssl 证书mongo_launch:启动 mongo/ferretdb 服务mongo_register:将 mongo/ferretdb 注册到 prometheus
18 - Docker
Docker 是 Pigsty 中的一个 可选模块,默认已下载但未安装。 您必须在使用前显式 启用 它。
配置 docker 注册中心、代理、镜像等...
使用 8 个参数自定义 docker 组件
管理 docker 镜像、容器等...
可在 docker 模块中使用的 Ansible 剧本
仪表板、指标、记录和告警规则。
关于 docker 模块的常见问题
18.1 - 配置
Pigsty 包含内置的 Docker 支持,允许您快速部署容器化应用程序。
快速开始
要在节点上安装 docker,请将 docker_enabled 参数设置为 true。
然后运行 docker.yml playbook(在目标主机/组上):
Docker 将安装在该 infra 组上。
镜像站
您可以使用 docker_registry_mirrors 指定 docker 注册表镜像:
以下是一些示例注册表镜像:
- 阿里云:
["https://registry.cn-hangzhou.aliyuncs.com"] - 腾讯云:
["https://ccr.ccs.tencentyun.com"] - DaoCloud:
["https://docker.m.daocloud.io"] - 1Ms:
["https://docker.1ms.run"]
您可以将多个注册表镜像指定为数组,记住用 " 引用 URL。
代理
如果指定了 proxy_env 参数,Docker 将使用它。
您可以在全局参数 all.vars 或专用组(如 infra)中定义它:
它将在 docker_config 任务期间呈现到 /etc/docker/daemon.json:
这在由于各种原因阻止直接网络访问时很有用。
镜像
您可以使用 docker_image 和 docker_image_cache 置备 docker 镜像:
在 docker_image 中定义的镜像将在 docker_image 任务期间逐个拉取。
匹配 docker_image_cache glob 列表的带有 .tgz 后缀的本地 docker 镜像缓存将使用 docker load 加载到 docker 中
加速
您可以在各个云供应商上使用加速器:
- 阿里云 ACR:https://cr.console.aliyun.com/cn-shanghai/instances/mirrors
18.2 - 参数
Docker 模块有 8 个参数:
| 名称 | 类型 | 层级 | 注释 |
|---|---|---|---|
docker_enabled |
bool |
G/C/I | 在此节点上启用 docker? |
docker_data |
path |
G/C/I | Docker 数据目录,默认为 /var/lib/docker |
docker_storage_driver |
enum |
G/C/I | Docker 存储驱动程序,默认为 overlay2 |
docker_cgroups_driver |
enum |
G/C/I | docker cgroup fs 驱动程序:cgroupfs,systemd |
docker_registry_mirrors |
string[] |
G/C/I | docker 注册中心镜像列表 |
docker_exporter_port |
port |
G | Docker 指标导出器端口,默认为 9323 |
docker_image |
path[] |
G/C/I | 要拉取的 docker 镜像,默认为 [] |
docker_image_cache |
path |
G/C/I | docker 镜像缓存压缩包通配符,默认为 /tmp/docker |
默认值
Docker 的默认参数定义在 roles/docker/defaults/main.yml 中
docker_enabled
名称:docker_enabled,类型:bool,层级:G/C/I
在此节点上启用 docker?默认值为 false
docker_data
名称:docker_data,类型:path,层级:C
Docker 数据目录,默认为 /var/lib/docker。
docker_storage_driver
名称:docker_storage_driver,类型:enum,层级:C
Docker 存储驱动程序,默认为 overlay2。
请参考:https://docs.docker.com/engine/storage/drivers/select-storage-driver/
overlay2fuse-overlayfsbrtfszfsvfs
docker_cgroups_driver
名称:docker_cgroups_driver,类型:enum,层级:G/C/I
docker cgroup fs 驱动程序,可以是 cgroupfs 或 systemd,默认值:systemd
docker_registry_mirrors
名称:docker_registry_mirrors,类型:string[],层级:G/C/I
docker 注册中心镜像列表,默认值:[],示例:
以下是使用各云厂商内网镜像的一些示例:
考虑使用 Cloudflare Worker Docker Proxy
如果拉取速度太慢,您也可以考虑:docker login quay.io 使用其他注册中心。
docker_exporter_port
名称:docker_exporter_port,类型:port,层级:G
Docker 指标导出器端口,默认为 9323。
docker_image
名称:docker_image,类型:string[],层级:G/C/I
要拉取的 docker 镜像,默认为 []
这里列出的镜像将在 docker 置备期间被拉取。
docker_image_cache
名称:docker_image_cache,类型:path,层级:G/C/I
docker 镜像缓存压缩包通配符列表,默认为 "/tmp/docker/*.tgz"。
匹配此通配符列表的带有 .tgz 后缀的本地 docker 镜像缓存将逐一加载到 docker 中:
18.3 - 管理
安装
要在节点上安装和启用 docker,请 配置 docker_enabled 参数为 true。
然后运行 docker.yml 剧本(在目标主机/组上):
Docker 将安装在该 infra 组上。
我们在这里使用 infra 组作为示例,您可以在其他地方定义它,只要它适用于预期的主机。
仓库
Docker 仓库是 infra 仓库模块的一部分,将在 仓库 构建期间自动添加。
您可以使用以下命令将此仓库添加到您的节点:
升级
要升级 Docker 守护进程,使用 ansible 命令,添加 docker 仓库,然后:
它将把 docker-ce 包升级到您配置的仓库中可用的最新版本。
移除
要移除 Docker 守护进程,使用 ansible 命令运行:
它将使用您的操作系统包管理器移除 docker-ce 包。
应用程序
Pigsty 提供基于 Docker Compose 的即用型 软件模板,用于部署与 Pigsty 管理的数据库集群无缝集成的外部应用程序。
18.4 - 剧本
DOCKER 模块只有一个剧本:docker.yml
用于在目标节点上安装 docker 守护进程和 docker compose。
docker.yml
原始剧本:docker.yml。
在任何主机上运行此剧本将在启用 docker_enabled: true 标志的目标节点上安装 docker-ce 和 docker-compose-plugin。
以下是 docker.yml 剧本中可用的子任务:
docker_install:在节点上安装 Docker 和 Docker Compose 包。docker_admin:将指定用户添加到 Docker 管理员用户组。docker_config:生成 Docker 守护进程服务配置文件。docker_launch:启动 Docker 守护进程服务。docker_register:将 Docker 守护进程注册为 Prometheus 监控目标。docker_image:如果存在的话,尝试从/tmp/docker/*.tgz加载预打包的 Docker 镜像。
Docker 模块不提供专用的 Docker 卸载剧本。如果您需要卸载 Docker,您可以手动停止 Docker 服务然后卸载它:
18.5 - 监控
如果节点的 docker_enabled = true,Pigsty 将把 docker 守护进程添加到监控目标中
但是 docker 模块没有默认的仪表板和告警规则,您可以向 prometheus 和 grafana 添加自己的规则。
18.6 - FAQ
谁可以运行 Docker 命令?
默认情况下,Pigsty 将在远程主机上运行剧本的 管理用户(即 SSH 登录用户)和由 node_admin_username 参数定义的用户都添加到操作系统组 docker 中。
该组中的任何账户都可以通过 docker CLI 管理 Docker。
需要为另一个用户授予 Docker 访问权限?只需将该操作系统用户添加到 docker 组:
通过代理工作
在安装期间,如果设置了 proxy_env 参数,Pigsty 会将指定的 HTTP 代理设置写入 /etc/docker/daemon.json。
然后 Docker 将通过此代理路由所有来自上游注册中心的镜像拉取。
提示: 使用 -x 标志运行 configure 剧本会自动捕获当前 shell 的代理变量并将它们注入到 proxy_env 中。
使用镜像注册中心
在中国大陆,您可能会遇到 GFW 限制。可以使用诸如 quay.io 等镜像:
更新(2024年6月): 中国所有以前可访问的 Docker 镜像现在都已被阻止。请通过代理拉取镜像。
将 Docker 添加到监控
安装 Docker 模块后,您可以通过运行 docker_register(别名 register_prometheus)任务将 Docker 注册为特定节点的 Prometheus 目标:
软件模板
Pigsty 提供了一系列 软件模板,这些模板使用 Docker Compose 启动流行的技术栈——开箱即用。
只需确保首先安装了 Docker 模块。
19 - APP
自托管 Supabase
运行 Odoo 开源 ERP
运行 Dify AI 工作流
运行官方管理 GUI 工具
19.1 - 剧本
Pigsty 内置支持 Docker 和一系列使用 PostgreSQL 作为主存储的软件。
您可以使用 docker compose 运行无状态应用程序,并将数据存储在外部高可用的 PostgreSQL(Redis/MinIO/…)集群中。
有一个专用的剧本 app.yml 可以帮助您轻松运行 docker compose 应用程序
19.2 - pgAdmin
pgAdmin 是最受欢迎且功能丰富的 PostgreSQL 开源管理和开发平台, PostgreSQL 是世界上最先进的开源数据库。
快速开始
Pigsty 内置(但可选)支持 pgAdmin,它使用 Docker Compose 启动 pgadmin:
pgadmin 的默认端口是 8885,您可以通过 IP:端口访问它:http://10.10.10.10:8885。
默认凭据在 .env 中定义,用户名:[email protected],密码:pigsty。
自定义
在 /opt/pgadmin/.env 中自定义 pgadmin 配置并使用 docker compose 管理它。
您还可以自定义 apps 参数并使用以下方式覆盖默认 .env 配置:
要启动应用程序,运行:
域名和证书
要通过 nginx(而不是直接访问端口 8885)访问 pgadmin,请使用以下方式配置 基础设施门户:
然后运行 make nginx 更新 nginx 配置,并在 /etc/hosts 或 本地 / 公共 DNS 服务器中配置 本地静态 DNS 记录 <your_ip_address> adm.pigsty。
Pigsty 将自动为 infra_portal 中列出的域名签发自签名 SSL 证书。
如果您想使用真实域名,请定义 cerbot 条目并运行 make cert,查看 SSL 证书 了解详情。
19.3 - Supabase
Supabase 很好,拥有属于你自己的 supabase 则好上加好。 Pigsty 可以帮助您在自己的服务器上(物理机/虚拟机/云服务器),一键自建企业级 supabase —— 更多扩展,更好性能,更深入的控制,更合算的成本。
Pigsty 是 Supabase 官网文档上列举的三种自建部署之一:Self-hosting: Third-Party Guides
简短版本
准备 Linux,执行 Pigsty 标准安装 流程,选择 supabase 配置模板,依次执行:
安装完毕后,使用浏览器访问 8000 端口造访 Supa Studio,用户名 supabase,密码 pigsty。

目录
Supabase是什么?
Supabase 是一个 BaaS (Backend as Service),开源的 Firebase,是 AI Agent 时代最火爆的数据库 + 后端解决方案。 Supabase 对 PostgreSQL 进行了封装,并提供了身份认证,消息传递,边缘函数,对象存储,并基于 PG 数据库模式自动生成 REST API 与 GraphQL API。
Supabase 旨在为开发者提供一条龙式的后端解决方案,减少开发和维护后端基础设施的复杂性。 它能让开发者告别绝大部分后端开发的工作,只需要懂数据库设计与前端即可快速出活! 开发者只要用 Vibe Coding 糊个前端与数据库模式设计,就可以快速完成一个完整的应用。
目前,Supabase 是 PostgreSQL 开源生态 中人气最高的开源项目,在 GitHub 上已有 八万 Star。 Supabase 还为小微创业者提供了“慷慨”的免费云服务额度 —— 免费的 500 MB 空间,对于存个用户表,浏览数之类的东西绰绰有余。
为什么要自建?
既然 Supabase 云服务这么香,为什么要自建呢?
最直观的原因是是我们在《云数据库是智商税吗?》中提到过的:当你的数据/计算规模超出云计算适用光谱(Supabase:4C/8G/500MB免费存储),成本很容易出现爆炸式增长。 而且在当下,足够可靠的 本地企业级 NVMe SSD 在性价比上与 云端存储 有着三到四个数量级的优势,而自建能更好地利用这一点。
另一个重要的原因是 功能, Supabase 云服务的功能受限 —— 很多强力PG扩展因为多租户安全挑战与许可证的原因无法以云服务的形式。 故而尽管 扩展是 PostgreSQL 的核心特色,在 Supabase 云服务上也依然只有 64 个扩展可用。 而通过 Pigsty 自建的 Supabase 则提供了多达 437 个开箱即用的 PG 扩展。
此外,自主可控与规避供应商锁定也是自建的重要原因 —— 尽管 Supabase 虽然旨在提供一个无供应商锁定的 Google Firebase 开源替代,但实际上自建高标准企业级的 Supabase 门槛并不低。 Supabase 内置了一系列由他们自己开发维护的 PG 扩展插件,并计划将原生的 PostgreSQL 内核替换为收购的 OrioleDB,而这些内核与扩展在 PGDG 官方仓库中并没有提供。
这实际上是某种隐性的供应商锁定,阻止了用户使用除了 supabase/postgres Docker 镜像之外的方式自建,Pigsty 则提供开源,透明,通用的方案解决这个问题。 我们将所有 Supabase 自研与用到的 10 个缺失的扩展打成开箱即用的 RPM/DEB 包,确保它们在所有 主流Linux操作系统发行版 上都可用:
| 扩展 | 说明 |
|---|---|
pg_graphql |
提供PG内的GraphQL支持 (RUST),Rust扩展,由PIGSTY提供 |
pg_jsonschema |
提供JSON Schema校验能力,Rust扩展,由PIGSTY提供 |
wrappers |
Supabase提供的外部数据源包装器捆绑包,,Rust扩展,由PIGSTY提供 |
index_advisor |
查询索引建议器,SQL扩展,由PIGSTY提供 |
pg_net |
用 SQL 进行异步非阻塞HTTP/HTTPS 请求的扩展 (supabase),C扩展,由PIGSTY提供 |
vault |
在 Vault 中存储加密凭证的扩展 (supabase),C扩展,由PIGSTY提供 |
pgjwt |
JSON Web Token API 的PG实现 (supabase),SQL扩展,由PIGSTY提供 |
pgsodium |
表数据加密存储 TDE,扩展,由PIGSTY提供 |
supautils |
用于在云环境中确保数据库集群的安全,C扩展,由PIGSTY提供 |
pg_plan_filter |
使用执行计划代价过滤阻止特定查询语句,C扩展,由PIGSTY提供 |
同时,我们在 Supabase 自建部署中默认 安装绝大多数扩展,您可以参考可用扩展列表按需 启用。
同时,Pigsty 还会负责好底层 高可用 PostgreSQL 数据库集群,高可用 MinIO 对象存储集群的自动搭建,甚至是 Docker 容器底座的部署与 Nginx 反向代理,域名配置 与 HTTPS证书签发。 您可以使用 Docker Compose 拉起任意数量的无状态 Supabase 容器集群,并将状态存储在外部 Pigsty 自托管数据库服务中。
在这一自建部署架构中,您获得了使用不同内核的自由(PG 15-18,OrioleDB),加装 437 个扩展的自由,扩容与伸缩 Supabase / Postgres / MinIO 的自由, 免于数据库运维杂务的自由,以及免于供应商锁定,本地运行到地老天荒的自由。 而相比于使用云服务需要付出的代价,不过是准备服务器和多敲几行命令而已。
单节点自建快速上手
让我们先从单节点 Supabase 部署开始,我们会在后面进一步介绍多节点高可用部署的方法。
准备 一台全新 Linux 服务器,使用 Pigsty 提供的 supabase 配置模板执行 标准安装,
然后额外运行 docker.yml 与 app.yml 拉起无状态部分的 Supabase 容器即可(默认端口 8000/8433)。
在部署 Supabase 前请根据实际情况修改自动生成的 pigsty.yml 配置文件中的参数(域名与密码)
如果只是本地开发测试,可以先跳过,我们将在后面介绍如何通过修改配置文件来进一步定制。
如果配置无误,大约十分钟后,就可以在本地网络通过 http://<your_ip_address>:8000 访问到 Supabase Studio 图形管理界面了。
默认的用户名与密码分别是: supabase 与 pigsty。

在中国大陆地区,Pigsty 默认使用 1Panel 与 1ms 提供的 DockerHub 镜像站点下载 Supabase 相关镜像,可能会较慢。
你也可以自行配置 代理 与 镜像站 ,cd /opt/supabase; docker compose pull 手动拉取镜像。
我们亦提供包含完整离线安装方案的 Supabase 自建专家咨询服务。
如果你需要使用的对象存储功能,那么需要通过域名与 HTTPS 访问 Supabase,否则会出现报错。
对于严肃的生产部署,请 务必 修改所有默认密码!
自建关键技术决策
以下是一些自建 Supabase 会涉及到的关键技术决策,供您参考:
使用默认的单节点部署 Supabase 无法享受到 PostgreSQL / MinIO 的高可用能力。 尽管如此,单节点部署相比官方纯 Docker Compose 方案依然要有显著优势: 例如开箱即用的监控系统,自由安装扩展的能力,各个组件的扩缩容能力,以及提供兜底数据库时间点恢复能力等。
如果您只有一台服务器,或者选择在云服务器上自建,Pigsty 建议您使用外部的 S3 替代本地的 MinIO 作为对象存储,存放 PostgreSQL 的备份,并承载 Supabase Storage 服务。 这样的部署在故障时可以在单机部署条件下,提供一个兜底级别的 RTO (小时级恢复时长)/ RPO (MB级数据损失)容灾水平。
在严肃的生产部署中,Pigsty 建议使用至少3~4个节点的部署策略,确保 MinIO 与 PostgreSQL 都使用满足企业级高可用要求的多节点部署。 在这种情况下,您需要相应准备更多节点与磁盘,并相应调整 pigsty.yml 配置清单中的集群配置,以及 supabase 集群配置中的接入信息,使用高可用接入点访问服务。
Supabase 的部分功能需要发送邮件,所以要用到 SMTP 服务。除非单纯用于内网,否则对于严肃的生产部署,建议使用 SMTP 云服务。自建的邮件服务器发送的邮件容易被标记为垃圾邮件导致拒收。
如果您的服务直接向公网暴露,我们强烈建议您使用真正的域名与 HTTPS 证书,并通过 Nginx 门户 访问。
接下来,我们会依次讨论一些进阶主题。如何在单节点部署的基础上,进一步提升 Supabase 的安全性、可用性与性能。
进阶主题:安全加固
Pigsty基础组件
对于严肃的生产部署,我们强烈建议您修改 Pigsty 基础组件的密码。因为这些默认值是公开且众所周知的,不改密码上生产无异于裸奔:
grafana_admin_password:pigsty,Grafana管理员密码pg_admin_password:DBUser.DBA,PG超级用户密码pg_monitor_password:DBUser.Monitor,PG监控用户密码pg_replication_password:DBUser.Replicator,PG复制用户密码patroni_password:Patroni.API,Patroni 高可用组件密码haproxy_admin_password:pigsty,负载均衡器管控密码minio_secret_key:minioadmin,MinIO 根用户密钥- 此外,强烈建议您修改 Supabase 使用的 PostgreSQL 业务用户 密码,默认为
DBUser.Supa
以上密码为 Pigsty 组件模块的密码,强烈建议在安装部署前就设置完毕。
Supabase密钥
除了 Pigsty 组件的密码,你还需要 修改 Supabase 的密钥,包括
JWT_SECRETANON_KEYSERVICE_ROLE_KEYPG_META_CRYPTO_KEYDASHBOARD_USERNAMESupabase Studio Web 界面的默认用户名,默认为supabaseDASHBOARD_PASSWORDSupabase Studio Web 界面的默认密码,默认为pigsty
这里请您务必参照 Supabase教程:保护你的服务 里的说明:
- 生成一个长度超过 40 个字符的
JWT_SECRET,并使用教程中的工具签发ANON_KEY与SERVICE_ROLE_KEY两个 JWT。 - 使用教程中提供的工具,根据
JWT_SECRET以及过期时间等属性,生成一个ANON_KEYJWT,这是匿名用户的身份凭据。 - 使用教程中提供的工具,根据
JWT_SECRET以及过期时间等属性,生成一个SERVICE_ROLE_KEY,这是权限更高服务角色的身份凭据。 - 指定一个32个字符以上的随机字符串密钥
PG_META_CRYPTO_KEY,用于加密 Studio UI 与 meta 服务的交互 - 如果您使用的 PostgreSQL 业务用户使用了不同于默认值的密码,请相应修改 `POSTGRES_PASSWORD`` 的值
- 如果您的对象存储使用了不同于默认值的密码,请相应修改
S3_ACCESS_KEY``](https://github.com/pgsty/pigsty/blob/v3.7.0/conf/supabase.yml#L154) 与 [S3_SECRET_KEY`` 的值
Supabase 部分的凭据修改后,您可以重启 Docker Compose 容器以应用新的配置:
进阶主题:域名接入
如果你在本机或局域网内使用 Supabase,那么可以选择 IP:Port 直连 Kong 对外暴露的 HTTP 8000 端口访问 Supabase。
你可以使用一个内网静态解析的域名,但对于严肃的生产部署,我们建议您使用真域名 + HTTPS 来访问 Supabase。
在这种情况下,您的服务器应当有一个公网 IP 地址,你应当拥有一个域名,使用云/DNS/CDN 供应商提供的 DNS 解析服务,将其指向安装节点的公网 IP(可选默认下位替代:本地 /etc/hosts 静态解析)。
比较简单的做法是,直接批量替换占位域名(supa.pigsty)为你的实际域名,假设为 supa.pigsty.cc:
如果你没有事先配置好,那么重载 Nginx 和 Supabase 的配置生效即可:
修改后的配置应当类似下面的片段:
完整的域名/HTTPS 配置可以参考 证书管理 教程,您也可以使用 Pigsty 自带的本地静态解析与自签发 HTTPS 证书作为下位替代。
进阶主题:外部对象存储
您可以使用 S3 或 S3 兼容的服务,来作为 PGSQL 备份与 Supabase 使用的对象存储。这里我们使用一个 阿里云 OSS 对象存储作为例子。
Pigsty 提供了一个
terraform/spec/aliyun-meta-s3.tf模板, 可以用于在阿里云上拉起一台服务器,以及一个 OSS 存储桶。
首先,我们修改 all.children.supa.vars.apps.[supabase].conf 中 S3 相关的配置,将其指向阿里云 OSS 存储桶:
同样使用以下命令重载 Supabase 配置:
您同样可以使用 S3 作为 PostgreSQL 的备份仓库,在 all.vars.pgbackrest_repo 新增一个 aliyun 备份仓库的定义:
然后在 all.vars.pgbackrest_mehod 中指定使用 aliyun 备份仓库,重置 pgBackrest 备份:
Pigsty 会将备份仓库切换到外部对象存储上,更多备份配置可以参考 PostgreSQL 备份 文档。
进阶主题:使用SMTP
你可以使用 SMTP 来发送邮件,修改 supabase 应用配置,添加 SMTP 信息:
不要忘了使用 app.yml 来重载配置
进阶主题:真·高可用
经过这些配置,您拥有了一个带公网域名,HTTPS 证书,SMTP,PITR 备份,监控,IaC,以及 400+ 扩展的企业级 Supabase (基础单机版)。 高可用的配置请参考 Pigsty 其他部份的文档,如果您懒得阅读学习,我们提供手把手扶上马的 Supabase 自建专家咨询服务 —— ¥2000 元免去折腾与下载的烦恼。
单节点的 RTO / RPO 依赖外部对象存储服务提供兜底,如果您的这个节点挂了,外部 S3 存储中保留了备份,您可以在新的节点上重新部署 Supabase,然后从备份中恢复。 这样的部署在故障时可以提供一个最低标准的 RTO (小时级恢复时长)/ RPO (MB级数据损失)兜底容灾水平 兜底。
如果想要达到 RTO < 30s ,切换零数据丢失,那么需要使用多节点进行高可用部署,这涉及到:
- ETCD: DCS 需要使用三个节点或以上,才能容忍一个节点的故障。
- PGSQL: PGSQL 同步提交不丢数据模式,建议使用至少三个节点。
- INFRA:监控基础设施故障影响稍小,建议生产环境使用双副本
- Supabase 无状态容器本身也可以是多节点的副本,可以实现高可用。
在这种情况下,您还需要修改 PostgreSQL 与 MinIO 的接入点,使用 DNS / L2 VIP / HAProxy 等 高可用接入点
关于这些部分,您只需参考 Pigsty 中各个模块的文档进行配置部署即可。
建议您参考 conf/ha/trio.yml 与 conf/ha/safe.yml 中的配置,将集群规模升级到三节点或以上。
19.4 - Odoo
Odoo 是一个开源企业资源规划 (ERP) 软件 它提供一整套业务应用程序,包括 CRM、销售、采购、库存、生产、会计, 和其他管理功能。Odoo 是一个典型的 Web 应用程序,使用 PostgreSQL 作为底层数据库。
您的所有业务,都在一个平台上,简单、高效且实惠
快速开始
默认的用户名和密码都是 admin
配置模板
conf/app/odoo.yml 定义了一个模板配置文件
定义单个 Odoo 实例所需的资源。
基础
检查 .env 文件中的可配置环境变量:
然后使用以下命令启动 odoo:
访问 http://ddl.pigsty 或 http://10.10.10.10:8887
Makefile
使用外部 PostgreSQL
您可以为 Odoo 使用外部 PostgreSQL。Odoo 将在设置期间创建自己的数据库,因此您不需要这样做
并使用以下命令创建业务用户和数据库:
检查连接性:
暴露 Odoo 服务
通过 nginx 门户 暴露 odoo Web 服务:
Odoo 插件
社区中有很多 Odoo 模块可用,您可以通过下载并将它们放在 addons 文件夹中来安装它们。
您可以将 ./addons 目录挂载到容器中的 /mnt/extra-addons,然后下载并解压到 addons 文件夹,
要启用插件模块,首先进入 开发者模式
设置 -> 通用设置 -> 开发者工具 -> 激活开发者模式
然后转到 > 应用程序 -> 更新应用程序列表,然后您可以找到额外的插件并从面板安装。
演示
查看公共演示:http://odoo.pigsty.io,用户名:[email protected],密码:pigsty
如果您想通过 SSL 访问 odoo,您必须在浏览器中信任 files/pki/ca/ca.crt(或在 chrome 中使用肮脏的黑客 thisisunsafe)
反馈
19.5 - Dify
Dify 是一个生成式 AI 应用创新引擎和开源 LLM 应用开发平台。它提供从 Agent 构建到 AI 工作流编排、RAG 检索和模型管理的能力,帮助用户轻松构建和运营生成式 AI 原生应用程序。
Pigsty 提供对自托管 Dify 的支持,允许您使用单个命令部署 Dify,同时将关键状态存储在外部管理的 PostgreSQL 中。您可以在同一个 PostgreSQL 实例中使用 pgvector 作为向量数据库,进一步简化部署。
Pigsty v3.7.0 内置 Dify v1.8.1 应用模板。
快速开始
在运行 兼容操作系统 的全新 Linux x86 / ARM 服务器上执行:
Dify 默认监听端口 5001。您可以通过浏览器访问 http://<ip>:5001 并设置您的初始用户凭据来登录。
Dify 启动后,您可以安装各种扩展、配置系统模型并开始使用它!
为什么要自托管
自托管 Dify 有很多原因,但主要动机是数据安全。Dify 提供的 DockerCompose 模板使用基本的默认数据库镜像,缺乏企业级功能,如高可用性、灾难恢复、监控、IaC 和 PITR 能力。
Pigsty 为 Dify 优雅地解决了这些问题,基于配置文件使用单个命令部署所有组件,并使用镜像解决中国地区访问挑战。这使得 Dify 部署和交付变得非常顺畅。它一次性处理 PostgreSQL 主数据库、PGVector 向量数据库、MinIO 对象存储、Redis、Prometheus 监控、Grafana 可视化、Nginx 反向代理和免费 HTTPS 证书。
Pigsty 确保所有 Dify 状态都存储在外部管理的服务中,包括 PostgreSQL 中的元数据和文件系统中的其他数据。通过 Docker Compose 启动的 Dify 实例成为可以随时销毁和重建的无状态应用程序,大大简化了运维。
安装
让我们从单节点 Dify 部署开始。我们稍后将介绍生产高可用部署方法。
首先,使用 Pigsty 的 标准安装过程 安装 Dify 所需的 PostgreSQL 实例:
当您使用 ./configure -c app/dify 命令时,Pigsty 会根据 conf/app/dify.yml 模板和您当前的环境自动生成配置文件。
您应该根据实际需要在生成的 pigsty.yml 配置文件中修改密码、域名和其他相关参数,然后使用 ./install.yml 执行标准安装过程。
接下来,运行 docker.yml 安装 Docker 和 Docker Compose,然后使用 app.yml 完成 Dify 部署:
您可以在本地网络上通过 http://<your_ip_address>:5001 访问 Dify Web 管理界面。
首次登录时会提示设置默认用户名、邮箱和密码。
您也可以使用本地解析的占位符域名 dify.pigsty,或按照下面的配置使用带有 HTTPS 证书的真实域名。
配置
当您使用 ./configure -c app/dify 命令进行配置时,Pigsty 会根据 conf/app/dify.yml 模板和您当前的环境自动生成配置文件。以下是默认配置的详细说明:
检查清单
以下是您需要关注的配置项检查清单:
- 硬件/软件:准备所需的机器资源:Linux
x86_64/arm64服务器,主流 Linux 操作系统 的全新安装 - 网络/权限:SSH 免密登录访问权限,用户具有 免密 sudo 权限
- 确保机器在内网中有静态 IPv4 网络地址且可访问互联网
- 如果通过公网访问,确保您有可用的域名指向当前节点的 公网 IP 地址
- 确保使用
app/dify配置模板并根据需要修改参数configure -c app/dify,并输入节点的内网主 IP 地址,或通过-i <primary_ip>命令行参数指定
- 您是否修改了所有密码相关的配置参数?【可选】
grafana_admin_password:pigsty,Grafana 管理员密码pg_admin_password:DBUser.DBA,PG 超级用户密码pg_monitor_password:DBUser.Monitor,PG 监控用户密码pg_replication_password:DBUser.Replicator,PG 复制用户密码patroni_password:Patroni.API,Patroni HA 组件密码haproxy_admin_password:pigsty,负载均衡器管理密码
- 您是否修改了 PostgreSQL 集群业务用户密码和使用这些密码的应用程序配置?
- 默认用户名
dify和密码difyai123456是 Pigsty 为 Dify 生成的,请根据实际情况修改 - 在 Dify 的配置块中,请相应修改
DB_USERNAME、DB_PASSWORD、PGVECTOR_USER、PGVECTOR_PASSWORD等参数
- 默认用户名
- 您是否修改了 Dify 的默认加密密钥?
- 您可以使用
openssl rand -base64 42随机生成密码字符串并填入SECRET_KEY参数
- 您可以使用
- 您是否修改了 Dify 使用的域名?
- 将占位符域名
dify.pigsty替换为您的实际域名,例如dify.pigsty.cc - 您可以使用
sed -ie 's/dify.pigsty/dify.pigsty.cc/g' pigsty.yml修改 Dify 的域名
- 将占位符域名
域名和 SSL
如果您想使用带有 HTTPS 证书的真实域名,需要在 pigsty.yml 配置文件中修改:
infra_portal参数的dify域名- 最好指定一个邮箱地址
certbot_email用于接收证书过期通知 - 配置 Dify 的
NGINX_SERVER_NAME参数来指定您的实际域名
使用以下命令申请 Nginx 证书:
执行 app.yml 剧本重新部署 Dify 服务以使 NGINX_SERVER_NAME 配置生效。
文件备份
您可以使用 restic 备份 Dify 的文件存储(默认位于 /data/dify 目录),使用以下命令进行备份:
创建 Restic 备份仓库后,您可以使用以下命令备份 Dify:
另一种更可靠的方法是使用 JuiceFS 将 MinIO 对象存储挂载到 /data/dify 目录,这样您就可以使用 MinIO/S3 存储文件状态。
如果您想将所有数据存储在 PostgreSQL 中,请考虑"使用 JuiceFS 将文件系统数据存储在 PostgreSQL 中"
例如,您可以创建另一个 dify_fs 数据库并将其用作 JuiceFS 的元数据存储:



