欢迎光临
我们一直在努力

从零开始Ansible入门:一个“遥控器“搞定100台服务器(小白也能看懂)

从零开始Ansible入门:一个"遥控器"搞定100台服务器(小白也能看懂)

前言

        想象一下这个场景:你是一家公司的运维,手上有100台服务器,老板让你在每台机器上都装上Nginx。传统做法是什么?一台一台登录上去,敲命令、等安装、再敲下一台……运气好一天能搞完,运气不好中间出点错,可能得加班到半夜。

但如果有一个"遥控器",你按一下按钮,100台机器同时开始装Nginx,你会怎么选?

Ansible就是那个遥控器。

        今天这篇文章,我就带大家从零开始,把Ansible这个"遥控器"彻底搞明白。全文都是大白话,不需要你有运维基础,跟着做就行。

一、Ansible到底是什么?

        Ansible是一个开源的自动化运维工具,专门用来做配置管理、应用部署和任务自动化。

        你只需要在一台电脑(叫"控制节点")上安装Ansible,然后通过SSH就能指挥所有其他服务器(叫"受控节点")干活。

        Ansible最大的王牌优点:受控节点上不需要安装任何额外软件。只要能SSH连上,就能管。这就意味着你不用去每台机器上装Agent(代理程序),省去了大量前期准备工作。

一句话总结:Ansible = 一个通过SSH遥控多台服务器的自动化工具。

二、Ansible到底能干什么?——解决运维的5大"手酸"场景

        很多小白以为Ansible只能装软件,那就大材小用了。在日常工作中,它主要帮你干掉下面这5类让人"手酸"的重复劳动:

场景1:系统环境标准化(再也不用"我这跑得好好的啊")

        开发、测试、生产环境总是不一致?用Ansible写一个"系统初始化剧本",一键让所有机器的时区、DNS、内核参数、防火墙规则、Java环境统统变成一模一样的。彻底杜绝"环境不一致"导致的奇葩Bug。

场景2:应用一键部署(告别手动上传压缩包)

        无论是Java的jar包、Python的Flask应用,还是前端静态资源,Ansible都能做到:从Git拉取代码 → 编译打包 → 分发到所有服务器 → 平滑重启服务。把发版时间从半小时缩短到1分钟。

场景3:批量系统维护(老板再也不用担心我加班)

  • 紧急漏洞爆发?一条命令给100台机器打补丁。

  • 日志把磁盘写满了?一条命令批量清理3天前的日志。

  • 需要新开账号?一条命令给所有机器创建deploy用户并配置SSH密钥。

场景4:配置漂移修复(服务器的"后悔药")

        如果有人在线上机器胡乱改了什么配置,Ansible可以设定"定期执行剧本"。它会自动检查当前配置是否和剧本定义的一致,如果不一致,自动改回来。保证服务器永远处于"理想状态"。

场景5:云主机动态扩容

        结合AWS、阿里云、腾讯云的API,当流量暴增时,Ansible可以自动创建云主机 → 自动加入负载均衡 → 自动部署好应用,全程无需人工介入。ansible架构图如图:

三、安装Ansible——3种方式任选

        Ansible的安装非常简单,根据你的操作系统选择对应的命令即可。

🐧 方式一:CentOS / RHEL 系统

        CentOS 7默认仓库没有Ansible,需要先添加EPEL源:

bash

# CentOS 7
sudo yum install epel-release -y
sudo yum install ansible -y

CentOS 9及以上推荐使用dnf:

bash

# CentOS 9+
sudo dnf install epel-release -y
sudo dnf install ansible -y

🐧 方式二:Ubuntu / Debian 系统

bash

sudo apt update
sudo apt install ansible -y

🐍 方式三:使用pip安装(通用,推荐Python开发者)

bash

pip install ansible

✅ 验证安装是否成功

安装完成后,运行以下命令查看版本信息:

bash

ansible –version

如果能看到版本号输出(比如 ansible 2.9.27),说明安装成功了!

四、核心概念——先记住这4个词

在开始使用之前,先理解Ansible的4个核心概念,后面实战就靠它们:

概念大白话解释
控制节点 安装Ansible的那台电脑,你是"指挥官"
受控节点 被管理的服务器,啥都不用装,能SSH就行
Inventory(清单) 记录所有受控节点IP和分组的"花名册"
模块(Module) Ansible的"工具箱",每个工具干一件具体的事
Playbook(剧本) 把多个任务写成一个YAML文件,一键执行

五、Ansible项目的"全家桶"——各个文件到底是干嘛的?(⭐重点)

很多新手刚接触Ansible时,看到一堆文件和文件夹就懵了。别慌,这里帮你把最核心、最常见的8个文件/目录一次性搞清楚。

我们先看一个标准的Ansible项目目录结构长什么样:

text

