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

返回本页常规视图.

节点概念

节点类型与角色:把裸机变成数据中心的构建块。

如果您只有一分钟,请记住这张图:

flowchart LR
    Raw["🖥️ 裸机/虚拟机"] --> NODE["📦 NODE 模块纳管"] --> Managed["🏗️ 数据中心的构建块"]

    subgraph Features["纳管后自动获得"]
        F1["📊 主机监控(CPU/内存/磁盘/网络)"]
        F2["📝 日志收集(系统日志、应用日志)"]
        F3["⏰ 时间同步、DNS 解析、软件源配置"]
        F4["🔀 HAProxy 负载均衡就绪"]
        F5["🐳 Docker 容器支持(可选)"]
    end

    subgraph Types["节点类型"]
        T1["🖥️ 普通节点:node_exporter、Vector"]
        T2["📊 INFRA 节点:Prometheus、Grafana、Nginx"]
        T3["🐘 PGSQL 节点:PostgreSQL 数据库"]
        T4["🔐 ETCD 节点:分布式共识服务"]
        T5["🛠️ ADMIN 节点:Ansible 管理命令"]
    end

核心价值:一条命令将裸机纳入管理,自动获得监控、日志、安全配置。无论物理机、虚拟机还是容器,统一管理方式。


本章内容

章节 说明 核心问题
节点类型 不同类型节点的定义与功能特点 各类节点有什么区别?
节点组件 节点上运行的组件与服务详解 每个节点跑了哪些东西?

为什么需要节点抽象?

没有统一管理的困境

flowchart TB
    subgraph Problems["❌ 裸机管理的日常"]
        P1["❌ 配置不一致<br/>有的机器时区是 UTC,有的是 CST<br/>有的机器 NTP 没配,时间乱了<br/>内核参数五花八门,性能差异大"]

        P2["❌ 监控盲区<br/>哪些机器 CPU 高?不知道<br/>磁盘快满了?没人告警<br/>出问题了查半天,原来是某台机器挂了"]

        P3["❌ 日志分散<br/>每台机器登上去看日志<br/>日志格式不统一,没法集中分析<br/>出了问题 SSH 一台台排查"]
    end

Pigsty 的解决方案

flowchart TB
    subgraph Solutions["✅ 统一节点管理"]
        S1["✅ 配置标准化<br/>时区、NTP、内核参数统一配置<br/>声明式定义,幂等执行<br/>新机器一条命令纳管,自动对齐配置"]

        S2["✅ 全面监控<br/>node_exporter 采集 CPU/内存/磁盘/网络<br/>自动注册到 Prometheus<br/>开箱即用的仪表盘和告警规则"]

        S3["✅ 日志集中<br/>Vector 收集所有节点日志<br/>统一发送到 VictoriaLogs<br/>一个界面查看所有机器日志"]
    end

节点类型

类型概览

flowchart TB
    subgraph AppNodes["📱 应用节点(安装特定模块)"]
        direction LR
        PGSQL["🐘 PGSQL 节点<br/>PostgreSQL"]
        REDIS["📮 REDIS 节点<br/>Redis"]
        MINIO["📦 MINIO 节点<br/>MinIO"]
        MORE["..."]
    end

    subgraph BaseNodes["🏗️ 基础节点"]
        direction LR
        INFRA["📊 INFRA 节点<br/>监控/仓库/DNS/告警"]
        ETCD["🔐 ETCD 节点<br/>分布式共识服务"]
    end

    subgraph NormalNode["🖥️ 普通节点"]
        Normal["node_exporter + Vector + HAProxy + 系统配置"]
    end

    subgraph OS["💻 操作系统"]
        Linux["Linux (EL/Debian/Ubuntu) + systemd"]
    end

    AppNodes --> |依赖| BaseNodes
    BaseNodes --> |依赖| NormalNode
    NormalNode --> |运行于| OS

类型对比

类型 安装模块 主要功能 典型数量
普通节点 NODE 被纳管、监控、日志 任意
ADMIN 节点 Ansible 执行管理命令 1
INFRA 节点 INFRA + NODE 监控中心、软件仓库 1-2
ETCD 节点 ETCD + NODE 分布式共识 3/5
PGSQL 节点 PGSQL + NODE PostgreSQL 数据库 N
REDIS 节点 REDIS + NODE Redis 缓存 N
MINIO 节点 MINIO + NODE 对象存储 4+

单机部署 vs 分布式部署

