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

最后修改 2026-01-09: add supabase asciinema demo (3104503)