这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

模块化架构

Pigsty 的模块化架构介绍 —— 声明式组合,按需定制,自由部署。

Pigsty 使用 模块化架构声明式接口,您可以像 搭积木一样自由按需组合模块


模块

Pigsty 采用模块化设计,有六个主要的默认模块:PGSQLINFRANODEETCDREDISMINIO

  • PGSQL:由 Patroni、Pgbouncer、HAproxy、PgBackrest 等驱动的自治高可用 Postgres 集群。
  • INFRA:本地软件仓库、Nginx、Grafana、Victoria、AlertManager、Blackbox Exporter 可观测性全家桶。
  • NODE:调整节点到所需状态、名称、时区、NTP、ssh、sudo、haproxy、docker、vector、keepalived
  • ETCD:分布式键值存储,用作高可用 Postgres 集群的 DCS:共识选主/配置管理/服务发现。
  • REDIS:Redis 服务器,支持独立主从、哨兵、集群模式,并带有完整的监控支持。
  • MINIO:与 S3 兼容的简单对象存储服务器,可作为 PG数据库备份的可选目的地。

你可以声明式地自由组合它们。如果你想要主机监控,在基础设施节点上安装INFRA模块,并在纳管节点上安装 NODE 模块就足够了。 ETCDPGSQL 模块用于搭建高可用 PG 集群,将模块安装在多个节点上,可以自动形成一个高可用的数据库集群。 您可以复用 Pigsty 基础架构并开发您自己的模块,REDISMINIO 可以作为一个样例。后续还会有更多的模块加入,例如对 Mongo 与 MySQL 的初步支持已经提上了日程。

请注意,所有模块都强依赖 NODE 模块:在 Pigsty 中节点必须先安装 NODE 模块,被 Pigsty 纳管后方可部署其他模块。 当节点(默认)使用本地软件源进行安装时,NODE 模块对 INFRA 模块有弱依赖。因此安装 INFRA 模块的管理节点/基础设施节点会在 deploy.yml 剧本中完成 Bootstrap 过程,解决循环依赖。

pigsty-sandbox


单机安装

默认情况下,Pigsty 将在单个 节点 (物理机/虚拟机) 上安装。deploy.yml 剧本将在当前节点上安装 INFRAETCDPGSQL 和可选的 MINIO 模块, 这将为你提供一个功能完备的可观测性技术栈全家桶 (Prometheus、Grafana、Loki、AlertManager、PushGateway、BlackboxExporter 等) ,以及一个内置的 PostgreSQL 单机实例作为 CMDB,也可以开箱即用。 (集群名 pg-meta,库名为 meta)。

这个节点现在会有完整的自我监控系统、可视化工具集,以及一个自动配置有 PITR 的 Postgres 数据库(HA不可用,因为你只有一个节点)。你可以使用此节点作为开发箱、测试、运行演示以及进行数据可视化和分析。或者,还可以把这个节点当作管理节点,部署纳管更多的节点!

pigsty-arch


监控

安装的 单机元节点 可用作管理节点监控中心,以将更多节点和数据库服务器置于其监视和控制之下。

Pigsty 的监控系统可以独立使用,如果你想安装 Prometheus / Grafana 可观测性全家桶,Pigsty 为你提供了最佳实践! 它为 主机节点PostgreSQL数据库 提供了丰富的仪表盘。 无论这些节点或 PostgreSQL 服务器是否由 Pigsty 管理,只需简单的配置,你就可以立即拥有生产级的监控和告警系统,并将现有的主机与PostgreSQL纳入监管。

pigsty-dashboard.jpg


高可用PG集群

Pigsty 帮助您在任何地方 拥有 您自己的生产级高可用 PostgreSQL RDS 服务。

要创建这样一个高可用 PostgreSQL 集群/RDS服务,你只需用简短的配置来描述它,并运行剧本来创建即可:

pg-test:
  hosts:
    10.10.10.11: { pg_seq: 1, pg_role: primary }
    10.10.10.12: { pg_seq: 2, pg_role: replica }
    10.10.10.13: { pg_seq: 3, pg_role: replica }
  vars: { pg_cluster: pg-test }
$ bin/pgsql-add pg-test  # 初始化集群 'pg-test'

不到10分钟,您将拥有一个服务接入,监控,备份PITR,高可用配置齐全的 PostgreSQL 数据库集群。

pigsty-ha.png

