节点角色与职责:管理节点、工作节点、仲裁节点
集群搭建之前,有一件事得先想清楚——每个节点干什么活。
我刚开始接触分布式巡检系统的时候,觉得所有机器都一样,随便装个 Agent 就能跑。结果呢?调度乱了、心跳丢了、数据冲突了……嗯,后来花了整整两天才把集群救回来。
说白了,节点角色没分清楚,集群就容易翻车。这一章咱们就聊聊三种核心角色:管理节点、工作节点、仲裁节点。
一、管理节点:集群的“大脑”
管理节点(Master / Controller Node)是整个集群的调度中心。所有巡检任务从这里分发,所有状态数据汇聚到这里。
1. 核心职责
- 任务调度:决定哪个工作节点去执行哪台设备的巡检。
- 配置下发:把巡检脚本、告警规则、认证凭据分发给对应节点。
- 状态收集:接收工作节点上报的心跳、任务进度和结果。
- 故障检测:超过心跳超时未收到报文的节点,标记为异常。
2. 个人经验与避坑
我在项目中见过一种情况:管理节点只有一个,结果它宕了,整个集群趴窝半天。
避免单点故障
至少部署 2~3 个管理节点形成主备或共识集群(比如基于 Raft / Paxos)。
千万别把所有鸡蛋放一个篮子里。
至少部署 2~3 个管理节点形成主备或共识集群(比如基于 Raft / Paxos)。
千万别把所有鸡蛋放一个篮子里。
管理节点选型建议
内存要大(16GB 起步),磁盘建议 SSD。我自己习惯用
内存要大(16GB 起步),磁盘建议 SSD。我自己习惯用
etcd 存储集群状态,读写性能很关键。
避坑指南:我曾经遇到一个团队把管理节点和工作节点混装在同一台机器上。结果工作节点跑一个高负载巡检任务,把 CPU 吃满,管理节点的调度心跳全断了。集群直接脑裂。所以,角色隔离是个好习惯。
二、工作节点:巡检任务的“双手”
工作节点(Worker / Agent Node)是真正干活的机器。它们负责执行具体的巡检指令,比如 ping 设备、采集指标、运行脚本。
1. 核心职责
- 任务执行:从管理节点拉取任务并运行。
- 数据上报:把巡检结果推回管理节点或直接写入存储层。
- 资源监控:对本机 CPU、内存、磁盘做轻量级监控。
- 自愈上报:当自身出现异常时,主动向管理节点报告。
2. 并发与资源限制
你想想看,一个工作节点同时跑 50 个巡检任务,CPU 和网络都顶不住。我通常会在 Agent 配置里限制并发数:
# agent.yml
worker:
concurrent_tasks: 5 # 最大并发任务数
task_timeout: 120 # 单个任务超时(秒)
resource_limits:
cpu_max: 80% # CPU 使用上限
memory_max: 1GB # 内存上限
关键指标
工作节点的状态分为:
管理节点会根据这些状态来做负载调度。
工作节点的状态分为:
healthy(正常)、busy(忙碌)、unreachable(不可达)。管理节点会根据这些状态来做负载调度。
三、仲裁节点:避免“脑裂”的保险丝
说到仲裁节点,可能有的同学觉得陌生。其实它在高可用集群里非常关键——尤其在管理节点超过 1 个的时候。
1. 为什么要仲裁节点?
假设你有 2 个管理节点,节点 A 和节点 B 之间的网络断了。这时两个节点都认为对方挂了,都抢着当主节点。这就叫脑裂(split-brain)。
仲裁节点的作用就是投票。当管理节点之间无法通信时,哪个节点能联系到超过半数的仲裁节点,哪个才能继续当主。
2. 仲裁节点配置实例
我在项目中常用 etcd 或 consul 来做仲裁层。以下是一个基本的 etcd 集群部署思路:
# 3 节点 etcd 集群(内置仲裁功能)
etcd1: 192.168.1.10
etcd2: 192.168.1.11
etcd3: 192.168.1.12
# 每个节点启动命令大致如下
etcd --name etcd1 \
--initial-advertise-peer-urls http://192.168.1.10:2380 \
--listen-peer-urls http://0.0.0.0:2380 \
--initial-cluster etcd1=http://192.168.1.10:2380,etcd2=http://192.168.1.11:2380,etcd3=http://192.168.1.12:2380 \
--initial-cluster- my- \
--initial-cluster-state new
仲裁节点数量必须是奇数
通常建议 3 或 5 个。奇数的好处是:即使在部分节点故障时,依然能形成多数派。
如果只有 2 个仲裁节点,其中 1 个挂了,剩下的 1 个构不成多数派,集群就不可用了。
通常建议 3 或 5 个。奇数的好处是:即使在部分节点故障时,依然能形成多数派。
如果只有 2 个仲裁节点,其中 1 个挂了,剩下的 1 个构不成多数派,集群就不可用了。
四、三种角色的对比总结
| 角色 | 核心职责 | 常见部署量 | 关键指标 |
|---|---|---|---|
| 管理节点 | 调度、分发、状态维护 | 2~3 个 | 心跳延迟、任务队列深度 |
| 工作节点 | 执行巡检任务 | 根据设备规模(可伸缩) | CPU 使用率、并发任务数 |
| 仲裁节点 | 投票、防脑裂 | 3 或 5 个(奇数) | 选举时长、节点连通性 |
五、部署时容易踩的坑
- 管理节点与工作节点混部——资源争抢导致调度卡顿。
- 仲裁节点少于 3 个——网络抖动就整个集群不可用。
- 所有角色都跑在同一台机器——单点故障,一宕全挂。
- 忘记配置健康检查——节点挂了管理节点也不知道。
一个小建议
生产环境至少用 3 台独立的机器:2 台跑管理节点 + 仲裁节点,1 台纯仲裁。工作节点根据巡检规模后续弹性扩容。
这套结构我在多个项目中验证过,稳定性和扩展性都不错。
生产环境至少用 3 台独立的机器:2 台跑管理节点 + 仲裁节点,1 台纯仲裁。工作节点根据巡检规模后续弹性扩容。
这套结构我在多个项目中验证过,稳定性和扩展性都不错。