单机部署

开发测试环境,一台机器扮演所有角色:

flowchart TB
    subgraph SingleNode["🖥️ 单节点部署 (10.10.10.10)"]
        direction TB
        ADMIN["🛠️ ADMIN - 执行 Ansible 管理命令"]
        INFRA["📊 INFRA - Prometheus, Grafana, Nginx, AlertManager, VictoriaLogs"]
        ETCD2["🔐 ETCD - 分布式键值存储(单节点模式)"]
        PGSQL2["🐘 PGSQL - PostgreSQL (pg-meta 集群)"]
        NODE2["🖥️ NODE - node_exporter, Vector, HAProxy, 系统配置"]

        ADMIN --> INFRA --> ETCD2 --> PGSQL2 --> NODE2
    end

    Features["📋 特点:<br/>• 一条命令完成所有安装<br/>• 适合开发、测试、学习、演示<br/>• 功能完整,但无高可用"]

分布式部署

生产环境,角色分布在多个节点:

flowchart TB
    subgraph Distributed["🏢 分布式生产部署"]
        subgraph InfraNodes["📊 INFRA 节点(1-2 台)"]
            I1["10.10.10.10: ADMIN + INFRA<br/>Prometheus, Grafana, Nginx, AlertManager"]
            I2["10.10.10.11: INFRA 备份节点(可选)"]
        end

        subgraph EtcdNodes["🔐 ETCD 节点(3 台,奇数节点保证共识)"]
            E1["etcd-1<br/>10.10.10.10"] <--> E2["etcd-2<br/>10.10.10.11"] <--> E3["etcd-3"]
        end

        subgraph PgsqlNodes["🐘 PGSQL 节点(每个集群 1-N 台)"]
            subgraph PgTest["pg-test 集群"]
                PT1["10.10.10.21: pg-test-1 (Primary)"]
                PT2["10.10.10.22: pg-test-2 (Replica)"]
                PT3["10.10.10.23: pg-test-3 (Replica)"]
            end
            subgraph PgProd["pg-prod 集群"]
                PP1["10.10.10.31: pg-prod-1 (Primary)"]
                PP2["10.10.10.32: pg-prod-2 (Replica)"]
            end
        end
    end

节点基础组件

每个被纳管的节点都会安装以下组件:

flowchart TB
    subgraph Components["🖥️ 普通节点组件"]
        subgraph NodeExporter["📊 node_exporter (:9100)"]
            NE1["采集 CPU/内存/磁盘/网络指标<br/>Prometheus 自动抓取<br/>开箱即用的仪表盘"]
        end

        subgraph Vector["📝 Vector (:9598)"]
            V1["收集系统日志和应用日志<br/>发送到 VictoriaLogs<br/>支持日志过滤和转换"]
        end

        subgraph HAProxyC["🔀 HAProxy (:9101 管理端口)"]
            H1["就绪状态,为上层模块提供负载均衡<br/>健康检查和流量路由"]
        end

        subgraph SysConfig["⚙️ 系统配置"]
            SC1["时区、NTP 时间同步"]
            SC2["DNS 解析配置"]
            SC3["软件源配置"]
            SC4["内核参数优化"]
            SC5["用户与权限管理"]
        end

        subgraph Optional["📦 可选组件"]
            O1["🐳 Docker (:9323) - 容器运行时"]
            O2["🔗 Keepalived - L2 VIP 管理"]
        end
    end

端口清单

端口 组件 说明 默认状态
9100 node_exporter 主机监控指标 ✅ 启用
9101 HAProxy Admin 管理页面/指标 ✅ 启用
9598 Vector 日志收集 ✅ 启用
9323 Docker 容器指标 按需启用
9650 Keepalived VIP 指标 按需启用

节点纳管

快速纳管

# 将节点纳入 Pigsty 管理
./node.yml -l 10.10.10.21

# 批量纳管
./node.yml -l 10.10.10.21,10.10.10.22,10.10.10.23

# 纳管一个节点组
./node.yml -l my-nodes

配置示例

# pigsty.yml
all:
  children:
    # 定义一个节点组
    my-nodes:
      hosts:
        10.10.10.21: { }
        10.10.10.22: { }
        10.10.10.23: { }
      vars:
        node_cluster: my-nodes      # 节点集群名
        node_timezone: Asia/Shanghai
        node_ntp_servers:
          - pool.ntp.org

纳管后的效果

