这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
模块化架构
Pigsty 的模块化架构:声明式组合,自由部署。
Pigsty 使用 模块化架构 与 声明式接口。
- Pigsty 使用 配置清单 描述整套部署环境,并通过 ansible 剧本实现。
- Pigsty 在可以在任意节点上运行,无论是物理裸机还是虚拟机,只要操作系统 兼容即可。
- Pigsty 的行为由配置参数控制,具有幂等性的剧本 会将节点调整到配置所描述的状态。
- Pigsty 采用模块化设计,可自由组合以适应不同场景。使用剧本将模块安装到配置指定的节点上。
模块
Pigsty 采用模块化设计,有六个主要的默认模块:PGSQL、INFRA、NODE、ETCD、REDIS 和 MINIO。
PGSQL:由 Patroni、Pgbouncer、HAproxy、PgBackrest 等驱动的自治高可用 Postgres 集群。
INFRA:本地软件仓库、Prometheus、Grafana、Loki、AlertManager、PushGateway、Blackbox Exporter…
NODE:调整节点到所需状态、名称、时区、NTP、ssh、sudo、haproxy、docker、promtail、keepalived
ETCD:分布式键值存储,用作高可用 Postgres 集群的 DCS:共识选主/配置管理/服务发现。
REDIS:Redis 服务器,支持独立主从、哨兵、集群模式,并带有完整的监控支持。
MINIO:与 S3 兼容的简单对象存储服务器,可作为 PG数据库备份的可选目的地。
你可以声明式地自由组合它们。如果你想要主机监控,在基础设施节点上安装INFRA模块,并在纳管节点上安装 NODE 模块就足够了。
ETCD 和 PGSQL 模块用于搭建高可用 PG 集群,将模块安装在多个节点上,可以自动形成一个高可用的数据库集群。
您可以复用 Pigsty 基础架构并开发您自己的模块,REDIS 和 MINIO 可以作为一个样例。后续还会有更多的模块加入,例如对 Mongo 与 MySQL 的初步支持已经提上了日程。
请注意,所有模块都强依赖 NODE 模块:在 Pigsty 中节点必须先安装 NODE 模块,被 Pigsty 纳管后方可部署其他模块。
当节点(默认)使用本地软件源进行安装时,NODE 模块对 INFRA 模块有弱依赖。因此安装 INFRA 模块的管理节点/基础设施节点会在 deploy.yml 剧本中完成 Bootstrap 过程,解决循环依赖。

单机安装
默认情况下,Pigsty 将在单个 节点 (物理机/虚拟机) 上安装。deploy.yml 剧本将在当前节点上安装 INFRA、ETCD、PGSQL 和可选的 MINIO 模块,
这将为你提供一个功能完备的可观测性技术栈全家桶 (Prometheus、Grafana、Loki、AlertManager、PushGateway、BlackboxExporter 等) ,以及一个内置的 PostgreSQL 单机实例作为 CMDB,也可以开箱即用。 (集群名 pg-meta,库名为 meta)。
这个节点现在会有完整的自我监控系统、可视化工具集,以及一个自动配置有 PITR 的 Postgres 数据库(HA不可用,因为你只有一个节点)。你可以使用此节点作为开发箱、测试、运行演示以及进行数据可视化和分析。或者,还可以把这个节点当作管理节点,部署纳管更多的节点!

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

高可用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 数据库集群。