硬件故障由 patroni、etcd 和 haproxy 提供的自愈高可用架构来兜底,在主库故障的情况下,默认会在 30 秒内执行自动故障转移(Failover)。 客户端无需修改配置重启应用:Haproxy 利用 patroni 健康检查进行流量分发,读写请求会自动分发到新的集群主库中,并避免脑裂的问题。 这一过程十分丝滑,例如在从库故障,或主动切换(switchover)的情况下,客户端只有一瞬间的当前查询闪断,

软件故障、人为错误和 数据中心级灾难由 pgbackrest 和可选的 MinIO 集群来兜底。这为您提供了本地/云端的 PITR 能力,并在数据中心失效的情况下提供了跨地理区域复制,与异地容灾功能。

1 - 节点

节点(node)是对硬件资源/操作系统的抽象,可以是物理机,裸金属、虚拟机、或者容器与 pods。

节点(node) 是对硬件资源/操作系统的抽象,可以是物理机,裸金属、虚拟机、或者容器与 pods。

只要装着 Linux 操作系统(以及 systemd 守护进程),能使用 CPU/内存/磁盘/网络 等标准资源,即可视作节点。

节点上可以安装 模块,Pigsty 中存在几种不同类型节点,主要区别就在于安装了不同的模块。

类型说明
普通节点被 Pigsty 管理的节点
ADMIN 节点使用 Ansible 发出管理指令的节点
INFRA 节点安装 INFRA 模块的基础设施节点
ETCD 节点安装 ETCD 模块的分布式共识节点
MINIO 节点安装 MINIO 模块的对象存储节点
PGSQL 节点安装 PGSQL 模块的数据库节点
……安装了其他各类模块的节点……

单机部署 Pigsty 时,多者合而为一,当前节点将同时作为普通节点,管理节点、基础设施节点、ETCD 节点,以及数据库节点。


普通节点

使用 Pigsty 管理节点,可在其上安装模块。node.yml 剧本将调整节点至所需状态。 普通节点上可能会运行以下服务:

组件端口描述状态
node_exporter9100节点监控指标导出器✅ 默认启用
haproxy9101HAProxy 负载均衡器(管理端口)✅ 默认启用
vector9598日志收集代理✅ 默认启用
docker9323启用容器支持⚠️ 按需启用
keepalivedn/a管理节点集群 L2 VIP⚠️ 按需启用
keepalived_exporter9650监控 Keepalived 状态⚠️ 按需启用

这里,node_exporter 会向监控系统暴露主机上的各类监控指标,vector 会向日志收集系统发送日志,haproxy 则提供负载均衡功能,对外暴露服务。 这三项服务默认开启。而 Dockerkeepalivedkeepalived_exporter 这三项服务作为可选项,可按需启用。


ADMIN节点

一套 Pigsty 部署中有且只有一个 管理节点,管理节点是执行 Ansible 剧本,发起控制/部署命令的节点。

该节点拥有对所有其他节点的 ssh/sudo 访问权限。管理节点的安全至关重要,请确保它的访问受到严格控制。

单机安装配置过程 中,当前安装节点就是管理节点。 但也有其他的可能,例如,如果你的笔记本可以 ssh 访问所有被管理节点,并且安装了 Ansible,那么在这种情况下, 您的笔记本电脑就可以作为一个管理节点 —— 尽管这对于生产环境来说不太合适。

例如,您使用自己的笔记本电脑,管理一台云端上部署了 Pigsty 的虚拟机,这时候,您的笔记本电脑就是管理节点。

在严肃的生产环境中,管理节点通常是 1-2 台 DBA 专用的 管控机。在资源受限的环境中,则通常会复用 INFRA节点 作为管理节点。 因为所有的 INFRA 节点上都默认安装了 Ansible,可以作为额外的备用的管理节点。


INFRA节点

一套 Pigsty 部署可能有 1 个或多个 INFRA 节点,大型生产环境可能有 2-3 个。

配置清单中的 infra 分组指定哪些节点是 INFRA节点,这些节点上会部署 INFRA 模块,包含下列组件:

组件端口描述
nginx80/443Web 图形界面,本地软件仓库
grafana3000可视化平台
victoriaMetrics8428时序数据库(收存监控指标)
victoriaLogs9428日志收集服务器
victoriaTraces10428链路追踪收集服务器
vmalert8880告警与衍生指标计算规则
alertmanager9093告警聚合分发/屏蔽管理
blackbox_exporter9115黑盒探测,ping 节点 / vip
dnsmasq53内部 DNS 域名解析
chronyd123NTP 时间服务器
ansible-执行剧本,发起管理

