Ansible 基础与运维
一、Ansible 架构
| 组件 | 说明 |
|---|---|
| 管理节点 | 安装 Ansible 的控制机 |
| 被控机器 | 被管理目标,无 Agent,SSH 协议连接 |
| Inventory | 主机清单(静态文件/动态脚本) |
| Module | 功能模块(yum、copy、service、template) |
| Playbook | YAML 格式的任务编排 |
| Roles | 标准化目录结构,复用任务 |
| Plugins | 插件扩展(连接、回调、过滤器) |
| Facts | 被控机系统变量 |
二、四种执行模式
| 模式 | 命令 | 场景 |
|---|---|---|
| ad-hoc | ansible all -m shell -a "df -h" | 单条临时命令 |
| playbook | ansible-playbook xxx.yml | 批量任务编排 |
| roles | 目录规范化 | 复杂项目复用 |
| galaxy | ansible-galaxy install | 社区角色仓库 |
三、Handler 与 Notify 机制
Handler 是一组预定义的任务,只有被其他任务 notify 触发时才执行,常用于配置变更后的服务重启。
特性:
- 本质是普通任务,通过
name唯一标识 - 即使多个任务 notify 同一个 Handler,Handler 也只会执行一次
- Handler 在 Playbook 所有任务执行完成后统一执行
实战示例:修改 Nginx 配置后重启
- name: 部署 Nginx 配置文件
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify:
- restart nginx
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
四、Ansibe 与其他工具对比
| 对比项 | Ansible | SaltStack |
|---|---|---|
| 通信方式 | 无 Agent,SSH 协议 | 有 Agent,ZeroMQ 消息队列 |
| 配置语言 | YAML | YAML + Jinja |
| 适用规模 | 中小规模(数百台) | 海量机器(数千+) |
| 性能 | SSH 协议有一定开销 | Agent 模式性能更强 |
关联文档
- ../linux/system/SSH 认证原理与配置 — Ansible 依赖 SSH 协议
- ../linux/system/Linux — Linux 系统管理