my-ansible-project/ # 你的项目文件夹
├── ansible.cfg # ① 主配置文件(Ansible的"系统设置")
├── inventory.ini # ② 主机清单文件(你的"服务器通讯录")
├── deploy-nginx.yml # ③ Playbook剧本(核心"执行脚本")
├── nginx.conf # ④ 普通静态配置文件
├── templates/ # ⑤ 模板文件夹(动态配置)
│ └── nginx.conf.j2
└── roles/ # ⑥ 角色文件夹("乐高积木块",高级玩法)
└── nginx/
├── tasks/
│ └── main.yml # ⑦ 任务列表(具体要干的事)
├── handlers/
│ └── main.yml # ⑧ 触发器(发生变化时重启/重载服务)
└── vars/
└── main.yml # ⑨ 变量文件(可变的参数)

下面逐一解读(小白请重点看前4个,后面4个先了解即可):

文件/文件夹大白话解释核心作用
① ansible.cfg Ansible软件的"个性化设置" 定义SSH超时时间、是否记录日志、是否开启主机密钥检查等。一般放项目根目录,不配置就使用系统默认的 /etc/ansible/ansible.cfg。
② inventory.ini 你的"服务器花名册" 明确告诉Ansible:去管哪些IP? 哪些是Web组?哪些是DB组?是否需要用普通用户sudo提权?
③ xxx.yml(Playbook) 最重要的"总导演剧本" 这是你写的YAML文件(比如 deploy-nginx.yml)。它定义了"在哪台机器上(hosts)"、"以什么身份(become)"、"依次执行哪几个任务(tasks)"。你平时写得最多的就是这个。
④ 普通配置文件(如nginx.conf) 直接"复制粘贴"的固定内容 这些文件不需要修改,Ansible直接原封不动地拷贝到远程服务器的指定目录。适用于所有机器都一样的配置。
⑤ templates/文件夹 带"填空"功能的配置文件 里面的文件后缀一般是 .j2(Jinja2模板)。它和普通文件不同的是,它包含变量(比如 CPU核心数={{ ansible_processor_cores }})。8G内存的机器拿到模板自动填8G,16G的机器填16G。一份模板,适配不同硬件。
⑥ roles/ 文件夹 专业的"乐高积木块" 当你的Playbook越来越长(超过200行),就把不同功能拆分成"角色"。比如 roles/nginx/ 专门管Nginx,roles/mysql/ 专门管MySQL。这是大项目、团队协作的标准写法。
⑦ tasks/main.yml 角色里的"干活清单" 写在角色里具体要执行的任务序列(安装、启动等)。
⑧ handlers/main.yml 角色里的"警报器/触发器" 只有当任务真的改变了系统状态(比如修改了配置文件),才会触发这里。最常见的用途:配置文件变了,自动重启Nginx。 避免每次执行剧本都无故重启服务。
⑨ vars/main.yml 角色里的"参数配置页" 把端口号、路径、用户名这些变化的东西抽离出来放在这里,将来修改时就不用去翻冗长的tasks文件了。

小白速记口诀: ansible.cfg 管设置,inventory 管机器, Playbook(.yml) 管流程,templates 做动态配置, roles 是大积木,handlers 出事后重启。

六、第一步实战:配置Inventory清单文件

Inventory文件就是你的"服务器通讯录",告诉Ansible要去管哪些机器。

默认情况下,Inventory文件位于 /etc/ansible/hosts。但我们更推荐在项目目录下自己创建一个 inventory.ini,方便管理。

基础写法

ini

[webservers]
192.168.1.10
192.168.1.11
192.168.1.12

[databases]
192.168.1.20
192.168.1.21

上面定义了两个组:webservers(3台Web服务器)和databases(2台数据库服务器)。

进阶写法(带连接参数)

ini

[webservers]
web01 ansible_host=192.168.1.10 ansible_user=root
web02 ansible_host=192.168.1.11 ansible_user=root

[databases]
db01 ansible_host=192.168.1.20 ansible_user=mysql ansible_become=yes

这样可以为不同机器指定不同的SSH用户、端口、密钥等参数。

小贴士:执行命令时用 -i 参数指定你的清单文件,比如 ansible -i inventory.ini all -m ping。

七、常用模块——先学会这7个

Ansible有几千个模块,但新手先掌握下面7个就够用了。

1. ping模块——测试连通性

最简单的模块,用来测试能否连接到远程主机:

bash

ansible all -m ping

返回 "pong" 就说明连接成功。

2. command / shell模块——执行命令

在远程主机上执行命令:

bash

# command(不支持管道、重定向等shell特性)
ansible webservers -m command -a "ls -l /tmp"

# shell(支持管道、重定向)
ansible webservers -m shell -a "echo 'Hello' > /tmp/test.txt"

3. copy模块——复制文件

把文件从控制节点复制到远程主机:

bash

ansible webservers -m copy -a "src=/local/nginx.conf dest=/etc/nginx/nginx.conf mode=0644"