其中,Nginx 作为当前模块的入口,提供 Web 图形界面和本地软件仓库服务。 如果你部署多个 INFRA 节点,每个 Infra 节点上的服务是相互独立的。 但你确实可以从任意一个 Infra 节点上的 Grafana 访问所有的监控数据源。

请注意,INFRA 模块受到 Grafana 传染,使用 AGPLv3 许可证开源。 但作为例外,如果你只使用 Nginx / Victoria 全家桶等组件,而不使用 Grafana,实际上使用的是 Apache-2.0 许可证。


ETCD节点

ETCD 模块为 PostgreSQL 高可用提供分布式共识服务(DCS)。

配置清单 中的 etcd 分组指定哪些节点是 ETCD 节点,ETCD 节点上运行着 etcd 服务器,监听以下两个端口:

组件端口描述
etcd2379ETCD 分布式键值存储(客户端端口)
etcd2380ETCD 集群 Peer 通信端口

MINIO节点

MINIOn 模块为 PostgreSQL 提供了一个可选的 备份存储仓库

配置清单中的 minio 分组指定哪些节点是 MinIO 节点,这些节点上会运行 MinIO 服务器,监听以下端口:

组件端口描述
minio9000MinIO S3 API 服务端口
minio9001MinIO 管理控制台端口

PGSQL节点

安装了 PGSQL 模块的节点被称为 PGSQL 节点。节点与 PostgreSQL 实例为 1:1 部署,也就是每个节点上只运行一个 PG 实例。

PGSQL 节点可从相应 PostgreSQL 实例借用 身份 —— 由 node_id_from_pg 控制,默认为 true,即节点名会被设置为 PG 实例名。

PGSQL节点在 普通节点 的基础上,还会额外运行以下组件:

组件端口描述状态
postgres5432PostgreSQL 数据库服务器✅ 默认启用
pgbouncer6432Pgbouncer 连接池✅ 默认启用
patroni8008Patroni 高可用管理组件✅ 默认启用
pg_exporter9630Postgres 监控指标导出器✅ 默认启用
pgbouncer_exporter9631PGBouncer 监控指标导出器✅ 默认启用
pgbackrest_exporter9854Pgbackrest 监控指标导出器✅ 默认启用
vip-managern/a将 L2 VIP 绑定在集群主库节点上⚠️ 按需启用
{{ pg_cluster }}-primary5433通过 haproxy 对外暴露数据库服务:主连接池:读/写服务✅ 默认启用
{{ pg_cluster }}-replica5434通过 haproxy 对外暴露数据库服务:副本连接池:只读服务✅ 默认启用
{{ pg_cluster }}-default5436通过 haproxy 对外暴露数据库服务:主直连服务✅ 默认启用
{{ pg_cluster }}-offline5438通过 haproxy 对外暴露数据库服务:离线直连:离线读服务✅ 默认启用
{{ pg_cluster }}-<service>543x通过 haproxy 对外暴露数据库服务:PostgreSQL 定制服务⚠️按需定制

其中,vip-manager 只有当用户配置了 PG VIP 时才会启用。 在 pg_services 中可以定义更多的 自定义服务,这些服务会被 haproxy 对外暴露,并使用更多的服务端口。

2 - INFRA 架构

Pigsty 中基础设施模块的架构,组件与功能详解。

运行生产级别高可用 PostgreSQL 集群,通常需要一套完善的基础设施服务(底座)来支撑,例如监控告警、日志收集、时间同步、DNS 解析,本地软件仓库等。 Pigsty 提供了 INFRA 模块 来解决这个问题 —— 这是一个 可选模块,但我们强烈推荐启用它。


概览

下图是 单机部署 时的架构示意图,图中右半部分即为 INFRA 模块 所包含的组件,其中包括:

组件种类描述
NginxWeb服务器Web 界面 的统一入口,本地软件仓库,内部服务的反向代理
Repo软件仓库APT / DNF 仓库,下载有所有部署需要的 RPM/DEB 包及其依赖
Grafana可视化平台呈现监控指标、日志与链路追踪,承载监控大屏、巡检报表以及自定义数据应用。
VictoriaMetrics时序数据库拉取全部监控指标,兼容 Prometheus API,并通过 VMUI 提供查询界面。
VictoriaLogs日志平台集中收集存储日志,所有节点默认运行 Vector,将系统日志与数据库日志推送到此。
VictoriaTraces链路追踪收集慢 SQL、服务链路等追踪数据。
VMAlert告警计算评估告警规则,将事件推送至 Alertmanager。
AlertManager告警管理聚合告警事件,分发告警通知,支持邮件、Webhook 等渠道。
BlackboxExporter黑盒探测探测各个 IP/VIP/URL 的可达性。
DNSMASQDNS解析提供 DNS 解析服务,解析 Pigsty 内部使用到的域名。【可选】
Chronyd时间同步提供 NTP 时间同步服务,确保所有节点时间一致。 【可选】
CA证书签发签发环境内的加密证书
Ansible发起管理批量,声明式,无 Agent 管理大量服务器的工具

pigsty-arch


Nginx

Nginx 是 Pigsty 所有 WebUI 类服务的访问入口,默认使用 80 / 443 端口对外提供 HTTP / HTTPS 服务。在线演示

IP访问(替换)域名(HTTP)域名(HTTPS)公开演示
http://10.10.10.10http://i.pigstyhttps://i.pigstyhttps://demo.pigsty.cc

带有 WebUI 的基础设施组件可以通过 Nginx 统一对外暴露服务,例如 GrafanaVictoriaMetrics(VMUI)、AlertManager, 以及 HAProxy 控制台,此外,本地软件仓库 等静态文件资源也通过 Nginx 对内外提供服务。

Nginx 会根据 infra_portal 中的定义,配置本地 Web 服务器或反向代理服务器。

infra_portal:
  home : { domain: i.pigsty }

默认情况下将对外暴露 Pigsty 的管理首页:i.pigsty,上面不同的端点挂载代理了不同的组件:

端点组件原生端口备注公开演示
/Nginx80/443首页、本地仓库、文件服务demo.pigsty.cc/zh/
/ui/Grafana3000Grafana 仪表盘入口demo.pigsty.cc/ui/
/vmetrics/VictoriaMetrics8428时序数据库 Web UIdemo.pigsty.cc/vmetrics/
/vlogs/VictoriaLogs9428日志数据库 Web UIdemo.pigsty.cc/vlogs/
/vtraces/VictoriaTraces10428链路追踪 Web UIdemo.pigsty.cc/vtraces/
/vmalert/VMAlert8880告警规则管理demo.pigsty.cc/vmalert/
/alertmgr/AlertManager9059告警管理 Web UIdemo.pigsty.cc/alertmgr/
/blackbox/Blackbox9115黑盒探测器

Pigsty 允许对 Nginx 进行丰富的定制,将其作为本地文件服务器,或者反向代理服务器,配置自签名或者真正的 HTTPS 证书。

更多信息,请参阅:教程:Nginx:向外代理暴露Web服务教程:Certbot:申请与更新HTTPS证书


Repo

Pigsty 会在安装时,默认在 Infra 节点上创建一个 本地软件仓库,以加速后续软件安装。在线演示

该软件仓库默认位于 /www/pigsty 目录, 由 Nginx 对外提供服务,挂载在 /pigsty 路径上:

IP访问(替换)域名(HTTP)域名(HTTPS)公开演示
http://10.10.10.10/pigstyhttp://i.pigsty/pigstyhttps://i.pigsty/pigstyhttps://demo.pigsty.cc/pigsty

Pigsty 支持 离线安装,实质上是将做好的本地软件仓库提前复制到目标环境中。 当 Pigsty 执行生产部署,需要创建本地软件仓库时,如果发现本地已经存在 /www/pigsty/repo_complete 标记文件,则会跳过从上游下载软件包的步骤,直接使用已有的软件包,避免联网下载。

更多信息,请参阅:配置:INFRA - REPO


Grafana

Grafana 是 Pigsty 监控系统的核心组件,用于可视化展示监控指标、日志与各种信息。在线演示

Grafana 默认监听 3000 端口,挂载于 Nginx /ui 路径点上代理访问:

IP访问(替换)域名(HTTP)域名(HTTPS)公开演示
http://10.10.10.10/uihttp://i.pigsty/uihttps://i.pigsty/uihttps://demo.pigsty.cc/ui

Pigsty 预置了基于 VictoriaMetrics / Logs / Traces 的大量监控面板,并通过 URL 跳转实现一键下钻上卷,帮助快速定位故障。

Grafana 亦可作为低代码可视化平台使用,因此默认安装 ECharts、victoriametrics-datasource、victorialogs-datasource 等插件, 同时将 Vector / Victoria 数据源统一注册为 vmetrics-*vlogs-*vtraces-*,方便扩展自定义仪表板。

更多信息请参阅:配置:INFRA - GRAFANA


VictoriaMetrics

