系统架构

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 容器支持

接下来

深入了解各模块的架构细节:

相关话题:


模块总览

Pigsty 的六大核心模块及其功能定位。

INFRA 架构

基础设施模块的组件与功能详解。

PGSQL 架构

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