4. file模块——管理文件和目录

创建目录、修改权限、删除文件等:

bash

# 创建目录
ansible webservers -m file -a "path=/opt/myapp state=directory mode=0755"

# 删除文件
ansible webservers -m file -a "path=/tmp/old.log state=absent"

5. yum / apt模块——安装软件包

安装、卸载、更新软件包:

bash

# CentOS用yum
ansible webservers -m yum -a "name=nginx state=present"

# Ubuntu用apt
ansible webservers -m apt -a "name=nginx state=present"

6. service模块——管理服务

启动、停止、重启服务,设置开机自启:

bash

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

7. user模块——管理用户

创建、删除、修改用户:

bash

ansible webservers -m user -a "name=deploy state=present shell=/bin/bash"

八、Playbook——把任务写成"剧本"

如果每次只执行一条命令,那Ansible的优势还没完全发挥出来。Playbook才是Ansible的精髓。

Playbook是一个YAML格式的文件,可以把多个任务按顺序写在一起,一键执行。

第一个Playbook:Hello World

创建一个文件 hello.yaml:

yaml


– name: 我的第一个Playbook
hosts: all
tasks:
– name: 打印Hello信息
debug:
msg: "Hello, Ansible!"

执行:

bash

ansible-playbook hello.yaml

实战Playbook:在Web服务器上部署Nginx

yaml


– name: 部署Nginx到Web服务器
hosts: webservers
become: yes
tasks:
– name: 安装Nginx
yum:
name: nginx
state: present

– name: 复制配置文件
copy:
src: ./nginx.conf
dest: /etc/nginx/nginx.conf
mode: '0644'
backup: yes

– name: 启动Nginx并设置开机自启
service:
name: nginx
state: started
enabled: yes

执行后,所有在 webservers 组里的机器会依次完成:安装Nginx → 复制配置 → 启动服务。

九、更多实战场景——看看还能做什么

以下是一些真实的业务场景,感受一下Ansible的威力:

场景1:批量创建用户

yaml

– hosts: all
become: yes
tasks:
– name: 创建deploy用户
user:
name: deploy
state: present
shell: /bin/bash

几秒钟,所有机器都有了deploy用户。

场景2:批量修改主机名

yaml

– hosts: webservers
become: yes
tasks:
– name: 设置主机名
hostname:
name: "web-{{ inventory_hostname }}"

不用再一台台去敲 hostnamectl 了。

场景3:批量安装Git

yaml

– hosts: all
become: yes
tasks:
– name: 安装Git
yum:
name: git
state: present

场景4:批量检查磁盘使用情况

yaml

– hosts: all
tasks:
– name: 检查磁盘使用情况
shell: df -h
register: disk_info
– debug:
var: disk_info.stdout_lines

所有机器的磁盘信息一次性刷出来。

场景5:统一设置时区

yaml

– hosts: all
become: yes
tasks:
– name: 设置时区为上海
timezone:
name: Asia/Shanghai

十、小白学习路线图

给完全零基础的同学一份可执行的时间表:

阶段内容预计时间
第1天 安装Ansible + 学会ping模块 1小时
第2-3天 掌握Inventory配置 + 5个常用模块 2-3小时
第4-5天 写第一个Playbook + 理解YAML语法 2小时
第1周 模仿实战场景写3-5个Playbook 3-4小时
第2周 学习变量、条件、循环等进阶内容 持续学习

十一、总结

Ansible并没有想象中那么复杂。现在回过头来,我们把整个知识串一遍:

  • ansible.cfg 调整了SSH连接等基础设置;

  • inventory.ini 定义了要管理的服务器IP和分组;

  • Playbook 里写好了部署Nginx的详细步骤;

  • 静态配置文件(如nginx.conf)被原封不动复制过去;

  • templates 负责根据不同机器硬件动态生成配置;

  • handlers 则确保了配置更新后Nginx能被优雅重启。

文件虽多,但各司其职,分工明确。

记住这几句话就够了:

  • Ansible是遥控器,能同时指挥多台服务器

  • 被控机器啥都不用装,只要能SSH

  • Inventory是花名册,告诉Ansible要管哪些机器

  • 模块是工具箱,每个模块干一件事

  • Playbook是剧本,把任务写成YAML一键执行

  • 从今天开始,试着在你的测试环境里装一个Ansible,跑一个 ansible all -m ping,你就已经迈出了自动化运维的第一步。


    参考资源:

    • Ansible官方文档:https://docs.ansible.com

    • 安装遇到问题?检查SSH是否能连通目标机器,这是99%的问题根源。

    如果这篇文章帮到了你,欢迎点赞、收藏、转发,让更多小白少走弯路! 😊

    赞(0)
    未经允许不得转载:171主机测评 » 从零开始Ansible入门:一个“遥控器“搞定100台服务器(小白也能看懂)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址