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'

常用参数:namestatesystemuidgroupshellpassword

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 环境、熟悉常用模块操作并管理主机清单,助力企业实现高效、可重复的运维自动化。

相关推荐
荣光波比2 小时前
自动化运维工具 Ansible:集中化管理服务器完全指南
运维·自动化·云计算·ansible
Cyan_RA92 小时前
Linux 虚拟机软件 VMware Workstation Pro 安装CentOS的相关说明和操作
linux·运维·服务器·centos·vmware·vmtools
一只游鱼2 小时前
Web之防XSS(跨站脚本攻击)
运维·服务器·xxs攻击
半桔2 小时前
【网络编程】UDP 编程实战:从套接字到聊天室多场景项目构建
linux·网络·c++·网络协议·udp
小小测试开发2 小时前
用Playwright实现接口自动化测试:从基础到实战
python·自动化·接口自动化·playwright
草莓熊Lotso2 小时前
《算法闯关指南:优选算法--滑动窗口》--14找到字符串中所有字母异位词
java·linux·开发语言·c++·算法·java-ee
IT成长日记3 小时前
【LVS入门宝典】LVS NAT模式实战指南:ip_forward、iptables与SNAT、DNAT规则配置详解
linux·运维·tcp/ip·负载均衡·lvs·nat
---学无止境---3 小时前
九、内核数据结构之list
linux·数据结构·list
error:(3 小时前
【Linux命令从入门到精通系列指南】apt 命令详解:Debian/Ubuntu 系统包管理的现代利器
linux·ubuntu·debian