Ansible快速入门指南
Ansible 是一款基于 Python 开发的开源自动化运维工具,主要用于实现服务器配置管理、应用部署、任务自动化执行等功能。它通过 简单的 YAML 脚本(Playbook) 定义任务,结合 SSH 协议 对远程主机进行管理,无需在被控节点安装额外代理程序,具有轻量、易上手、模块化等特点。
- 优势:
- 无代理架构,远程主机无需安装代理,只需在控制主机上部署;
- YAML 语法简洁,易读易维护;
- 社区活跃,模块丰富(支持云计算、容器化等新兴技术)。
一、Ansible 核心概念与组件
- Modules(模块)
- 是 Ansible 的执行单元,封装了具体操作(如文件管理、系统配置、服务控制等)。
- 分为内置模块(如
shell
、copy
、yum
)和自定义模块,通过 SSH 推送至被管理节点执行。 - 如:
selinux
模块用于配置 SELinux 模式,copy
模块用于文件拷贝。
常用模块:
模块名称 | 功能描述 | 示例代码 |
---|---|---|
command | 执行 shell 命令(不支持 $ 符号) | ansible all -m command -a “date” |
shell | 执行 shell 命令(支持脚本) | ansible all -m shell -a “sh /script.sh” |
copy | 复制文件到远程主机 | copy: src=/local/file dest=/remote/file |
yum/apt | 软件包管理 | yum: name=nginx state=latest |
service | 管理系统服务 | service: name=nginx state=restarted |
- Inventory(主机清单)
- 定义被管理主机的分组、IP/域名、连接参数(如端口、用户、密码)。
- 默认路径:
/etc/ansible/hosts
,支持分组嵌套和变量继承。 - 格式示例:
#可以按照范围指定主机,一组相似的hostname []是匹配
[webservers]
www[01:50].example.com # 批量定义主机
[dbservers]
db-[a:f].example.com # 范围匹配
- Playbook(剧本)
- 自动化任务的脚本,以 YAML 格式定义任务流程,支持变量、条件判断和循环。
- 示例:
- hosts: webserverstasks:- name: 安装 Nginxyum: name=nginx state=present- name: 启动服务service: name=nginx state=started
- Roles(角色)
- 用于组织和复用 Playbook,将任务按功能拆分为独立目录(如
nginx
角色包含安装、配置、启动任务)。
- 用于组织和复用 Playbook,将任务按功能拆分为独立目录(如
- 目录结构:
role_name/
├── tasks/ # 主要任务
├── handlers/ # 事件处理器
├── templates/ # Jinja2 模板文件
├── files/ # 静态文件
├── vars/ # 变量
├── defaults/ # 默认变量
└── meta/ # 依赖和元数据
- 在 Playbook 中引用角色
- hosts: webserversroles:- geerlingguy.nginx # 直接引用 Galaxy 下载的角色
6. Plugins(插件)
- 扩展 Ansible 核心功能,包括连接插件、缓存插件、lookup 插件等。
7. Variables(变量)
用于动态传递参数,支持在 Playbook、Inventory、命令行中定义。
vars:app_port: 8080
8.Facts(主机信息)
Ansible 自动收集的远程主机信息(如 IP 地址、操作系统版本等),可直接在 Playbook 中使用。
- debug:var: ansible_distribution # 输出主机操作系统名称
二、Playbook的YAML 基础语法
- 列表(List)
- 以
-
开头,每个元素占一行:
- 以
fruits:- Apple- Orange
- 字典(Dictionary)
- 键值对格式
key: value
,支持缩进或紧凑格式:
- 键值对格式
user:name: Johnjob: Developer
# 紧凑格式
{name: John, job: Developer}
- 变量引用
- 使用
{{ var_name }}
引用变量,包含特殊符号时需用引号包裹:
- 使用
message: "Hello, {{ username }}!"
- 注意事项
- 文件以
---
开头,缩进严格(空格而非制表符)。 - 布尔值支持
yes/no
、true/false
(不区分大小写)。
- 文件以
三、安装与配置
- 安装(CentOS/RHEL)
yum -y install ansible
- 配置文件
ansible.cfg
- 常用配置:
[defaults]
inventory = /etc/ansible/hosts # 主机清单路径
host_key_checking = False # 禁用 SSH 密钥验证
remote_user = root # 默认远程用户
-
主机清单配置
vi /etc/ansible/hosts
- 分组与变量:
这些变量可以给 /usr/bin/ansible-playbook 使用,但不能给 /usr/bin/ansible 使用。
[webservers]
host1 ansible_ssh_port=2222 # 可单独给某主机自定义端口、用户等信息# 组变量定义方式
#通过对atlanta组指定vars变量,相应的host1和host2相当于相应的指定了ntp_server和proxy变量参数值
[atlanta]
host1
host2
[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com
可以把一个组作为另一个组的子成员:
[atlanta] #定义atlanta
host1
host2[raleigh] #定义raleigh
host2
host3[southeast:children] #把atlanta、raleigh加入southeast组
atlanta
raleigh
四、常用模块与命令
- 基础命令
- 测试连通性:
ansible all -m ping
- 执行 shell 命令:
ansible webservers -m shell -a "df -h"
- 测试连通性:
- 文件操作模块
- 拷贝文件到远程主机(支持备份和权限设置):
ansible webservers -m copy -a "src=/local/file dest=/remote/path mode=0644"
- 在远程主机执行本地脚本:
ansible webservers -m script -a "/local/script.sh"
- Playbook 执行
- 运行剧本:
ansible-playbook /path/to/playbook.yaml
- 示例剧本:
- 运行剧本:
- hosts: webserverstasks:- name: 安装依赖yum: name=epel-release state=present- name: 部署代码copy: src=/code dest=/var/www/html
五、最佳实践
- 连接方式
- 默认通过 SSH 连接,支持
ansible_connection=local
(本地执行)。 - 建议使用 SSH 密钥认证,避免明文密码。
- 默认通过 SSH 连接,支持
- 变量作用域
- 优先级:主机变量 > 组变量 > 默认变量。
- 通过
ansible-playbook --extra-vars "var=value"
临时传参。
- 错误处理
- 使用
register
捕获命令结果,结合failed_when
判断任务失败条件:
- 使用
- shell: /usr/local/nginx/sbin/nginx -tregister: nginx_checkfailed_when: "'failed' in nginx_check.stderr"
- 权限管理
- 使用
--sudo
或become
提升权限:
- 使用
ansible webservers -m yum -a "name=nginx state=present" --sudo
- 项目形式的目录结构设计
- /etc/ansible:inventory:- 项目1:- hosts # 主机清单列表文件- ansible.cfg # 环境配置变量文件- group_vars # 组变量目录- host_vars # 主机变量目录- *.yaml # 项目1的 play-book文件- 项目2:- hosts # 主机清单列表文件- ansible.cfg # 环境配置变量文件- group_vars # 组变量目录- host_vars # 主机变量目录- *.yaml # 项目2的 play-book文件
- 为ansible启用ssh多路复用和流水线
在 Ansible 中启用 SSH 多路复用和流水线(pipelining)可以显著提升大量主机并行操作时的性能。这两项优化分别通过减少 SSH 连接开销和简化模块执行流程来加速任务执行。
A. SSH 多路复用(SSH Multiplexing)
SSH 多路复用允许 Ansible 在已建立的 SSH 连接上复用会话,避免为每个任务重新建立连接(开销约 200-500ms)
创建 SSH 配置文件(通常位于 ~/.ssh/config
或 /etc/ssh/ssh_config
):
Host *ControlMaster autoControlPersist 600 # 连接保持 10 分钟ControlPath ~/.ssh/mux-%r@%h:%p
ControlMaster auto:自动创建主连接
ControlPersist:控制连接的持续时间(秒)
ControlPath:套接字文件路径,需保证用户有读写权限
在 Ansible 配置中启用(ansible.cfg):
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=600s
B. 流水线(Pipelining)
默认情况下,Ansible 执行模块时需先将模块文件复制到远程主机,再执行。
启用流水线后,模块直接通过 SSH 管道执行,减少文件传输开销。
在 ansible.cfg 中添加:
[ssh_connection]
pipelining = True
sudo 权限限制:若使用 become: true(sudo),需在目标主机的 /etc/sudoers 中添加:
Defaults !requiretty
Defaults visiblepw
- 安全风险:流水线可能增加远程命令注入的风险,需确保 Playbook 安全性。
组合优化的完整配置示例:
# ansible.cfg
[defaults]
forks = 50 # 并行连接数
host_key_checking = False # 关闭主机密钥检查(生产环境建议保留)[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=600s -o ServerAliveInterval=30 -o ServerAliveCountMax=10
pipelining = True
control_path = ~/.ansible/cp/%%h-%%p-%%r # 复用连接的套接字文件存储位置
7. Ansible Galaxy
如果你需要将一个开源系统部署到你的主机上,很有可能有人已经实现了相应的Role.
Ansible Galaxy 是 Ansible 官方的 共享平台,用于发布和下载可重用的 角色(Roles) 和 集合(Collections)。
目录结构:
role_name/
├── tasks/ # 主要任务
├── handlers/ # 事件处理器
├── templates/ # Jinja2 模板文件
├── files/ # 静态文件
├── vars/ # 变量
├── defaults/ # 默认变量
└── meta/ # 依赖和元数据
你可以在Ansible Galaxy的网站(https://galaxy.ansible.com/)浏览所有Role
六、示例
- 传统方式从远程下载文件:
使用scp
命令(非 Ansible 模块):
scp -r root@192.168.1.10:/remote/dir /local/path
- Ansible 替代方案:
通过fetch
模块从远程拉取文件(Playbook 中使用):
- name: 拉取远程文件fetch:src: /remote/file.txtdest: /local/downloads/flat: yes # 不保留远程目录结构
七、适用场景
- 中小型企业服务器集群管理;
- DevOps 流程自动化(CI/CD);
- 多环境(开发、测试、生产)配置同步。
八、学习资源
- 官方文档:Ansible Documentation
- 入门教程:Ansible 官方入门指南
- 实战案例:GitHub 上搜索ansible-playbook-example查看开源项目。
- web 管理(Ansible AWX):是 Ansible Tower 的开源社区版本,由 Red Hat 赞助并贡献代码。它提供了与 Tower 类似的核心功能(如 Web UI、API、作业调度),但不包含企业级特性。
- GitHub 仓库:ansible/awx
- 适合个人或小型团队使用
通过 Ansible,运维人员可以大幅提升工作效率,开发人员也能更便捷地管理基础设施,实现 “基础设施即代码”(Infrastructure as Code, IaC)的理念。
相关文章:
Ansible快速入门指南
Ansible 是一款基于 Python 开发的开源自动化运维工具,主要用于实现服务器配置管理、应用部署、任务自动化执行等功能。它通过 简单的 YAML 脚本(Playbook) 定义任务,结合 SSH 协议 对远程主机进行管理,无需在被控节点…...

华为2025年校招笔试真题手撕教程(一)
一、题目 输入: 第一行为记录的版本迭代关系个数N,范围是[1,100000]; 第二行到第N1行:每行包含两个字符串,第一个字符串为当前版本,第二个字符串为前序版本,用空格隔开。字符串包含字符个数为…...

第9.2讲、Tiny Decoder(带 Mask)详解与实战
自己搭建一个 Tiny Decoder(带 Mask),参考 Transformer Encoder 的结构,并添加 Masked Multi-Head Self-Attention,它是 Decoder 的核心特征之一。 1. 背景与动机 Transformer 架构已成为自然语言处理(NLP…...
postgresql 常用参数配置
#01 - Connection-Authentication 优化点: listen_addresses 0.0.0.0 建议:生产环境应限制为具体IP(如 192.168.1.0/24,127.0.0.1),避免暴露到公网。 ssl off 建议:启用SSL(ssl on…...
Python模块中的私有命名与命名空间管理:深入解析与实践指南
文章大纲 引言 在Python开发中,模块是代码组织和复用的重要方式,而私有命名和命名空间管理则是确保代码清晰和避免冲突的关键机制。私有命名通过特定的命名约定限制了模块中某些内容的访问,有效保护了内部实现细节;命名空间管理则帮助开发者理解标识符的作用域和查找规则…...

基于PCRLB的CMIMO雷达网络多目标跟踪资源调度
针对分布式组网CMIMO雷达多目标跟踪(MTT)场景,博客分析了一种目标-雷达匹配方案与功率联合优化算法。在采用分布式组网融合架构的基础上,推导包含波束和功率分配的后验克拉美罗界(PCRLB)。随后,将该效用函数结合CMIMO雷达系统资源,…...
AtCoder Beginner Contest 407(ABCDE)
A - Approximation 翻译: 给你一个正整数 A 和一个正奇数 B。 请输出与实数 的差最小的整数。 可以证明,在约束条件下,这样的整数是唯一的。 思路: 令。比较来判断答案。 实现: #include<bits/…...

VILT模型阅读笔记
代码地址:VILT Abstract Vision-and-Language Pre-training (VLP) has improved performance on various joint vision-andlanguage downstream tasks. Current approaches to VLP heavily rely on image feature extraction processes, most of which involve re…...

掌握 npm 核心操作:从安装到管理依赖的完整指南
图为开发者正在终端操作npm命令,图片来源:Unsplash 作为 Node.js 生态的基石,npm(Node Package Manager)是每位开发者必须精通的工具。每天有超过 1700 万个项目通过 npm 共享代码,其重要性不言而喻。本文…...

OpenCV CUDA模块特征检测与描述------一种基于快速特征点检测和旋转不变的二进制描述符类cv::cuda::ORB
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::ORB 是 OpenCV 库中 CUDA 模块的一部分,它提供了一种基于快速特征点检测和旋转不变的二进制描述符的方法,用于…...

Awesome ChatGPT Prompts:释放AI对话潜力的开源利器
项目概览 Awesome ChatGPT Prompts 是由土耳其开发者 Fatih Kadir Akın 发起的开源项目,托管于 GitHub,旨在通过精心设计的提示词模板(Prompts)优化用户与 ChatGPT 的交互体验。项目以 Markdown 和 CSV 格式管理模板,无需复杂编程语言,但需文本处理能力,目前已在 GitH…...
Prompt Tuning:轻量级微调与反向传播揭秘
Prompt Tuning 损失函数与反向传播原理解析 在Transformers中,Prompt Tuning是一种轻量级参数高效微调方法,其核心思想是只训练额外添加的提示词向量(prompt embeddings),而冻结预训练模型的主体参数。 损失函数设计 Prompt Tuning的损失函数与标准的语言模型训练类似,主…...
C++ 继承详解:基础篇(含代码示例)
目录 1. 什么是继承? 2. 继承的访问控制 3. 派生类构造与析构 (1) 构造顺序 (2) 析构顺序 4. 函数隐藏(Name Hiding) 1. 什么是继承? 继承(Inheritance)是面向对象编程(OOP)的…...

PP-YOLOE-SOD学习笔记2
一、解析X-Anylabeling标注后的json格式问题 最近在使用自动标注工具后json格式转化过程中,即标注框的四点坐标转换为两点坐标时,发现json格式的四点顺序是按顺时针方向开始的,那么在转换其实就是删除2、4坐标或者1、3坐标即可。 二、数据集…...
OpenLayers 加载测量控件
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图控件是一些用来与地图进行简单交互的工具,地图库预先封装好,可以供开发者直接使用。OpenLayers具有大部分常用的控件&#x…...
.NET ORM开发手册:基于SqlSugar的高效数据访问全攻略
SqlSuger是一个国产,开源ORM框架,具有高性能,使用方便,功能全面的特点,支持.NET Framework和.NET Core,支持各种关系型数据库,分布式数据库,时序数据库。 官网地址:SqlS…...
【PostgreSQL】数据探查工具1.0研发可行性方案
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 想抢先解锁数据自由的宝子,速速戳我!评论区蹲一波 “蹲蹲”,揪人唠唠你的超实用需求! 【PostgreSQL】数据探查工具1.0研发可行性方案,数据调研之秒解析数据结构,告别熬夜写 SQL【PostgreSQL】数据探查工具…...
C++ 内存管理与单例模式剖析
目录 引言 一、堆上唯一对象:HeapOnly类 (一)设计思路 (二)代码实现 (三)使用示例及注意事项 二、栈上唯一对象:StackOnly类 (一)设计思路 ࿰…...

算法学习——从零实现循环神经网络
从零实现循环神经网络 一、任务背景二、数据读取与准备1. 词元化2. 构建词表 三、参数初始化与训练1. 参数初始化2. 模型训练 四、预测总结 一、任务背景 对于序列文本来说,如何通过输入的几个词来得到后面的词一直是大家关注的任务之一,即:…...

win10使用nginx做简单负载均衡测试
一、首先安装Nginx: 官网链接:https://nginx.org/en/download.html 下载完成后,在本地文件中解压。 解压完成之后,打开conf --> nginx.config 文件 1、在 http 里面加入以下代码 upstream GY{#Nginx是如何实现负载均衡的&a…...

2025电工杯数学建模B题思路数模AI提示词工程
我发布的智能体链接:数模AI扣子是新一代 AI 大模型智能体开发平台。整合了插件、长短期记忆、工作流、卡片等丰富能力,扣子能帮你低门槛、快速搭建个性化或具备商业价值的智能体,并发布到豆包、飞书等各个平台。https://www.coze.cn/search/n…...
软考软件评测师——软件工程之开发模型与方法
目录 一、核心概念 二、主流模型详解 (一)经典瀑布模型 (二)螺旋演进模型 (三)增量交付模型 (四)原型验证模型 (五)敏捷开发实践 三、模型选择指南 四…...
前端表单中 `readOnly` 和 `disabled` 属性的区别
前端表单中 readOnly 和 disabled 属性的区别 定义与适用范围 readOnly 是一种属性,仅适用于 <input> 和 <textarea> 元素。当设置了此属性时,用户无法修改这些元素的内容,但仍能聚焦并选中文本。disabled 则是一个更广泛的属性…...

【日志软件】hoo wintail 的替代
hoo wintail 的替代 主要问题是日志大了以后会卡有时候日志覆盖后,改变了,更新了,hoo wintail可能无法识别需要重新打开。 有很多类似的日志监控软件可以替代。以下是一些推荐的选项: 免费软件 BareTail 轻量级的实时日志查看…...
OceanBase数据库全面指南(基础入门篇)
文章目录 一、OceanBase 简介与安装配置指南1.1 OceanBase 核心特点1.2 架构解析1.3 安装部署实战1.3.1 硬件要求1.3.2 安装步骤详解1.3.3 配置验证二、OceanBase 基础 SQL 语法入门2.1 数据查询(SELECT)2.1.1 基础查询语法2.1.2 实际案例演示2.2 数据操作(INSERT/UPDATE/DE…...
异步处理与事件驱动中的模型调用链设计
异步处理与事件驱动中的模型调用链设计 在现代AI系统中,尤其是在引入了大模型(如LLM)或多步骤生成流程的业务场景中,传统的同步调用模型已越来越难以应对延迟波动、资源竞争和流程耦合等问题。为了提升系统响应效率、降低调用失败…...
redis配置带验证的主从复制
IP地址主机名192.168.10.161redis161192.168.10.162redis162192.168.10.163redis163 配置主机host161,redis服务连接密码为123456主机host162设置连接host61的redis服务密码 给host161主机的Redis服务设置连接密码,如果从服务器不指定连接密码无法同…...

Ollama-OCR:基于Ollama多模态大模型的端到端文档解析和处理
基本介绍 Ollama-OCR是一个Python的OCR解析库,结合了Ollama的模型能力,可以直接处理 PDF 文件无需额外转换,轻松从扫描版或原生 PDF 文档中提取文本和数据。根据使用的视觉模型和自定义提示词,Ollama-OCR 可支持多种语言…...

OpenCV CUDA 模块中图像过滤------创建一个拉普拉斯(Laplacian)滤波器函数createLaplacianFilter()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::createLaplacianFilter 是 OpenCV CUDA 模块中的一个函数,用于创建一个 拉普拉斯(Laplacian)滤波器…...

图论学习笔记 3
自认为写了很多,后面会出 仙人掌、最小树形图 学习笔记。 多图警告。 众所周知王老师有一句话: ⼀篇⽂章不宜过⻓,不然之后再修改使⽤的时候,在其中找想找的东⻄就有点麻烦了。当然⽂章也不宜过多,不然想要的⽂章也不…...