硬件故障由 patroni、etcd 和 haproxy 提供的自愈高可用架构来兜底,在主库故障的情况下,默认会在 30 秒内执行自动故障转移(Failover)。
客户端无需修改配置重启应用:Haproxy 利用 patroni 健康检查进行流量分发,读写请求会自动分发到新的集群主库中,并避免脑裂的问题。
这一过程十分丝滑,例如在从库故障,或主动切换(switchover)的情况下,客户端只有一瞬间的当前查询闪断,
软件故障、人为错误和 数据中心级灾难由 pgbackrest 和可选的 MinIO 集群来兜底。这为您提供了本地/云端的 PITR 能力,并在数据中心失效的情况下提供了跨地理区域复制,与异地容灾功能。
1 - 模块总览
Pigsty 的六大核心模块及其功能定位。
Pigsty 采用模块化设计,将功能分解为可独立部署、自由组合的模块。
核心模块
PGSQL 模块
PostgreSQL 高可用集群,Pigsty 的核心模块。
┌─────────────────────────────────────────────────────────────┐
│ PGSQL 模块 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
│ │PostgreSQL│ │Pgbouncer│ │ HAProxy │ │ Patroni │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────────┘ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
│ │pgBackRest│ │pg_exporter││vip-manager│ │ 各类扩展 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
主要功能:
- 自治高可用 PostgreSQL 集群
- Patroni + ETCD 实现自动故障转移
- HAProxy 负载均衡与服务发现
- Pgbouncer 连接池
- pgBackRest 备份与 PITR
- 完整的监控与告警
INFRA 模块
基础设施服务,提供软件仓库、监控、DNS 等核心服务。
┌─────────────────────────────────────────────────────────────┐
│ INFRA 模块 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
│ │ Nginx │ │ Grafana │ │Prometheus│ │AlertManager │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────────┘ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
│ │ DNSMASQ │ │ Loki │ │ Chronyd │ │ Ansible │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
主要功能:
- Nginx:Web 服务、软件仓库
- Prometheus/VictoriaMetrics:指标采集与存储
- Grafana:可视化仪表盘
- AlertManager:告警管理
- DNSMASQ:DNS 服务
- Loki/VictoriaLogs:日志收集
NODE 模块
节点管理,将裸机/虚拟机调整到期望状态。
┌─────────────────────────────────────────────────────────────┐
│ NODE 模块 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 主机名、时区、NTP、内核参数、用户、权限、防火墙... │ │
│ └─────────────────────────────────────────────────────┘ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
│ │node_exp │ │ Vector │ │ HAProxy │ │ Docker │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
主要功能:
- 系统配置:主机名、时区、NTP
- 用户与权限:SSH、Sudo
- node_exporter:主机监控
- Vector:日志收集
- Docker:容器支持(可选)
ETCD 模块
分布式键值存储,为 PostgreSQL 高可用提供 DCS。
┌─────────────────────────────────────────────────────────────┐
│ ETCD 模块 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ ETCD-1 │◄─┼─► ETCD-2 │◄─┼─► ETCD-3 │ Raft 共识 │
│ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────────┘
主要功能:
- Patroni 的 DCS 后端
- 集群领导者选举
- 配置管理与服务发现
- 分布式锁
REDIS 模块
Redis 缓存服务,支持多种部署模式。
┌─────────────────────────────────────────────────────────────┐
│ REDIS 模块 │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 主从模式 │ │ 哨兵模式 │ │
│ │ Master ──► Slave │ │ Master + Sentinel│ │
│ └─────────────────┘ └─────────────────┘ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 集群模式(Redis Cluster) │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
主要功能:
- 独立主从模式
- 哨兵高可用模式
- Redis Cluster 分片集群
- 完整监控支持
MINIO 模块
S3 兼容对象存储,用于数据库备份。
┌─────────────────────────────────────────────────────────────┐
│ MINIO 模块 │
│ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │
│ │Node 1 │ │Node 2 │ │Node 3 │ │Node 4 │ 分布式存储 │
│ └───────┘ └───────┘ └───────┘ └───────┘ │
└─────────────────────────────────────────────────────────────┘
主要功能:
- S3 兼容 API
- pgBackRest 备份目标
- 分布式冗余存储
- 跨区域复制
模块依赖
┌─────────┐
│ PGSQL │
└────┬────┘
│
┌─────────────┼─────────────┐
│ │ │
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
│ NODE │ │ ETCD │ │ MINIO │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
└─────────────┼─────────────┘
│
┌────▼────┐
│ INFRA │
└────┬────┘
│
┌────▼────┐
│ OS │
└─────────┘
| 依赖关系 |
说明 |
| PGSQL → NODE |
节点必须先被纳管 |
| PGSQL → ETCD |
Patroni 需要 DCS |
| PGSQL → MINIO |
可选,远程备份 |
| NODE → INFRA |
软件仓库(弱依赖) |
| ETCD → NODE |
节点必须先被纳管 |
部署顺序
推荐的模块部署顺序:
# 1. 基础设施(包含软件仓库)
./infra.yml
# 2. ETCD 集群(高可用必需)
./etcd.yml
# 3. MinIO 集群(可选,远程备份)
./minio.yml
# 4. PostgreSQL 集群
./pgsql.yml
# 5. Redis 集群(可选)
./redis.yml
或使用一键部署:
./deploy.yml # 自动按正确顺序部署所有模块
2 - INFRA 架构
基础设施模块的组件与功能详解。
架构总览
一套标准的 Pigsty 部署会带有一个 INFRA 模块,为纳管的节点与数据库集群提供服务:
- Nginx:作为 Web 服务器,提供本地软件仓库服务;作为反向代理,统一收拢 Grafana、VMUI、Alertmanager 等 WebUI 的访问入口。
- Grafana:可视化平台,呈现监控指标、日志与链路追踪,承载监控大屏、巡检报表以及自定义数据应用。
- VictoriaMetrics 套件:提供统一的可观测性平台。
- VictoriaMetrics:拉取全部监控指标,兼容 Prometheus API,并通过 VMUI 提供查询界面。
- VMAlert:评估告警规则,将事件推送至 Alertmanager。
- VictoriaLogs:集中收集存储日志,所有节点默认运行 Vector,将系统日志与数据库日志推送到此。
- VictoriaTraces:收集慢 SQL、服务链路等追踪数据。
- AlertManager:聚合告警事件,分发告警通知,支持邮件、Webhook 等渠道。
- BlackboxExporter:探测各个 IP/VIP/URL 的可达性。
- DNSMASQ:提供 DNS 解析服务,解析 Pigsty 内部使用到的域名。
- Chronyd:提供 NTP 时间同步服务,确保所有节点时间一致。