flowchart LR
    subgraph Before["❌ 纳管前"]
        B1["裸 Linux 系统<br/>• 无监控<br/>• 无日志收集<br/>• 配置不一致<br/>• 软件源不稳定<br/>• 无法远程管理"]
    end

    Before --> |node.yml| After

    subgraph After["✅ 纳管后"]
        A1["Pigsty 托管节点<br/>• node_exporter 监控<br/>• Vector 日志收集<br/>• 统一时区/NTP/DNS<br/>• 本地软件源<br/>• Ansible 可管理"]
    end

节点生命周期

flowchart LR
    subgraph Prepare["1️⃣ 准备"]
        P1["准备硬件<br/>装操作系统<br/>SSH可达"]
    end

    subgraph Enroll["2️⃣ 纳管"]
        E1["运行<br/>node.yml"]
    end

    subgraph Use["3️⃣ 使用"]
        U1["安装模块<br/>运维操作<br/>监控日志"]
    end

    subgraph Remove["4️⃣ 移除"]
        R1["运行<br/>node-rm.yml"]
    end

    Prepare --> Enroll --> Use --> Remove

    Commands["📋 命令:<br/>./node.yml -l 节点  # 纳管节点<br/>./pgsql.yml -l 节点  # 安装 PostgreSQL<br/>./redis.yml -l 节点  # 安装 Redis<br/>./node-rm.yml -l 节点  # 移除节点"]

节点复用

一个物理/虚拟机可以同时扮演多个角色:

常见复用场景

场景 节点配置 说明
单机开发 ADMIN + INFRA + ETCD + PGSQL 一台机器运行所有
小型集群 INFRA + ETCD 复用 节省资源
标准生产 角色分离 资源隔离,故障隔离

资源考虑

复用节点时需注意资源竞争:

角色 资源需求 注意事项
INFRA 磁盘(指标存储) Prometheus 数据占用空间
PGSQL 内存 + IO 数据库是资源大户
ETCD 低延迟磁盘 对磁盘延迟敏感

接下来

深入了解节点的细节:

相关话题:

1 - 节点类型

不同类型节点的定义、角色与功能。

本节详细介绍 Pigsty 中各类节点的定义和特点。


普通节点

使用 node.yml 剧本纳管的节点,是所有其他节点类型的基础。

默认组件

组件 端口 说明 状态
node_exporter 9100 主机监控指标 默认启用
HAProxy Admin 9101 HAProxy 管理 默认启用
Vector 9598 日志收集 默认启用
Docker 9323 容器支持 按需启用
Keepalived - L2 VIP 按需启用

配置示例

my-nodes:
  hosts:
    10.10.10.21: { }
    10.10.10.22: { }
  vars:
    node_cluster: my-nodes

ADMIN 节点

执行 Ansible 管理命令的节点,通常与 INFRA 节点重合。

特点

  • 一套部署中有且只有一个 ADMIN 节点
  • admin_ip 指定
  • 拥有对所有其他节点的 SSH/Sudo 权限
  • 安全性至关重要

职责

┌─────────────────────────────────────────────────────────────┐
│                      ADMIN 节点                              │
│  ┌───────────────────────────────────────────────────────┐  │
│  │                     Ansible                            │  │
│  │  ┌─────────────────────────────────────────────────┐  │  │
│  │  │  deploy.yml  pgsql.yml  node.yml  ...           │  │  │
│  │  └───────────────────────────┬─────────────────────┘  │  │
│  └──────────────────────────────┼────────────────────────┘  │
│                                 │ SSH/Sudo                   │
│    ┌────────────────────────────┼────────────────────────┐  │
│    ▼                            ▼                        ▼  │
│  Node 1                      Node 2                   Node N │
└─────────────────────────────────────────────────────────────┘

安全建议

  1. 严格控制 ADMIN 节点的访问权限
  2. 使用密钥认证,禁用密码登录
  3. 定期审计 SSH 访问日志
  4. 考虑使用跳板机

INFRA 节点

安装 INFRA 模块的节点,提供核心基础设施服务。

组件清单

组件 端口 说明
Nginx 80 Web 服务/软件仓库
Grafana 3000 可视化平台
VictoriaMetrics 9090 指标存储
VictoriaLogs 9428 日志存储
AlertManager 9093 告警管理
DNSMASQ 53 DNS 服务
Chronyd 123 NTP 服务
BlackboxExporter 9115 黑盒探测

配置示例

infra:
  hosts:
    10.10.10.10: { infra_seq: 1 }
    10.10.10.11: { infra_seq: 2 }
  vars:
    node_cluster: infra

高可用

生产环境建议部署 2-3 个 INFRA 节点:

  • 第一个通常是 ADMIN 节点
  • 其他作为备份

PGSQL 节点

安装 PGSQL 模块的节点,运行 PostgreSQL 数据库实例。

组件清单

组件 端口 说明 状态
PostgreSQL 5432 数据库 默认启用
Pgbouncer 6432 连接池 默认启用
Patroni 8008 HA 控制 默认启用
HAProxy Primary 5433 读写服务 默认启用
HAProxy Replica 5434 只读服务 默认启用
HAProxy Default 5436 直连服务 默认启用
HAProxy Offline 5438 离线服务 默认启用
pg_exporter 9630 PG 指标 默认启用
pgbouncer_exporter 9631 连接池指标 默认启用
vip-manager - VIP 管理 按需启用

节点与实例

PGSQL 节点与实例 1:1 部署,可以借用实例身份:

pg-test:
  hosts:
    10.10.10.11: { pg_seq: 1, pg_role: primary }   # 节点名 = pg-test-1
    10.10.10.12: { pg_seq: 2, pg_role: replica }   # 节点名 = pg-test-2
  vars:
    pg_cluster: pg-test
    node_id_from_pg: true    # 节点从 PG 借用身份

ETCD 节点

安装 ETCD 模块的节点,提供分布式共识服务。

组件清单

组件 端口 说明
ETCD 2379 客户端端口
ETCD 2380 对等端口

配置示例

etcd:
  hosts:
    10.10.10.10: { etcd_seq: 1 }
    10.10.10.11: { etcd_seq: 2 }
    10.10.10.12: { etcd_seq: 3 }
  vars:
    etcd_cluster: etcd

高可用

ETCD 使用 Raft 协议,需要奇数个节点:

  • 3 节点:容忍 1 个故障
  • 5 节点:容忍 2 个故障

节点复用

一个物理/虚拟机可以同时扮演多个角色:

典型场景

场景 节点配置
单机部署 ADMIN + INFRA + ETCD + PGSQL
小型集群 INFRA + ETCD 复用
大型部署 角色完全分离

资源考虑

复用节点时需考虑资源竞争:

  • INFRA 节点:Prometheus 存储占用
  • PGSQL 节点:数据库内存/IO
  • ETCD 节点:低延迟磁盘需求

节点生命周期

纳管

./node.yml -l 10.10.10.21

安装模块

./pgsql.yml -l 10.10.10.21    # 安装 PGSQL
./redis.yml -l 10.10.10.21    # 安装 Redis

移除

./node-rm.yml -l 10.10.10.21  # 移除节点

2 - 节点组件

节点上运行的组件与服务详解。

本节介绍 Pigsty 节点上运行的各类组件及其功能。


基础组件

所有被 Pigsty 纳管的节点都会安装以下基础组件:

node_exporter

主机监控指标导出器,监听 9100 端口:

┌─────────────────────────────────────────────────────────────┐
│                    node_exporter (:9100)                     │
│  ┌───────────────────────────────────────────────────────┐  │
│  │              /metrics 端点                             │  │
│  └───────────────────────────┬───────────────────────────┘  │
│                              │                               │
│    ┌─────────────────────────┼─────────────────────────┐    │
│    ▼                         ▼                         ▼    │
│   CPU                      内存                      磁盘    │
│   网络                     文件系统                   进程    │
└─────────────────────────────────────────────────────────────┘

采集指标

  • CPU 使用率、负载
  • 内存使用、交换分区
  • 磁盘 IO、空间
  • 网络流量、连接
  • 文件系统、进程

Vector

日志收集代理,监听 9598 端口:

