节点类型
不同类型节点的定义、角色与功能。
如果您只有一分钟,请记住这张图:
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
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+ |
开发测试环境,一台机器扮演所有角色:
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 | 低延迟磁盘 | 对磁盘延迟敏感 |
深入了解节点的细节:
相关话题: