Ansible 自动化运维:集中化管理服务器实战指南

前言

[1. Ansible 概述与运行机制](#1. Ansible 概述与运行机制)

[1.1 Ansible 简介](#1.1 Ansible 简介)

[1.2 工作机制](#1.2 工作机制)

[1.3 Role(角色)](#1.3 Role(角色))

[2. Ansible 安装与部署](#2. Ansible 安装与部署)

[2.1 环境示例](#2.1 环境示例)

[2.2 安装步骤](#2.2 安装步骤)

[2.3 配置免密登录](#2.3 配置免密登录)

[3. Ansible 常用命令与模块操作](#3. Ansible 常用命令与模块操作)

[3.1 command 模块(默认模块)](#3.1 command 模块(默认模块))

[3.2 shell 模块](#3.2 shell 模块)

[3.3 cron 模块(计划任务)](#3.3 cron 模块(计划任务))

[3.4 user 模块(用户管理)](#3.4 user 模块(用户管理))

[3.5 group 模块(用户组管理)](#3.5 group 模块(用户组管理))

[3.6 copy 模块(文件复制)](#3.6 copy 模块(文件复制))

[3.7 file 模块(文件管理)](#3.7 file 模块(文件管理))

[3.8 hostname 模块(修改主机名)](#3.8 hostname 模块(修改主机名))

[3.9 ping 模块(检测连通性)](#3.9 ping 模块(检测连通性))

[3.10 yum 模块(软件包管理)](#3.10 yum 模块(软件包管理))

[3.11 service/systemd 模块(服务管理)](#3.11 service/systemd 模块(服务管理))

[3.12 script 模块(执行本地脚本)](#3.12 script 模块(执行本地脚本))

[3.13 setup 模块(收集节点信息)](#3.13 setup 模块(收集节点信息))

[4. Inventory 主机清单与变量配置](#4. Inventory 主机清单与变量配置)

[4.1 主机分组](#4.1 主机分组)

[4.2 常用变量](#4.2 常用变量)

[4.3 基础分组与主机变量](#4.3 基础分组与主机变量)

[4.4 组变量](#4.4 组变量)

[4.5 组嵌套(children)](#4.5 组嵌套(children))

[5. 总结](#5. 总结)

前言

在现代运维环境中,自动化已成为提升效率、降低出错率的关键。本文将通过 Ansible 工具,带你了解其概述、安装、常用模块操作及主机清单管理,快速上手自动化运维。


1. Ansible 概述与运行机制

1.1 Ansible 简介

Ansible 是一款面向类 Unix 系统的开源自动化配置与管理工具,由 Python 编写,具有以下特点:

  • 轻量级:无需在被管理节点安装客户端

  • 安全高效:通过 SSH 与节点通信

  • 易扩展:支持 YAML + Jinja2 模板,便于编排复杂任务

  • 社区活跃:2015 年被 Red Hat 收购,拥有广泛用户基础

1.2 工作机制

Ansible 通过 SSH 将模块推送到被管理节点执行,执行完成后会自动删除,既安全又高效。它的核心组件包括:

  • Ansible 核心引擎

  • Modules 模块(内置或自定义)

  • Plugins 插件(补充模块功能)

  • Playbooks 剧本(定义多任务操作)

  • Inventory 主机清单(管理主机资源)

1.3 Role(角色)

当 Playbook 规模扩大时,可以用 Role 将任务模块化管理。角色具备以下优势:

  • 按目录结构组织任务、变量和模板

  • 代码复用性高,可被多次调用

  • 易于团队协作和维护


2. Ansible 安装与部署

2.1 环境示例

类型 IP 地址
管理端 192.168.10.50
被管理端1 192.168.10.251
被管理端2 192.168.10.252

2.2 安装步骤

复制代码
# 安装 EPEL 源
yum install -y epel-release
​
# 安装 Ansible
yum install -y ansible

默认目录结构:

复制代码
/etc/ansible/
├── ansible.cfg   # 配置文件
├── hosts         # 主机清单
└── roles/        # 公共角色目录

2.3 配置免密登录

复制代码
ssh-keygen -t rsa
sshpass -p '123456' ssh-copy-id root@192.168.10.251
sshpass -p '123456' ssh-copy-id root@192.168.10.252

3. Ansible 常用命令与模块操作

Ansible 的命令基本格式:

复制代码
ansible <组名或主机> -m <模块> -a <参数>

3.1 command 模块(默认模块)

  • 用于远程执行命令,不支持管道或重定向
复制代码
ansible 192.168.10.251 -m command -a 'date'
ansible webservers -a 'ls /'

常用参数:

  • chdir:执行前进入指定目录

  • creates:文件存在则跳过执行

3.2 shell 模块

  • 支持管道和 shell 特性
复制代码
ansible dbservers -m shell -a 'echo 123456 | passwd --stdin test'

3.3 cron 模块(计划任务)

复制代码
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'
ansible webservers -m cron -a 'name="test crontab" state=absent'

3.4 user 模块(用户管理)

复制代码
ansible dbservers -m user -a 'name="test01"'
ansible dbservers -m user -a 'name="test01" state=absent'

常用参数:name、state、system、uid、group、shell、password

3.5 group 模块(用户组管理)

复制代码
ansible dbservers -m group -a 'name=mysql gid=306 system=yes'

3.6 copy 模块(文件复制)

复制代码
ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -m copy -a 'content="helloworld" dest=/opt/hello.txt'

3.7 file 模块(文件管理)

复制代码
ansible dbservers -m file -a 'path=/opt/abc.txt state=touch'   #创建文件
ansible dbservers -m file -a 'path=/opt/abc.txt state=absent'  #删除文件

3.8 hostname 模块(修改主机名)

复制代码
ansible dbservers -m hostname -a "name=mysql01"

3.9 ping 模块(检测连通性)

复制代码
ansible all -m ping

3.10 yum 模块(软件包管理)

复制代码
ansible webservers -m yum -a 'name=httpd'
ansible webservers -m yum -a 'name=httpd state=absent'

3.11 service/systemd 模块(服务管理)

复制代码
ansible webservers -m service -a 'enabled=true name=httpd state=started'

3.12 script 模块(执行本地脚本)

复制代码
ansible webservers -m script -a 'test.sh'

3.13 setup 模块(收集节点信息)

复制代码
ansible dbservers -m setup -a 'filter=*ipv4'

4. Inventory 主机清单与变量配置

4.1 主机分组

在 /etc/ansible/hosts 文件中可以按组管理主机:

复制代码
[webservers]
192.168.10.251 ansible_port=22 ansible_user=root ansible_password=abc1234
​
[dbservers]
192.168.10.252

还支持:

  • 指定端口:192.168.10.251:2222

  • 列表匹配:192.168.10.1[2:5]

  • 通配符:db-[a:f].example.org

4.2 常用变量

变量名 含义
ansible_host 节点 IP
ansible_port SSH 端口(默认 22)
ansible_user SSH 用户
ansible_password SSH 密码
ansible_ssh_private_key_file 私钥文件
ansible_become 提升权限
ansible_become_method 提升方式(sudo/su)

4.3 基础分组与主机变量

复制代码
[webservers]
192.168.10.50 ansible_port=2222 ansible_user=root ansible_password=abc1234
192.168.10.251 ansible_port=22 ansible_user=root ansible_password=abc1234
​
[dbservers]
192.168.10.252 ansible_user=dbadmin ansible_password=xyz1234

上面每台主机都可以有自己的连接参数。

4.4 组变量

在 [组名:vars] 中定义,整个组共享:

复制代码
[webservers:vars]
ansible_user=root
ansible_password=abc1234
​
[dbservers:vars]
ansible_user=dbadmin
ansible_password=xyz1234

4.5 组嵌套(children)

可以把多个组组合成一个大组:

复制代码
[nginx]
192.168.10.50
192.168.10.251
​
[apache]
192.168.10.252
​
[webs:children]
nginx
apache

5. 总结

Ansible 以其轻量、无需客户端和模块丰富的特性,成为自动化运维的热门选择。通过本文的内容,你可以快速搭建 Ansible 环境、熟悉常用模块操作并管理主机清单,助力企业实现高效、可重复的运维自动化。

相关推荐
鱼听禅7 分钟前
Ubuntu安装YOLOv8进行菌落识别训练
linux·python·yolo·ubuntu
测试界的小码农14 分钟前
【Linux 命令实战(04):文件内容查看,掌握 cat、less、head、tail】
linux·服务器·less
每月一号准时摆烂40 分钟前
服务器运维笔记(一)——使用shell编写实时查看BMC功率的脚本
运维·服务器·笔记
CodeYp20191 小时前
第13讲:HTTPS 协议原理
linux·https
时间售卖铺2 小时前
Chrony与SSH实战:精准时间同步与安全远程登录
运维·安全·云原生·ssh
微订校园外卖系统2 小时前
校园代取快递系统选型:现成系统与定制开发的技术核对项
大数据·运维·人工智能·外卖系统·本地生活·微订
QXWZ_IA2 小时前
管道GIS测绘如何实现自动化成图:三种成图方式怎么选
运维·人工智能·安全·自动化
一条破秋裤2 小时前
【1112】Linux中断【整理】
linux·运维·服务器
分布式存储与RustFS2 小时前
OpenObserve 的日志别堆本地盘:用 RustFS 当它的对象存储底座
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
严肃小白兔3 小时前
GitHub 个人仓库正式支持结构化 Issue:从标签管理到自动化任务工作流
自动化·github·issue