┌─────────────────────────────────────────────────────────────┐
│                      Vector (:9598)                          │
│  ┌───────────────────────────────────────────────────────┐  │
│  │                   日志采集                             │  │
│  │  /var/log/*  →  Vector  →  VictoriaLogs (INFRA)       │  │
│  └───────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

采集来源

  • 系统日志:/var/log/messages
  • PostgreSQL 日志:/pg/log/postgres/
  • Patroni 日志:/pg/log/patroni/
  • 其他组件日志

HAProxy

负载均衡器,提供服务入口和管理页面(9101 端口):

┌─────────────────────────────────────────────────────────────┐
│                      HAProxy                                 │
│  ┌───────────────────────────────────────────────────────┐  │
│  │  :9101  管理页面与指标                                 │  │
│  │  :543x  PostgreSQL 服务端口                           │  │
│  └───────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

可选组件

Docker

容器运行时,按需启用:

# 启用 Docker
docker_enabled: true

端口:9323(指标)

用途

  • 运行容器化应用
  • 开发测试环境
  • 边缘服务部署

Keepalived

L2 VIP 管理,用于节点集群的高可用:

# 启用 Keepalived
node_keepalived_enabled: true

用途

  • INFRA 节点 VIP
  • 自定义服务 VIP

注意:PGSQL 集群的 VIP 由 vip-manager 管理,不使用 Keepalived。


PGSQL 节点组件

PGSQL 节点额外包含数据库相关组件:

PostgreSQL

核心数据库,监听 5432 端口:

配置 说明
数据目录 /pg/data
日志目录 /pg/log/postgres
配置文件 /pg/data/postgresql.conf

Pgbouncer

连接池,监听 6432 端口:

配置 说明
配置文件 /etc/pgbouncer/pgbouncer.ini
日志目录 /pg/log/pgbouncer
池模式 transaction(默认)

Patroni

高可用控制器,监听 8008 端口:

配置 说明
配置文件 /pg/bin/patroni.yml
日志目录 /pg/log/patroni
DCS ETCD

pg_exporter

PostgreSQL 指标导出器,监听 9630 端口:

采集指标

  • 连接数、事务
  • 缓存命中率
  • 复制延迟
  • 锁、死锁

pgbouncer_exporter

连接池指标导出器,监听 9631 端口:

采集指标

  • 连接池状态
  • 等待队列
  • 平均查询时间

pgbackrest_exporter

备份指标导出器,监听 9854 端口:

采集指标

  • 最近备份时间
  • 备份大小
  • 备份状态

vip-manager

VIP 管理器(可选),绑定 VIP 到主库节点。


组件交互

┌─────────────────────────────────────────────────────────────────────┐
│                          PGSQL 节点                                  │
│                                                                      │
│  ┌─────────────────────────────────────────────────────────────┐    │
│  │                     HAProxy (:543x)                          │    │
│  │        健康检查 ←───────────────────────────────────────┐   │    │
│  └────────────────────────────────┬────────────────────────┼───┘    │
│                                   │                        │        │
│  ┌────────────────────────────────▼────────────────────────┼───┐    │
│  │                   Pgbouncer (:6432)                     │   │    │
│  └────────────────────────────────┬────────────────────────┼───┘    │
│                                   │                        │        │
│  ┌────────────────────────────────▼────────────────────────┼───┐    │
│  │                  PostgreSQL (:5432)                     │   │    │
│  └────────────────────────────────┬────────────────────────┼───┘    │
│                                   │                        │        │
│  ┌────────────────────────────────▼────────────────────────┴───┐    │
│  │                    Patroni (:8008)                          │    │
│  │                          │                                   │    │
│  │                          ▼                                   │    │
│  │                      ETCD 集群                               │    │
│  └─────────────────────────────────────────────────────────────┘    │
│                                                                      │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐                 │
│  │ pg_exporter │  │pgb_exporter │  │node_exporter│     → Prometheus │
│  │   :9630     │  │   :9631     │  │   :9100     │                 │
│  └─────────────┘  └─────────────┘  └─────────────┘                 │
│                                                                      │
│  ┌─────────────────────────────────────────────────────────────┐    │
│  │                     Vector (:9598)                           │    │
│  │     /pg/log/*  →  Vector  →  VictoriaLogs                   │    │
│  └─────────────────────────────────────────────────────────────┘    │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

端口清单

通用节点

端口 组件 说明
9100 node_exporter 主机指标
9101 HAProxy 管理页面
9598 Vector 日志收集
9323 Docker 容器指标(可选)
9650 Keepalived VIP 指标(可选)

PGSQL 节点

端口 组件 说明
5432 PostgreSQL 数据库
6432 Pgbouncer 连接池
8008 Patroni HA 控制/健康检查
5433 HAProxy 读写服务
5434 HAProxy 只读服务
5436 HAProxy 直连服务
5438 HAProxy 离线服务
9630 pg_exporter PG 指标
9631 pgbouncer_exporter 连接池指标
9854 pgbackrest_exporter 备份指标