公众号旧文
管理 10 台 100 台服务器,都用什么工具?
当服务器数量从 1 台变成 10 台时,一个新的问题出现了:
如果我要在所有服务器上执行同一个命令,该怎么办?
例如:
- 查看所有服务器负载
- 批量更新系统
- 批量重启服务
- 批量部署程序
如果一台一台 SSH 登录:
ssh server1
ssh server2
ssh server3
...
不仅慢,而且极容易出错。
于是,运维领域逐渐出现了一类工具:
批量 SSH 运维工具(Parallel SSH tools)。
它们可以让一条命令同时在多台服务器执行。
下面介绍几种常见方案。
1、pssh:最经典的并行 SSH 工具
pssh 是一个非常经典的工具,名字就是 Parallel SSH(并行 SSH)。
它的思路很简单:
- 准备一个服务器列表
- 并行 SSH 到所有服务器
- 执行同一个命令
例如服务器列表:
hosts.txt
server1
server2
server3
执行:
pssh -h hosts.txt -i uptime
输出类似:
[1] server1: 20:31:04 up 10 days
[2] server2: 20:31:04 up 5 days
[3] server3: 20:31:04 up 2 days
优点
- 使用非常简单
- 支持并发执行
- 输出清晰
- 几乎所有 Linux 发行版都有
缺点
- 功能比较基础
- 不适合复杂运维任务
- 项目活跃度已经不高
适合场景
- 小规模服务器(10~50 台)
- 临时批量执行命令
- 简单运维操作
2、pdsh:很多老运维的最爱
pdsh 是另一款历史很悠久的并行运维工具。
pdsh 的设计目标是:
极致的速度和并发能力。
例如:
pdsh -w server[1-10] uptime
输出:
server1: 20:31:04 up 10 days
server2: 20:31:04 up 5 days
server3: 20:31:04 up 2 days
优点
- 速度非常快
- 并发能力强
- 支持大量服务器
- 在 HPC 和集群环境很常见
缺点
- 配置稍复杂
- 输出格式较原始
- 新手不太友好
适合场景
- 大规模服务器集群
- HPC 计算集群
- 运维经验较丰富的团队
3、ClusterShell:集群运维的利器
Clustershell 是一个 Python 编写的集群管理工具。
它最大的特点是:
自动合并相同输出。
例如执行:
clush -w node[1-10] uname -r
如果 10 台服务器内核版本相同,它会显示:
node[1-10]: 6.1.0
而不是重复输出 10 次。
优点
- 输出自动合并
- 并发效率高
- 支持复杂集群操作
缺点
- 学习成本稍高
- 配置比 pssh 稍复杂
适合场景
- 大型服务器集群
- HPC / AI 计算集群
- 需要管理数百台服务器
4、Ansible:现代运维自动化标准
Ansible 可以说是目前 最流行的运维自动化工具之一。
与前面的工具不同,Ansible 不只是批量 SSH,它更像一个 完整的自动化运维平台。
例如执行:
ansible all -m command -a "uptime"
输出:
server1 | SUCCESS | rc=0 >>
20:31:04 up 10 days
Ansible 还支持:
- 自动部署程序
- 自动安装软件
- 自动配置服务器
- 自动更新系统
它通过 Playbook(YAML 配置) 来定义运维流程。
例如:
- hosts: servers
tasks:
- name: install nginx
apt:
name: nginx
state: present
优点
- 功能非常强大
- 无需 agent(只需要 SSH)
- 运维行业标准
- 支持自动化部署
缺点
- 学习成本较高
- 对小规模服务器来说有点重
适合场景
- 服务器规模较大(50+)
- DevOps 自动化部署
- 企业级运维
不同工具的定位
可以把这些工具理解为一个演进关系:
| 工具 | 类型 | 适合规模 |
|---|---|---|
| pssh | 轻量批量 SSH | 10~50 台 |
| pdsh | 高性能批量 SSH | 50~500 台 |
| ClusterShell | 集群管理工具 | 100+ 台 |
| Ansible | 自动化运维平台 | 企业级 |
简单来说:
- 临时批量命令 → pssh
- 大规模并发 SSH → pdsh
- 集群环境 → ClusterShell
- 自动化运维 → Ansible
最后,给大家看一下我目前的机器:
100.64.0.1
│
│ SSH
| ▼
jp-iij (100.64.0.4) ← 跳板机
│
├── 100.64.0.3 bj-ecs
├── 100.64.0.5 jp-hyper2
├── 100.64.0.9 lax
├── 100.64.0.10 lax-lite
├── 100.64.0.11 de-bgp
├── 100.64.0.15 usmci-v6-2
├── 100.64.0.16 usmci-v6
├── 100.64.0.17 us-gcp
└── 100.64.0.18 us-gcp2
1月23日,我买了第一台,转眼俩月过去了,现在我已经有了10台。