VictoriaMetrics 是 Pigsty 的时序数据库,负责拉取并存储所有监控指标。在线演示

默认监听 8428 端口,挂载于 Nginx /vmetrics 路径上,亦可通过 p.pigsty 域名直接访问:

IP访问(替换)域名(HTTP)域名(HTTPS)公开演示
http://10.10.10.10/vmetricshttp://p.pigstyhttps://i.pigsty/vmetricshttps://demo.pigsty.cc/vmetrics

VictoriaMetrics 完全兼容 Prometheus API,支持 PromQL 查询、远程读写协议以及 Alertmanager API。 内置的 VMUI 提供即席查询界面,可直接探索指标数据,也可作为 Grafana 的数据源使用。

更多信息请参阅:配置:INFRA - VICTORIA


VictoriaLogs

VictoriaLogs 是 Pigsty 的日志平台,集中存储来自所有节点的结构化日志。在线演示

默认监听 9428 端口,挂载于 Nginx /vlogs 路径上:

IP访问(替换)域名(HTTP)域名(HTTPS)公开演示
http://10.10.10.10/vlogshttp://i.pigsty/vlogshttps://i.pigsty/vlogshttps://demo.pigsty.cc/vlogs

所有纳管节点默认运行 Vector Agent,负责收集系统日志、PostgreSQL 日志、Patroni 日志、Pgbouncer 日志等,结构化处理后推送至 VictoriaLogs。 内置 Web UI 支持日志检索与过滤,也可配合 Grafana 的 victorialogs-datasource 插件进行可视化分析。

更多信息请参阅:配置:INFRA - VICTORIA


VictoriaTraces

VictoriaTraces 用于收集链路追踪数据与慢 SQL 记录。在线演示

默认监听 10428 端口,挂载于 Nginx /vtraces 路径上:

IP访问(替换)域名(HTTP)域名(HTTPS)公开演示
http://10.10.10.10/vtraceshttp://i.pigsty/vtraceshttps://i.pigsty/vtraceshttps://demo.pigsty.cc/vtraces

VictoriaTraces 提供 Jaeger 兼容接口,可用于分析服务调用链路与数据库慢查询。 结合 Grafana 面板,能够快速定位性能瓶颈,追溯问题根因。

更多信息请参阅:配置:INFRA - VICTORIA


VMAlert

VMAlert 是告警规则计算引擎,负责评估告警规则并将触发的事件推送至 Alertmanager在线演示

默认监听 8880 端口,挂载于 Nginx /vmalert 路径上:

IP访问(替换)域名(HTTP)域名(HTTPS)公开演示
http://10.10.10.10/vmalerthttp://i.pigsty/vmalerthttps://i.pigsty/vmalerthttps://demo.pigsty.cc/vmalert

VMAlertVictoriaMetrics 读取指标数据,周期性执行告警规则评估。 Pigsty 预置了 PGSQL、NODE、REDIS 等模块的告警规则,覆盖常见故障场景,开箱即用。

更多信息请参阅:配置:INFRA - PROMETHEUS


AlertManager

AlertManager 负责告警事件的聚合、去重、分组与分发。在线演示

默认监听 9059 端口,挂载于 Nginx /alertmgr 路径上,亦可通过 a.pigsty 域名直接访问:

IP访问(替换)域名(HTTP)域名(HTTPS)公开演示
http://10.10.10.10/alertmgrhttp://a.pigstyhttps://i.pigsty/alertmgrhttps://demo.pigsty.cc/alertmgr

AlertManager 支持多种通知渠道:邮件、Webhook、Slack、PagerDuty、企业微信等。 通过配置告警路由规则,可实现按严重程度、模块类型进行差异化分发,支持静默、抑制等高级功能。

更多信息请参阅:配置:INFRA - PROMETHEUS


BlackboxExporter

Blackbox Exporter 用于主动探测目标的可达性,实现黑盒监控。

默认监听 9115 端口,挂载于 Nginx /blackbox 路径上:

IP访问(替换)域名(HTTP)域名(HTTPS)
http://10.10.10.10/blackboxhttp://i.pigsty/blackboxhttps://i.pigsty/blackbox

支持 ICMP Ping、TCP 端口、HTTP/HTTPS 端点等多种探测方式。 可用于监控 VIP 可达性、服务端口存活、外部依赖健康状态等场景,是判断故障影响范围的重要手段。

更多信息请参阅:配置:INFRA - PROMETHEUS


Ansible

Ansible 是 Pigsty 的核心编排工具,所有部署、配置、管理操作均通过 Ansible Playbook 完成。

