Ansible 是一款轻量级的开源自动化运维工具,基于 Python 开发,核心用于批量管理服务器、自动化执行运维任务,无需在目标主机安装代理程序,是企业级运维的常用工具之一。
一、Ansible 的核心特点
- 无代理架构目标主机无需安装客户端,通过 SSH(Linux 主机默认)或 WinRM(Windows 主机)与控制节点通信,部署成本极低。
- 简单易用 用 YAML 编写
Playbook(自动化脚本),语法接近自然语言,非专业开发人员也能快速上手。 - 模块化 内置数千个功能模块(如
command执行命令、yum安装软件、copy传输文件等),覆盖运维常见场景,也支持自定义模块。 - 幂等性重复执行相同任务不会导致异常(例如重复执行 "安装 Nginx" 的任务,只会在未安装时执行,已安装则跳过)。
二、Ansible 的核心组件
- 控制节点安装 Ansible 的机器,负责发起自动化任务、管理配置。
- 被管理节点需要被自动化操作的服务器。
- Inventory(主机清单) 即
/etc/ansible/hosts文件,用于定义被管理节点的分组、IP / 主机名等信息。 - PlaybookYAML 格式的自动化脚本,按 "任务集" 编排运维操作(比如 "先装依赖→再部署代码→最后启动服务")。
- 模块 Ansible 执行具体操作的最小单元,每个模块对应一个功能(如
ping模块测连通性、file模块管理文件)。
三、Ansible 的典型应用场景
- 批量执行命令:比如批量查看所有主机的 CPU 负载、磁盘使用率。
- 配置管理:批量同步配置文件(如 Nginx、MySQL 的配置)、统一系统参数。
- 应用部署:批量安装、启动 / 重启服务(如 Nginx、Tomcat),或部署代码包。
- 系统初始化:新机器批量配置主机名、防火墙、用户、SSH 密钥等。
- 任务编排:按依赖顺序执行多步骤任务(比如先初始化环境→再部署中间件→最后部署应用)。
Ansible工作机制
Ansible 的工作机制核心是:控制机以 "无代理" 方式(SSH/WinRM)向被管理节点批量下发任务,通过模块化脚本执行操作,执行完自动清理临时文件,最终汇总返回结果。整个过程无需在被管理节点安装任何 Ansible 代理,轻量化且易维护,
Ansible 的 Role(角色) 是对 Playbook 的模块化、结构化封装------ 把零散的运维任务(如安装软件、配置文件、启动服务)按固定目录结构拆分,形成可复用、易维护的 "功能模块"。
简单说:如果把 Playbook 比作 "一份完整的运维操作手册",Role 就是手册里 "拆分成独立章节的标准化流程"(比如 "部署 Nginx" 一章、"配置 MySQL" 一章),可以单独维护、重复调用,解决了大 Playbook 杂乱、复用性差的问题。
四,安装与操作
管理端安装****Ansible:
yum install -y epel-release
yum install -y ansible
配置主机清单:
配置免密SSH登录:
ssh-keygen -t rsa # 生成密钥(和示例一样)
sshpass -p '你服务器的实际密码' ssh-copy-id root@192.168.10.4
sshpass -p '你服务器的实际密码' ssh-copy-id root@192.168.10.5
ssh root@192.168.10.50 首次登录注册密钥
sshpass -p '1' ssh-copy-id -o StrictHostKeyChecking=no root@192.168.10.50
推送密钥并免密登录

Ansible****基础命令
格式: ansible <组名> -m <模块> -a <参数>
常用模块:
command 模块:远程执行命令,不支持管道**/重定向


**shell 模块:支持管道和shell**特性**

cron 模块:
在远程主机定义任务计划。其中有两种状态(state):present表示添加(可以省略),absent表示移 除。
ansible-doc -s cron # 按 q 退出

Ansible 默认输出配色逻辑
Ansible 会根据任务执行的状态,自动给输出内容分配颜色(无需手动配置),核心对应关系:
- 黄色 :对应
CHANGED状态 → 表示任务对目标主机的配置产生了实际变更(比如这次是 "新增了定时任务",主机的 crontab 内容被修改); - 绿色 :对应
SUCCESS状态 → 表示任务执行成功,但主机配置无变更(比如重复执行相同的定时任务,任务已存在,不会修改配置); - 红色 :对应
FAILED/UNREACHABLE状态 → 表示任务执行失败(比如参数错误)或主机无法连接。
copy 模块:
/用于复制指定主机文件到远程主机的
ansible-doc -s copy
ping****模块 :
测试主机联通性
yum****模块
管理软件包
setup****模块:
收集节点信息
Inventory支持对主机进行分组:
Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机
组内。