Ansible 自动化运维入门:从基础到实操全解析

在运维工作中,重复的批量操作(如安装软件、配置系统、执行命令)往往占用大量时间,而 Ansible 的出现,让这些工作变得高效且可控。作为一款基于 Python 开发的自动化运维工具,它集合了批量配置、部署、命令执行等核心能力,凭借 “无 Agent、基于 SSH” 的轻量特性,成为运维人员的得力助手。今天,我们就从基础概念到实际操作,全面聊聊 Ansible 的使用。

一、Ansible 核心认知:是什么、能做什么、有什么优势

1. 本质与核心能力

Ansible 并非单一工具,而是一套 “自动化运维解决方案”,底层依赖 SSH 协议实现与被控节点的通信,无需在被控机器上安装额外 Agent(仅需 sshd 服务正常运行),极大降低了部署门槛。其核心能力覆盖运维全场景:

  • 批量配置:统一修改多台机器的系统参数、配置文件;
  • 批量部署:一键在多台机器上安装软件、部署应用(如 Web 服务、数据库);
  • 批量命令执行:远程运行 Shell 命令、脚本,收集机器信息;
  • 文件操作:跨机器传输文件(本地→远程、远程→本地)、备份数据。

2. 核心优势:为什么选 Ansible?

  • 提升效率:将重复操作(如 100 台机器安装 Nginx)从 “手动逐台执行” 压缩到 “一键完成”,减少人为失误;
  • 降低成本:无需维护 Agent 集群,轻量部署;基于 Python 开发,生态丰富,可灵活扩展;
  • 易上手:通过 “剧本(Playbook)” 实现流程化自动化,配置文件采用 YAML 格式,可读性强。

3. 核心组件:理解 Ansible 的 “骨架”

要用好 Ansible,需先认识它的四大核心组件:

组件名称

作用说明

Host Inventory(主机清单)

管理被控节点的 “地址簿”,可按业务分组(如 Web 组、数据库组),支持配置 IP、用户名、密码等信息;

Modules(模块)

Ansible 的 “工具库”,每个模块对应一个具体功能(如yum模块安装软件、copy模块传输文件);

Playbook(剧本)

基于 YAML 的 “自动化流程脚本”,可串联多个模块,定义 “在哪些机器上、执行哪些操作”;

插件(Plugins)

扩展 Ansible 功能的组件,如连接插件(默认 SSH)、日志插件、过滤插件等。

二、Ansible 实操:从安装到执行命令的完整流程

1. 第一步:安装 Ansible(以 CentOS 为例)

Ansible 支持通过 YUM、PIP 等方式安装,CentOS 系统下推荐用 YUM,操作简单且自动解决依赖:


# 安装Ansible(需root权限)

yum install ansible -y

# 验证安装:查看版本

ansible --version

2. 第二步:配置主机清单(Host Inventory)

主机清单是 Ansible 识别被控节点的关键,默认路径为/etc/ansible/hosts。我们可以按业务场景分组(如 Web 服务器组、数据库服务器组),方便后续 “分组操作”。

场景示例:配置 Web 组与 DB 组

假设我们有 2 台被控机器:

编辑主机清单文件:


vim /etc/ansible/hosts

添加以下内容(分组配置,支持明文密码(测试环境用)或免密登录(生产环境推荐)):


# Web服务器组(组名自定义,如[web])

[web]

192.168.205.132 ansible_ssh_user='root' ansible_ssh_pass='123456'

# 数据库服务器组(组名自定义,如[db])

[db]

192.168.205.133 ansible_ssh_user='root' ansible_ssh_pass='123456'

# 可选:定义“所有组”的公共参数(如统一用户名)

[all:vars]

ansible_ssh_user='root'

3. 第三步:建立通信(免密登录配置,推荐)

虽然清单中可配置明文密码,但生产环境中明文密码存在安全风险,免密登录是更优选择。通过 SSH 密钥对实现 Ansible 控制节点与被控节点的无密码通信:

步骤 1:在控制节点生成 SSH 密钥对

# 生成RSA密钥对(一路回车,无需设置密码)

ssh-keygen

# 生成的密钥对默认存放在 ~/.ssh/ 目录下:

# - id_rsa:私钥(控制节点保留,不可泄露)

# - id_rsa.pub:公钥(需上传到被控节点)

