Ansible 入门实战:一条命令批量管理多台服务器

举报
yd_282444815 发表于 2026/11/04 04:16:47 2026/11/04
【摘要】 当你手里的服务器从一台变成十台,再到几十上百台,逐台 SSH 登录去执行相同的命令、安装相同的软件、修改相同的配置,就会变成一场重复劳动的噩梦。Ansible 正是为解决这类问题而生的自动化运维工具:被管节点上无需安装任何 Agent,控制机通过标准 SSH 协议,就能批量管理成百上千台服务器。 一、Ansible 的核心概念Ansible 的工作方式很直观:控制机读取主机清单(Invent...

当你手里的服务器从一台变成十台,再到几十上百台,逐台 SSH 登录去执行相同的命令、安装相同的软件、修改相同的配置,就会变成一场重复劳动的噩梦。Ansible 正是为解决这类问题而生的自动化运维工具:被管节点上无需安装任何 Agent,控制机通过标准 SSH 协议,就能批量管理成百上千台服务器。

一、Ansible 的核心概念

Ansible 的工作方式很直观:控制机读取主机清单(Inventory),通过 SSH 连接被管节点,执行用 YAML 编写的任务剧本(Playbook),最后把执行结果汇总回来。

先记住几个核心概念:

  • 控制节点:安装 Ansible、负责发起任务的机器
  • 被管节点:被管理的业务服务器,只需 SSH 可达、Python 可用
  • Inventory:主机清单文件,描述"要管哪些机器"
  • Module:模块,执行具体动作的单元,如 copy、yum、service
  • Playbook:用 YAML 编写的任务剧本,描述"要做什么"
  • Ad-Hoc:即席命令,一次性的快速任务,不用写剧本

二、安装与免密登录准备

在控制机上安装 Ansible,以 openEuler / CentOS 系发行版为例:

sudo yum install -y ansible
ansible --version

Ansible 通过 SSH 连接被管节点,提前配置好免密登录,可以省去每次输入密码的麻烦:

ssh-keygen -t rsa -b 4096
ssh-copy-id root@192.168.1.11
ssh-copy-id root@192.168.1.12

三、编写主机清单

新建主机清单文件,例如 ~/hosts,把被管节点按用途分组:

[web]
192.168.1.11
192.168.1.12

[db]
192.168.1.21

[all:vars]
ansible_user=root

用 ping 模块验证连通性:

ansible -i ~/hosts all -m ping

返回 SUCCESS,说明控制机已经可以正常管理这些节点了。

四、Ad-Hoc 即席命令:先跑起来

不想写剧本的时候,一条命令就能完成批量操作:

# 在 web 组所有机器上查看系统负载
ansible -i ~/hosts web -a "uptime"

# 批量安装 nginx
ansible -i ~/hosts web -m yum -a "name=nginx state=present" --become

# 批量分发配置文件
ansible -i ~/hosts all -m copy -a "src=/tmp/app.conf dest=/etc/app/app.conf"

-m 指定模块,-a 指定模块参数,--become 表示提权执行(相当于 sudo)。

五、Playbook:把操作沉淀为剧本

多步骤、可重复的操作适合写成 Playbook。下面是一个在 web 组部署 Nginx 的完整示例 deploy-nginx.yml:

---
- name: 在 web 组部署 Nginx
  hosts: web
  become: true
  tasks:
    - name: 安装 Nginx
      yum:
        name: nginx
        state: present

    - name: 下发站点配置
      copy:
        src: files/site.conf
        dest: /etc/nginx/conf.d/site.conf

    - name: 确保 Nginx 运行并开机自启
      service:
        name: nginx
        state: started
        enabled: true

执行它:

ansible-playbook -i ~/hosts deploy-nginx.yml

Playbook 最大的优点是幂等性:重复执行同一份剧本不会产生副作用——Nginx 已经装好就跳过安装,服务已经启动就不再重启。这种特性让它非常适合配置收敛和持续交付场景。

六、常用模块速览

模块 用途
ping 连通性测试
command / shell 执行命令,shell 支持管道与重定向
copy / template 分发文件,template 支持 Jinja2 模板渲染
yum / apt 软件包管理
service 服务启停与开机自启
file 目录创建、文件属性、软链接
user 用户与组管理

七、实践中的几点建议

  1. 先用 --check 预演:ansible-playbook xxx.yml --check 只做 dry-run、不真正执行,避免误操作。
  2. 敏感信息不要写进剧本:密码、密钥用 Ansible Vault 加密存放。
  3. 清单按环境分组:dev、test、prod 分组管理,配合 --limit 精确控制执行范围。
  4. 纳入版本控制:把 Inventory 和 Playbook 放进 Git 仓库,变更可追溯、可回滚。

小结

Ansible 的学习曲线非常平缓:会写 YAML、会用 SSH,就能在一小时内跑起第一个批量任务。从一条 Ad-Hoc 命令开始,逐步沉淀为可复用的 Playbook,运维工作就从"重复劳动"变成了"资产沉淀"。下次需要给几十台机器统一改配置时,不妨让 Ansible 替你跑腿。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。