INFRA 模块对于高可用 PostgreSQL 并非必选项,例如在 精简安装 模式下,就不会安装 Infra 模块。
但 INFRA 模块提供了运行生产级高可用 PostgreSQL 集群所需要的支持性服务,通常强烈建议安装启用以获得完整的 Pigsty DBaaS 体验。
如果您已经有自己的基础设施(Nginx,本地仓库,监控系统,DNS,NTP),您也可以停用 INFRA 模块,并通过修改配置来使用现有的基础设施。
| 组件 |
端口 |
默认域名 |
描述 |
| Nginx |
80/443 |
i.pigsty |
Web 服务门户、本地仓库 |
| Grafana |
3000 |
g.pigsty |
可视化平台 |
| VictoriaMetrics |
8428 |
p.pigsty |
时序数据库(VMUI,兼容 Prometheus) |
| VictoriaLogs |
9428 |
- |
日志数据库(接收 Vector 推送) |
| VictoriaTraces |
10428 |
- |
链路追踪 / 慢 SQL 存储 |
| VMAlert |
8880 |
- |
计算指标、评估告警规则 |
| AlertManager |
9059 |
a.pigsty |
告警聚合分发 |
| BlackboxExporter |
9115 |
- |
黑盒监控探测 |
| DNSMasq |
53 |
- |
DNS 服务器 |
| Chronyd |
123 |
- |
NTP 时间服务器 |
Nginx
Nginx 是 Pigsty 所有 WebUI 类服务的访问入口,默认使用 80 / 443 端口对外提供 HTTP / HTTPS 服务。
带有 WebUI 的基础设施组件可以通过 Nginx 统一对外暴露服务,例如 Grafana、VictoriaMetrics(VMUI)、AlertManager,
以及 HAProxy 控制台,此外,本地 yum/apt 仓库等静态文件资源也通过 Nginx 对内提供服务。
Nginx 会根据 infra_portal 的定义配置本地 Web 服务器或反向代理服务器。
默认情况下将对外暴露 Pigsty 的管理首页:i.pigsty
infra_portal:
home : { domain: i.pigsty }
Pigsty 允许对 Nginx 进行丰富的定制,将其作为本地文件服务器,或者反向代理服务器,配置自签名或者真正的 HTTPS 证书。
以下是 Pigsty 公开演示站点 demo.pigsty.cc 使用的 Nginx 配置:
您可以在 Nginx 上监听不同的域名,通过反向代理的方式,使用统一入口对外暴露不同的 Web 服务:
infra_portal: # domain names and upstream servers
home : { domain: home.pigsty.cc ,certbot: pigsty.demo }
grafana : { domain: demo.pigsty.cc ,endpoint: "${admin_ip}:3000", websocket: true ,certbot: pigsty.demo }
prometheus : { domain: p.pigsty.cc ,endpoint: "${admin_ip}:8428" ,certbot: pigsty.demo }
alertmanager : { domain: a.pigsty.cc ,endpoint: "${admin_ip}:9059" ,certbot: pigsty.demo }
blackbox : { endpoint: "${admin_ip}:9115" }
vmalert : { endpoint: "${admin_ip}:8880" }
postgrest : { domain: api.pigsty.cc ,endpoint: "127.0.0.1:8884" }
pgadmin : { domain: adm.pigsty.cc ,endpoint: "127.0.0.1:8885" }
pgweb : { domain: cli.pigsty.cc ,endpoint: "127.0.0.1:8886" }
bytebase : { domain: ddl.pigsty.cc ,endpoint: "127.0.0.1:8887" }
jupyter : { domain: lab.pigsty.cc ,endpoint: "127.0.0.1:8888" ,websocket: true }
gitea : { domain: git.pigsty.cc ,endpoint: "127.0.0.1:8889" ,certbot: pigsty.cc }
wiki : { domain: wiki.pigsty.cc ,endpoint: "127.0.0.1:9002" ,certbot: pigsty.cc }
noco : { domain: noco.pigsty.cc ,endpoint: "127.0.0.1:9003" ,certbot: pigsty.cc }
supa : { domain: supa.pigsty.cc ,endpoint: "10.2.82.163:8000" ,websocket: true ,certbot: pigsty.cc }
dify : { domain: dify.pigsty.cc ,endpoint: "10.2.82.163:8001" ,websocket: true ,certbot: pigsty.cc }
odoo : { domain: odoo.pigsty.cc ,endpoint: "127.0.0.1:8069" ,websocket: true ,certbot: pigsty.cc }
mm : { domain: mm.pigsty.cc ,endpoint: "10.2.82.163:8065" ,websocket: true }
web.io:
domain: en.pigsty.cc
path: "/www/web.io"
certbot: pigsty.doc
enforce_https: true
config: |
# rewrite /zh/ to /
location /zh/ {
rewrite ^/zh/(.*)$ /$1 permanent;
}
web.cc:
domain: pigsty.cc
path: "/www/web.cc"
domains: [ zh.pigsty.cc ]
certbot: pigsty.doc
config: |
# rewrite /zh/ to /
location /zh/ {
rewrite ^/zh/(.*)$ /$1 permanent;
}
repo:
domain: pro.pigsty.cc
path: "/www/repo"
index: true
certbot: pigsty.doc
更多信息,请参阅:教程:Nginx:向外代理暴露Web服务 与 教程:Certbot:申请与更新HTTPS证书
本地软件仓库
Pigsty 会在安装时,默认在 Infra 节点上创建一个本地软件仓库,以加速后续软件安装。
该软件仓库默认位于 /www/pigsty 目录,由 Nginx 提供服务,可以访问 http://i.pigsty/pigsty 使用。
Pigsty 的离线软件包是将已经建立好的软件源目录整个打成压缩包:当 Pigsty 尝试构建本地源时,如果发现本地源目录 /www/pigsty 已经存在,且带有 /www/pigsty/repo_complete 标记文件,则会认为本地源已经构建完成,从而跳过从原始上游下载软件的步骤,消除了对互联网访问的依赖。
Repo 定义文件位于 /www/pigsty.repo,默认可以通过 http://${admin_ip}/pigsty.repo 获取。
curl -L http://i.pigsty/pigsty.repo -o /etc/yum.repos.d/pigsty.repo
您也可以在没有 Nginx 的情况下直接使用文件本地源:
[pigsty-local]
name=Pigsty local $releasever - $basearch
baseurl=file:///www/pigsty/
enabled=1
gpgcheck=0
更多信息,请参阅:配置:INFRA - REPO
Victoria 可观测性套件
Pigsty v4.0 使用 VictoriaMetrics 系列组件取代 Prometheus/Loki,提供统一的可观测性平台:
- VictoriaMetrics:默认监听
8428 端口,可通过 http://p.pigsty 或 https://i.pigsty/vmetrics/ 访问 VMUI,兼容 PromQL、远程读写协议以及 Alertmanager API。
- VMAlert:在
8880 端口上运行告警规则,将事件发送至 Alertmanager。
- VictoriaLogs:默认监听
9428 端口,支持通过 https://i.pigsty/vlogs/ 检索日志。节点侧 Vector 会将系统日志、PostgreSQL 日志等结构化后推送至此。
- VictoriaTraces:监听
10428 端口,提供 Jaeger 兼容接口,便于分析慢 SQL 与链路追踪。
- Alertmanager:监听
9059 端口,可通过 http://a.pigsty 或 https://i.pigsty/alertmgr/ 管理告警路由与通知。
- Blackbox Exporter:默认监听
9115 端口,负责 ICMP/TCP/HTTP 黑盒探测。
更多信息请参阅:配置:INFRA - VICTORIA 与 配置:INFRA - PROMETHEUS。
Grafana
Grafana 是 Pigsty WebUI 的核心,默认监听 3000 端口,可通过 IP:3000 或 http://g.pigsty 访问。
Pigsty 预置了基于 VictoriaMetrics / Logs / Traces 的 Dashboard,并通过 URL 跳转实现一键下钻上卷,帮助快速定位故障。
Grafana 亦可作为低代码可视化平台使用,因此默认安装 ECharts、victoriametrics-datasource、victorialogs-datasource 等插件,同时将 Vector / Victoria 数据源统一注册为 vmetrics-*、vlogs-*、vtraces-*,方便扩展自定义仪表板。
更多信息请参阅:配置:INFRA - GRAFANA。
Ansible
Pigsty 默认会在元节点上安装 Ansible,Ansible 是一个流行的运维工具,采用声明式的配置风格与幂等的剧本设计,可以极大降低系统维护的复杂度。
DNSMASQ
DNSMASQ 提供环境内的 DNS 解析服务,其他模块的域名将会注册到 INFRA 节点上的 DNSMASQ 服务中。
DNS 记录默认放置于所有 INFRA 节点的 /etc/hosts.d/ 目录中。
更多信息,请参阅:配置:INFRA - DNS 与 教程:DNS:配置域名解析
Chronyd
NTP 服务用于同步环境内所有节点的时间(可选)。
更多信息,请参阅:配置:NODES - NTP
3 - PGSQL 架构
PostgreSQL 模块的组件交互与数据流。
PGSQL模块在生产环境中以集群的形式组织,这些集群是由一组由主-备关联的数据库实例组成的逻辑实体。
每个集群都是一个自治的业务单元,由至少一个 主库实例 组成,并通过服务向外暴露能力。
在 Pigsty 的PGSQL模块中有四种核心实体:
- 集群(Cluster):自治的 PostgreSQL 业务单元,用作其他实体的顶级命名空间。
- 服务(Service):对外暴露能力的命名抽象,路由流量,并使用节点端口暴露服务。
- 实例(Instance):由在单个节点上的运行进程和数据库文件组成的单一 PostgreSQL 服务器。
- 节点(Node):运行 Linux + Systemd 环境的硬件资源抽象,可以是裸机、VM、容器或 Pod。
辅以“数据库”“角色”两个业务实体,共同组成完整的逻辑视图。如下图所示:

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