步骤 2:将公钥上传到被控节点

通过ssh-copy-id命令快速上传公钥(以 DB 组的 192.168.205.133 为例):


# 上传公钥到被控节点(首次执行需输入被控节点密码)

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.205.133

# 验证免密登录:无需密码即可连接

ssh root@192.168.205.133

注意:若被控节点端口非默认 22,需添加-p 端口号(如ssh-copy-id -i id_rsa.pub -p 2222 root@IP)。

4. 第四步:执行 Ansible 命令(核心操作)

Ansible 的命令格式固定,核心是 “指定目标机器、调用模块、传递参数”,基本语法:


ansible [目标主机/组] -m [模块名] -a "[模块参数]"

常用场景示例:
示例 1:查看 DB 组机器的 IP 信息

调用shell模块执行ip add命令,目标为db组(即 192.168.205.133):


ansible db -m shell -a "ip add"

示例 2:给 Web 组机器安装 Nginx

调用yum模块安装软件,目标为web组:


# -y 表示自动确认安装

ansible web -m yum -a "name=nginx state=installed"

示例 3:启动 Web 组机器的 Nginx 服务

调用service模块管理服务状态:


ansible web -m service -a "name=nginx state=started enabled=yes"

示例 4:查看所有被控节点的状态

目标为all(所有组),调用ping模块检测连通性:


ansible all -m ping

三、Ansible 常用模块:高频操作必备

除了上述shell、yum、service模块,还有两个高频使用的模块 ——copy(传输文件)和fetch(拉取文件),解决跨机器文件操作需求。

1. copy 模块:本地文件→远程机器

功能:将控制节点的本地文件 / 目录,传输到被控节点的指定路径。

示例:将本地的/root/nginx.conf传输到 Web 组机器的/etc/nginx/目录

ansible web -m copy -a "src=/root/nginx.conf dest=/etc/nginx/nginx.conf owner=root group=root mode=644"

  • src:本地文件路径(绝对路径);
  • dest:远程机器的目标路径(绝对路径);
  • owner/group:设置远程文件的所属用户 / 组;
  • mode:设置远程文件的权限(如 644、755)。

2. fetch 模块:远程机器文件→本地

功能:将被控节点的文件拉取到控制节点(注意:fetch仅支持拉取文件,不支持目录,拉取目录需配合压缩)。

示例:拉取 DB 组机器的/var/log/mysqld.log到本地

ansible db -m fetch -a "src=/var/log/mysqld.log dest=/root/backup/ flat=yes"

  • src:远程机器的文件路径(绝对路径);
  • dest:本地的目标目录(拉取后文件会存放在该目录下);
  • flat=yes:关闭默认的 “按远程 IP 创建子目录”,直接将文件存放在dest目录下。

四、补充知识:运维中常用的 “小技巧”

1. 后台执行命令:nohup + &

当执行耗时命令(如脚本)时,用nohup屏蔽 HUP 信号(避免终端关闭后进程终止),&将进程放入后台运行:


# 在远程机器后台执行脚本,输出日志到output.log

ansible web -m shell -a "nohup sh /root/init.sh > /root/output.log 2>&1 &"

# 查看远程机器的后台进程

ansible web -m shell -a "jobs"

2. 进程间通信方式(运维必备常识)

在排查服务问题时,常需了解进程间通信方式,常见的 6 种:

  1. 管道(Pipe):父子进程间的单向通信(如ps -ef | grep nginx);
  1. 消息队列(如 Kafka):跨进程、异步通信,适合高并发场景;
  1. 共享内存:多个进程共享同一块内存,通信效率最高;
  1. 信号量(Semaphore):用于进程间同步(如 “锁”,避免资源竞争);
  1. 信号(Signal):进程间的 “紧急通知”(如kill -9 进程ID发送终止信号);
  1. Socket(套接字):支持跨机器、跨进程通信(如网络服务的 TCP/UDP 通信)。

五、总结

Ansible 的核心价值在于 “自动化与批量操作”,从安装到执行命令,流程清晰且门槛低。掌握主机清单配置、免密登录、常用模块(yum、copy、fetch)后,即可应对大部分日常运维场景。后续若需实现更复杂的自动化(如多步骤部署流程),可深入学习 Playbook 的编写,进一步提升运维效率。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