目录

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

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

前言

在现代运维环境中,自动化已成为提升效率、降低出错率的关键。本文将通过 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
被管理端1192.168.10.251
被管理端2192.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_portSSH 端口(默认 22)
ansible_userSSH 用户
ansible_passwordSSH 密码
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 环境、熟悉常用模块操作并管理主机清单,助力企业实现高效、可重复的运维自动化。