Pigsty 在安装时会自动在管理节点(Infra 节点)上安装 Ansible。 它采用声明式配置风格与幂等剧本设计:同一剧本可重复执行,系统会自动收敛至期望状态,无需担心副作用。

Ansible 的核心优势:

  • 无 Agent:通过 SSH 远程执行,无需在目标节点安装额外软件。
  • 声明式:描述期望状态,而非执行步骤,配置即文档。
  • 幂等性:多次执行结果一致,支持部分失败后重试。

更多信息请参阅:剧本:Pigsty Playbook


DNSMASQ

DNSMASQ 提供环境内的 DNS 解析服务,将 Pigsty 内部使用的域名解析到对应 IP 地址。

请注意,DNS 是完全可选的模块,Pigsty 本身不依赖 DNS 即可正常运行。

默认监听 53 端口(UDP/TCP),为环境内所有节点提供 DNS 解析:

协议端口配置文件目录
UDP/TCP53/infra/hosts/

其他模块在部署时会自动将域名注册到 INFRA 节点的 DNSMASQ 服务中,例如:

客户端节点可将 INFRA 节点配置为 DNS 服务器,即可通过域名访问各服务,无需记忆 IP 地址。

更多信息请参阅:配置:INFRA - DNS教程:DNS:配置域名解析


Chronyd

Chronyd 提供 NTP 时间同步服务,确保环境内所有节点时钟一致。

默认监听 123 端口(UDP),作为环境内的时间源:

协议端口说明
UDP123NTP 时间同步服务

时间同步对分布式系统至关重要:日志排查需要时间戳对齐,证书校验依赖时钟准确,PostgreSQL 流复制也对时钟偏移敏感。 在隔离网络环境中,INFRA 节点可作为内部 NTP 服务器,其他节点同步至此。

更多信息请参阅:配置:NODE - NTP


节点与Infra的关系


节点关系

普通的节点,会通过 admin_ip 参数来引用某个 INFRA节点 作为它们的基础设施提供者。

例如,当你配置了全局的 admin_ip = 10.10.10.10,那么通常意味着所有节点都会使用这个 IP 上的基础设施服务。

以下是引用 ${admin_ip} 的配置参数列表

参数模块默认值说明
repo_endpointINFRAhttp://${admin_ip}:80软件仓库访问地址
repo_upstream.baseurlINFRAhttp://${admin_ip}/pigsty本地软件源 baseurl
infra_portal.endpointINFRA${admin_ip}:<port>Nginx 反向代理后端地址
dns_recordsINFRA["${admin_ip} i.pigsty", ...]DNS 解析记录
node_default_etc_hostsNODE["${admin_ip} i.pigsty"]默认静态 DNS 记录
node_etc_hostsNODE[]自定义静态 DNS 记录
node_dns_serversNODE["${admin_ip}"]动态 DNS 服务器地址
node_ntp_serversNODE["${admin_ip}"]NTP 时间服务器(可选)

这是一种弱依赖关系

通常管理节点与基础设施节点(INFRA 节点)重合。若有多个 INFRA 节点,管理节点通常是其中第一个,其他作为备份。

在大规模生产环境部署的时候,您可能会出于各种原因,将安装 Ansible 管理节点与运行 Infra 模块的节点分离开来。 例如,使用 1-2 台迷你的专用主机,归属于 DBA 组,作为整个环境的控制中枢,ADMIN 节点。 使用 2-3 台高配置的物理机,作为整个环境的监控基础设施 INFRA 节点。

下表展示了不同规模部署中各类节点的典型数量:

部署规模ADMININFRAETCDMINIOPGSQL
单机开发11101
三节点13303
小型生产1230N
大型生产2354+N

3 - PGSQL 架构

PostgreSQL 模块的组件交互与数据流。

PGSQL 模块在生产环境中以 集群 的形式组织,这些 集群 是由一组通过 主-备 关联的数据库 实例 组成的 逻辑实体

每个集群都是一个 自治 的业务单元,由至少一个 主库实例 组成,并通过服务向外暴露能力。

在 Pigsty 的 PGSQL 模块中有四种核心实体:

  • 集群(Cluster):自治的 PostgreSQL 业务单元,用作其他实体的顶级命名空间。
  • 服务(Service):对外暴露能力的命名抽象,路由流量,并使用节点端口暴露服务。
  • 实例(Instance):由在单个节点上的运行进程和数据库文件组成的单一 PostgreSQL 服务器。
  • 节点(Node):运行 Linux + Systemd 环境的硬件资源抽象,可以是裸机、VM、容器或 Pod。

