模块总览
Pigsty 的六大核心模块及其功能定位。
如果您只有一分钟,请记住这张图:
flowchart TB
subgraph AppLayer["应用层模块"]
direction LR
PGSQL["🐘 PGSQL<br/>PostgreSQL"]
REDIS["📮 REDIS<br/>缓存"]
MINIO["📦 MINIO<br/>对象存储"]
FERRET["🍃 FERRET<br/>MongoDB"]
DOCKER["🐳 DOCKER<br/>容器"]
end
subgraph BaseLayer["基础层模块"]
direction LR
NODE["🖥️ NODE<br/>节点管理/纳管"]
ETCD["🔐 ETCD<br/>DCS 共识"]
INFRA["📊 INFRA<br/>监控/仓库/DNS/告警"]
end
PGSQL & REDIS & MINIO & FERRET & DOCKER --> NODE
PGSQL --> ETCD
NODE --> INFRA
subgraph Examples["部署示例"]
E1["纯监控:INFRA + NODE"]
E2["单机数据库:INFRA + NODE + ETCD + PGSQL"]
E3["高可用集群:INFRA + NODE + ETCD + PGSQL×3"]
E4["完整套件:全部模块"]
end
核心价值:像搭积木一样组合模块。需要什么就装什么,单机到集群一套配置,声明式描述自动部署。
| 章节 | 说明 | 核心问题 |
|---|---|---|
| 模块总览 | 六大核心模块的功能定位与依赖关系 | 各模块是做什么的? |
| INFRA 架构 | 基础设施模块:监控、仓库、DNS | 监控系统怎么工作? |
| PGSQL 架构 | PostgreSQL 模块:组件交互与数据流 | 数据库集群内部结构? |
flowchart LR
subgraph Problems["❌ 传统一体化部署的困境"]
direction TB
P1["全有或全无<br/>安装必须完整,无法按需裁剪"]
P2["升级困难<br/>牵一发动全身,风险高"]
P3["灵活性差<br/>无法适应不同场景"]
end
subgraph Solutions["✅ 模块化架构的优势"]
direction TB
S1["按需组合<br/>只需监控?INFRA + NODE<br/>需要数据库?再加 PGSQL"]
S2["独立升级<br/>各模块独立演进<br/>风险可控,逐步推进"]
S3["场景适配<br/>开发:单节点<br/>生产:多节点高可用"]
end
Problems --> |模块化改造| Solutions
| 模块 | 功能 | 核心组件 | 典型场景 |
|---|---|---|---|
| PGSQL | 高可用 PostgreSQL | PostgreSQL、Patroni、Pgbouncer、HAProxy | 业务数据库 |
| INFRA | 基础设施服务 | Prometheus、Grafana、Nginx、AlertManager | 监控中心 |
| NODE | 节点管理 | node_exporter、Vector、Docker | 所有服务器 |
| ETCD | 分布式共识 | Etcd 集群 | HA 必需 |
| REDIS | 缓存服务 | Redis 主从/哨兵/集群 | 应用缓存 |
| MINIO | 对象存储 | MinIO 分布式存储 | 远程备份 |
flowchart TB
PGSQL["🐘 PGSQL<br/>核心数据库模块"]
PGSQL --> NODE["🖥️ NODE<br/>(必需)"]
PGSQL --> ETCD["🔐 ETCD<br/>(HA 必需)"]
PGSQL -.-> MINIO["📦 MINIO<br/>(可选备份)"]
NODE --> INFRA["📊 INFRA<br/>软件源和监控"]
ETCD --> INFRA
MINIO --> INFRA
INFRA --> OS["🖥️ OS<br/>操作系统基础"]
subgraph Notes["📋 依赖说明"]
N1["所有模块都依赖 NODE(节点必须先被纳管)"]
N2["NODE 弱依赖 INFRA(使用本地软件源时)"]
N3["PGSQL 需要 ETCD 实现高可用"]
N4["PGSQL 可选使用 MINIO 进行远程备份"]
end
开发测试环境,一台机器搞定所有:
flowchart TB
subgraph SingleNode["🖥️ 单节点全能部署 (10.10.10.10)"]
direction TB
subgraph INFRA["📊 INFRA:监控中心"]
I1["Prometheus、Grafana、Nginx<br/>AlertManager、VictoriaLogs"]
end
subgraph ETCD["🔐 ETCD:分布式共识"]
E1["单节点 Etcd(开发模式)"]
end
subgraph PGSQL["🐘 PGSQL:pg-meta 数据库"]
P1["PostgreSQL + Pgbouncer + 完整监控"]
end
subgraph NODE["🖥️ NODE:节点管理"]
N1["node_exporter、Vector、时区、NTP"]
end
INFRA --> ETCD --> PGSQL --> NODE
end
Usage["📋 适用场景:开发环境、测试环境、个人学习、演示Demo"]
分布式高可用架构:
flowchart TB
subgraph Production["🏢 生产环境分布式部署"]
subgraph InfraLayer["📊 INFRA 节点 (1-2台)"]
INFRA1["10.10.10.10<br/>Prometheus, Grafana, Nginx<br/>AlertManager, VictoriaLogs"]
INFRA2["10.10.10.11<br/>备份监控节点(可选)"]
end
subgraph EtcdLayer["🔐 ETCD 集群 (3台)"]
E1["10.10.10.21"] <--> E2["10.10.10.22"] <--> E3["10.10.10.23"]
EtcdNote["Raft 共识协议"]
end
subgraph PgsqlLayer["🐘 PGSQL 集群 pg-test (3台)"]
direction LR
subgraph Primary["Primary<br/>10.10.10.31"]
P1["PostgreSQL<br/>Patroni<br/>HAProxy<br/>Pgbouncer"]
end
subgraph Replica1["Replica<br/>10.10.10.32"]
R1["PostgreSQL<br/>Patroni<br/>HAProxy<br/>Pgbouncer"]
end
subgraph Replica2["Replica<br/>10.10.10.33"]
R2["PostgreSQL<br/>Patroni<br/>HAProxy<br/>Pgbouncer"]
end
Primary --> Replica1 --> Replica2
end
subgraph MinioLayer["📦 MINIO 集群 (可选,4台)"]
MinioNote["用于 PostgreSQL 远程备份,跨地域灾备"]
end
InfraLayer --> |监控/日志| EtcdLayer
EtcdLayer --> |DCS| PgsqlLayer
PgsqlLayer -.-> |备份| MinioLayer
end
HANote["⚡ 自动故障转移,RTO < 30s"]
Usage2["📋 适用场景:生产环境、金融业务、关键系统"]
flowchart TB
subgraph DeployOrder["📋 部署顺序"]
Step1["1️⃣ 步骤 1:基础设施<br/><code>./infra.yml</code><br/>安装 INFRA 模块:软件仓库、监控系统、DNS"]
Step2["2️⃣ 步骤 2:ETCD 集群<br/><code>./etcd.yml</code><br/>安装 ETCD 模块:为 PostgreSQL 高可用提供 DCS"]
Step3["3️⃣ 步骤 3:MinIO 集群(可选)<br/><code>./minio.yml</code><br/>安装 MINIO 模块:远程备份存储"]
Step4["4️⃣ 步骤 4:PostgreSQL 集群<br/><code>./pgsql.yml</code><br/>安装 PGSQL 模块:高可用数据库集群"]
Step5["5️⃣ 步骤 5:其他模块(可选)<br/><code>./redis.yml</code> Redis 缓存<br/><code>./docker.yml</code> Docker 容器"]
Step1 --> Step2 --> Step3 --> Step4 --> Step5
end
OneKey["🚀 或者一键部署所有模块:<br/><code>./deploy.yml</code> 自动按正确顺序部署"]
| 场景 | 模块组合 | 节点数 | 说明 |
|---|---|---|---|
| 纯监控 | INFRA + NODE | 1+ | 只监控现有主机,不部署数据库 |
| 开发环境 | INFRA + NODE + ETCD + PGSQL | 1 | 单机全能,适合开发测试 |
| 标准HA | INFRA + NODE + ETCD + PGSQL×3 | 5+ | 三节点高可用 PostgreSQL |
| 多集群 | INFRA + NODE + ETCD + PGSQL×N | 10+ | 多套数据库集群共享基础设施 |
| 完整套件 | INFRA + NODE + ETCD + PGSQL + REDIS + MINIO | 10+ | 数据库 + 缓存 + 对象存储 |
纯监控模式
# 只需要监控系统,不部署数据库
all:
children:
infra:
hosts:
10.10.10.10: { infra_seq: 1 }
vars:
node_cluster: infra
高可用数据库
# 标准三节点高可用 PostgreSQL
all:
children:
infra:
hosts: { 10.10.10.10: { infra_seq: 1 } }
etcd:
hosts:
10.10.10.10: { etcd_seq: 1 }
10.10.10.11: { etcd_seq: 2 }
10.10.10.12: { etcd_seq: 3 }
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
数据库 + 缓存 + 备份
# 完整企业级配置
all:
children:
infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
etcd: { hosts: { ... } }
minio: { hosts: { ... } }
pg-main:
hosts:
10.10.10.21: { pg_seq: 1, pg_role: primary }
10.10.10.22: { pg_seq: 2, pg_role: replica }
vars:
pg_cluster: pg-main
pgbackrest_method: minio # 使用 MinIO 远程备份
redis-cache:
hosts:
10.10.10.31: { redis_node: 1, redis_instances: { 6379: {} } }
10.10.10.32: { redis_node: 2, redis_instances: { 6379: {} } }
Pigsty 的模块化设计允许您开发自己的模块:
flowchart TB
subgraph Templates["📚 现有模块可作为模板"]
T1["📮 REDIS 模块<br/>多模式部署示例"]
T2["📦 MINIO 模块<br/>分布式存储示例"]
T3["🍃 FERRET 模块<br/>MongoDB 兼容示例"]
end
subgraph DevSteps["🔧 模块开发规范"]
D1["1️⃣ 定义模块参数(vars)"]
D2["2️⃣ 编写 Ansible 剧本(playbook)"]
D3["3️⃣ 创建 Grafana 仪表盘(可选)"]
D4["4️⃣ 配置 Prometheus 规则(可选)"]
D1 --> D2 --> D3 --> D4
end
Templates --> DevSteps
| 模块 | 状态 | 说明 |
|---|---|---|
| PGSQL | ✅ 稳定 | 核心模块,生产就绪 |
| INFRA | ✅ 稳定 | 基础设施,生产就绪 |
| NODE | ✅ 稳定 | 节点管理,生产就绪 |
| ETCD | ✅ 稳定 | DCS 服务,生产就绪 |
| REDIS | ✅ 稳定 | 缓存服务,生产就绪 |
| MINIO | ✅ 稳定 | 对象存储,生产就绪 |
| FERRET | 🔄 Beta | MongoDB 兼容层 |
| DOCKER | 🔄 Beta | 容器支持 |
深入了解各模块的架构细节:
相关话题: