节点概念

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

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

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 低延迟磁盘 对磁盘延迟敏感

接下来

深入了解节点的细节:

相关话题:


节点类型

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

节点组件

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