Ansible 入门实战:一条命令批量管理多台服务器
当你手里的服务器从一台变成十台,再到几十上百台,逐台 SSH 登录去执行相同的命令、安装相同的软件、修改相同的配置,就会变成一场重复劳动的噩梦。Ansible 正是为解决这类问题而生的自动化运维工具:被管节点上无需安装任何 Agent,控制机通过标准 SSH 协议,就能批量管理成百上千台服务器。
一、Ansible 的核心概念
Ansible 的工作方式很直观:控制机读取主机清单(Inventory),通过 SSH 连接被管节点,执行用 YAML 编写的任务剧本(Playbook),最后把执行结果汇总回来。
先记住几个核心概念:
- 控制节点:安装 Ansible、负责发起任务的机器
- 被管节点:被管理的业务服务器,只需 SSH 可达、Python 可用
- Inventory:主机清单文件,描述"要管哪些机器"
- Module:模块,执行具体动作的单元,如 copy、yum、service
- Playbook:用 YAML 编写的任务剧本,描述"要做什么"
- Ad-Hoc:即席命令,一次性的快速任务,不用写剧本
二、安装与免密登录准备
在控制机上安装 Ansible,以 openEuler / CentOS 系发行版为例:
sudo yum install -y ansible
ansible --version
Ansible 通过 SSH 连接被管节点,提前配置好免密登录,可以省去每次输入密码的麻烦:
ssh-keygen -t rsa -b 4096
ssh-copy-id root@192.168.1.11
ssh-copy-id root@192.168.1.12
三、编写主机清单
新建主机清单文件,例如 ~/hosts,把被管节点按用途分组:
[web]
192.168.1.11
192.168.1.12
[db]
192.168.1.21
[all:vars]
ansible_user=root
用 ping 模块验证连通性:
ansible -i ~/hosts all -m ping
返回 SUCCESS,说明控制机已经可以正常管理这些节点了。
四、Ad-Hoc 即席命令:先跑起来
不想写剧本的时候,一条命令就能完成批量操作:
# 在 web 组所有机器上查看系统负载
ansible -i ~/hosts web -a "uptime"
# 批量安装 nginx
ansible -i ~/hosts web -m yum -a "name=nginx state=present" --become
# 批量分发配置文件
ansible -i ~/hosts all -m copy -a "src=/tmp/app.conf dest=/etc/app/app.conf"
-m 指定模块,-a 指定模块参数,--become 表示提权执行(相当于 sudo)。
五、Playbook:把操作沉淀为剧本
多步骤、可重复的操作适合写成 Playbook。下面是一个在 web 组部署 Nginx 的完整示例 deploy-nginx.yml:
---
- name: 在 web 组部署 Nginx
hosts: web
become: true
tasks:
- name: 安装 Nginx
yum:
name: nginx
state: present
- name: 下发站点配置
copy:
src: files/site.conf
dest: /etc/nginx/conf.d/site.conf
- name: 确保 Nginx 运行并开机自启
service:
name: nginx
state: started
enabled: true
执行它:
ansible-playbook -i ~/hosts deploy-nginx.yml
Playbook 最大的优点是幂等性:重复执行同一份剧本不会产生副作用——Nginx 已经装好就跳过安装,服务已经启动就不再重启。这种特性让它非常适合配置收敛和持续交付场景。
六、常用模块速览
| 模块 | 用途 |
|---|---|
| ping | 连通性测试 |
| command / shell | 执行命令,shell 支持管道与重定向 |
| copy / template | 分发文件,template 支持 Jinja2 模板渲染 |
| yum / apt | 软件包管理 |
| service | 服务启停与开机自启 |
| file | 目录创建、文件属性、软链接 |
| user | 用户与组管理 |
七、实践中的几点建议
- 先用
--check预演:ansible-playbook xxx.yml --check只做 dry-run、不真正执行,避免误操作。 - 敏感信息不要写进剧本:密码、密钥用 Ansible Vault 加密存放。
- 清单按环境分组:dev、test、prod 分组管理,配合
--limit精确控制执行范围。 - 纳入版本控制:把 Inventory 和 Playbook 放进 Git 仓库,变更可追溯、可回滚。
小结
Ansible 的学习曲线非常平缓:会写 YAML、会用 SSH,就能在一小时内跑起第一个批量任务。从一条 Ad-Hoc 命令开始,逐步沉淀为可复用的 Playbook,运维工作就从"重复劳动"变成了"资产沉淀"。下次需要给几十台机器统一改配置时,不妨让 Ansible 替你跑腿。
- 点赞
- 收藏
- 关注作者
评论(0)