辅以"数据库"“角色"两个业务实体,共同组成完整的逻辑视图。如下图所示:

pigsty-er.jpg

命名约定

  • 集群名应为有效的 DNS 域名,不包含任何点号,正则表达式为:[a-zA-Z0-9-]+
  • 服务名应以集群名为前缀,并以特定单词作为后缀:primaryreplicaofflinedelayed,中间用 - 连接。
  • 实例名以集群名为前缀,以正整数实例号为后缀,用 - 连接,例如 ${cluster}-${seq}
  • 节点由其首要内网 IP 地址标识,因为 PGSQL 模块中数据库与主机 1:1 部署,所以主机名通常与实例名相同。

概览

下图是 PGSQL 模块的架构示意图,展示了各组件之间的交互关系:

组件种类描述
PostgreSQL数据库世界上最先进的开源关系型数据库,PGSQL 模块的核心。
Patroni高可用托管 PostgreSQL 进程,协调故障转移、选主、配置变更。
etcdDCS分布式一致性存储,用于保存集群元数据与领导者信息。
Pgbouncer连接池轻量级连接池中间件,复用连接、降低开销、提供额外灵活性。
HAProxy负载均衡对外暴露服务端口,根据角色分发流量至主库或从库。
vip-managerVIP管理将 L2 VIP 绑定到当前主库节点,实现透明漂移。【可选】
pgBackRest备份恢复全量/增量备份与 WAL 归档,支持本地与对象存储。
pg_exporter指标导出导出 PostgreSQL 监控指标供 Prometheus 抓取。
pgbouncer_exporter指标导出导出 Pgbouncer 连接池指标。
pgbackrest_exporter指标导出导出备份状态指标。
Vector日志采集收集 PostgreSQL、Patroni、Pgbouncer 等日志推送至中心。

pigsty-arch


PostgreSQL

PostgreSQL 是 PGSQL 模块的核心,默认监听 5432 端口提供关系型数据库服务。

协议端口说明
TCP5432PostgreSQL 数据库服务端口

在多个节点上以相同 pg_cluster 安装 PGSQL 模块,将自动基于流式复制组成高可用集群。 实例角色由 pg_role 定义:primary(主库)、replica(从库)、offline(离线从库)。

PostgreSQL 进程默认由 Patroni 托管,可根据 pg_conf 模板切换 OLTP/OLAP/CRIT/TINY 配置, 并通过 pg_parameters 覆盖任意参数。

更多信息请参阅:配置:PGSQL - PG_BOOTSTRAP


Patroni

Patroni 是 PostgreSQL 高可用控制器,默认监听 8008 端口提供 REST API。

协议端口说明
TCP8008Patroni REST API / 健康检查

Patroni 接管 PostgreSQL 的启动、停止、配置与健康状态,将领导者、成员信息写入 etcd。 它负责自动故障转移、保持复制因子、协调参数变更,并提供 REST API 供 HAProxy、监控与管理员查询。

HAProxy 通过 Patroni 健康检查端点判断实例角色,将流量路由至正确的主库或从库。 vip-manager 监视 etcd 中的领导者键,在主库切换时自动漂移 VIP。

更多信息请参阅:配置:PGSQL - PG_BOOTSTRAP


Pgbouncer

Pgbouncer 是轻量级连接池中间件,默认监听 6432 端口。

协议端口说明
TCP6432Pgbouncer 连接池端口

Pgbouncer 以无状态方式运行在每个实例上,通过本地 Unix Socket 连接 PostgreSQL, 用于吸收瞬时连接、稳定会话并提供额外指标。

Pigsty 默认让生产流量(读写服务 5433 / 只读服务 5434)经由 Pgbouncer, 仅默认服务(5436)与离线服务(5438)绕过连接池直连 PostgreSQL

连接池模式由 pgbouncer_poolmode 控制,默认为 transaction(事务级复用)。 可通过 pgbouncer_enabled 关闭连接池。

更多信息请参阅:配置:PGSQL - PG_ACCESS


HAProxy

HAProxy 是服务入口与负载均衡器,对外暴露多个数据库服务端口。

端口服务名目标说明
9101管理接口-HAProxy 统计与管理页面
5433primary主库 Pgbouncer读写服务,路由至主库连接池
5434replica从库 Pgbouncer只读服务,路由至从库连接池
5436default主库 Postgres默认服务,直连主库(绕过连接池)
5438offline离线库 Postgres离线服务,直连离线从库(ETL/分析)

HAProxy 通过 Patroni REST API 提供的健康检查信息判断实例角色,将流量路由至对应的主库或从库。 服务定义由 pg_default_servicespg_services 组合而成。

可通过 pg_service_provider 指定专用的 HAProxy 节点组承载更高流量, 默认使用本地节点上的 HAProxy 对外发布服务。

更多信息请参阅:服务接入配置:PGSQL - PG_ACCESS


vip-manager

vip-manager 负责将 L2 VIP 绑定到当前主库节点,实现透明漂移。

协议说明
L2虚拟 IP 绑定至主库节点网卡

vip-manager 在每个 PG 节点上运行,监视 etcd 中由 Patroni 写入的领导者键, 将 pg_vip_address 绑定到当前主库节点的网络接口上。

当发生故障转移时,vip-manager 会立即释放旧主机上的 VIP,并在新主机上重新绑定, 保障旧主机不会继续响应请求,避免脑裂。

该组件可选,通过 pg_vip_enabled 启用。 启用后需确保所有节点处于同一 VLAN,否则 VIP 无法正确漂移。

更多信息请参阅:教程:VIP 配置配置:PGSQL - PG_ACCESS


pgBackRest

pgBackRest 是专业的 PostgreSQL 备份恢复工具,支持全量/增量/差异备份与 WAL 归档。

功能说明
全量备份完整数据库备份
增量备份仅备份变化的数据块
WAL归档持续归档 WAL 日志,支持 PITR
仓库本地磁盘(默认)或 MinIO 等对象存储

pgBackRestPostgreSQL 配合,在主库上创建备份仓库,执行备份与归档任务。 默认使用本地备份仓库(pgbackrest_method = local), 也可配置为 MinIO 等对象存储,实现集中化备份管理。

初始化完成后可通过 pgbackrest_init_backup 自动发起首次全量备份。 恢复过程与 Patroni 集成,支持将副本引导为新的主库或备库。

更多信息请参阅:备份恢复配置:PGSQL - PG_BACKUP


pg_exporter

pg_exporter 导出 PostgreSQL 监控指标,默认监听 9630 端口。

协议端口说明
TCP9630pg_exporter 指标端口

pg_exporter 运行在每个 PG 节点上,通过本地 Unix Socket 连接 PostgreSQL, 导出覆盖会话、缓冲命中、复制延迟、事务率等丰富指标,供 INFRA 节点上的 VictoriaMetrics 抓取。

采集配置由 pg_exporter_config 指定, 支持自动数据库发现(pg_exporter_auto_discovery), 并可通过 pg_exporter_cache_ttls 配置阶梯式缓存策略。

更多信息请参阅:配置:PGSQL - PG_MONITOR


pgbouncer_exporter

pgbouncer_exporter 导出 Pgbouncer 连接池指标,默认监听 9631 端口。

协议端口说明
TCP9631pgbouncer_exporter 指标端口

pgbouncer_exporter 读取 Pgbouncer 的统计视图,提供连接池利用率、等待队列与命中率指标。 若禁用 Pgbouncer,本组件也应同时关闭。

更多信息请参阅:配置:PGSQL - PG_MONITOR


pgbackrest_exporter

pgbackrest_exporter 导出备份状态指标,默认监听 9854 端口。

协议端口说明
TCP9854pgbackrest_exporter 指标端口

pgbackrest_exporter 解析 pgBackRest 状态,生成最近备份时间、大小、类型等指标。 结合告警策略可快速发现备份过期或失败,保障数据安全。

更多信息请参阅:配置:PGSQL - PG_MONITOR


总结

PGSQL 模块为 Pigsty 提供生产级 PostgreSQL 高可用集群,是整个系统的核心。

组件端口说明
PostgreSQL5432数据库服务
Patroni8008高可用控制器 REST API
Pgbouncer6432连接池
HAProxy543x服务入口与负载均衡
vip-manager-L2 VIP 管理(可选)
pgBackRest-备份恢复
pg_exporter9630PostgreSQL 指标导出
pgbouncer_exporter9631Pgbouncer 指标导出
pgbackrest_exporter9854备份状态指标导出

典型的访问路径:客户端 → DNS/VIP → HAProxy(服务端口) → Pgbouncer → PostgreSQL。

Patronietcd 协同实现自动故障转移,pgBackRest 保障数据可恢复, 三个 Exporter 配合 VictoriaMetrics 提供完整的可观测性。

更多信息请参阅:PGSQL 模块组件与交互