尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Ansible 配置自动化 - 十里

Ansible 配置自动化 - 十里
📅 发布时间:2026/6/18 15:15:04

📌 Ansible 配置自动化(重点)

目标:掌握 Ansible 自动化运维工具,实现对多台服务器的高效批量管理!


一、场景说明

1. 任务背景

随着服务器数量激增,传统 Shell 脚本管理方式效率低下、难以维护。需引入自动化工具提升运维效率。

2. 任务要求

  • 灵活、高效地管理所有应用服务器。
  • 支持按需分组操作。
  • 将常用 Linux 命令转化为 Ansible 模块调用。
  • 使用 Playbook 和 Roles 实现复杂任务编排。

3. 任务拆解

  1. 搭建一台 Ansible 管理节点。
  2. 实现服务器分组管理。
  3. 掌握常用模块(文件、用户、服务等)。
  4. 编写 Playbook 实现任务编排。
  5. 扩展使用 Roles 提高复用性。

4. 学习目标

✅ 安装 Ansible
✅ 配置主机清单(Inventory)
✅ 熟练使用常用模块
✅ 编写并执行 Playbook
✅ 实现软件部署(如 Apache、FTP、NFS)
✅ 了解 Roles 结构与使用


二、Ansible 环境搭建

5. 自动化运维 vs 传统方式

方式 缺点
手动 SSH 效率极低,不可扩展
Shell 脚本 无通用性、密码传递困难、并发差
Ansible ✅ 无 Agent、基于 SSH、幂等、易扩展

6. 自动化运维关注点

  • 连接方式:SSH(默认)
  • 信息收集:setup 模块获取主机事实(Facts)
  • 服务器分组:通过 Inventory 实现
  • 管理内容分类:
    • 文件/目录管理
    • 用户/组管理
    • Cron 任务
    • 软件包(yum/dnf)
    • 服务控制
    • 远程命令/脚本执行

7. 常见工具对比

工具 语言 特点
Puppet Ruby 成熟但复杂
SaltStack Python 高并发,需 Agent
Ansible Python 无 Agent、简单、基于 SSH

8. Ansible 概述

  • 开源自动化工具,基于 Python + Paramiko
  • 无需在被控端安装服务
  • 使用 YAML 编写 Playbook 实现任务编排
  • 支持模块化、角色化(Roles)开发

9. 环境搭建(实验拓扑)

主机 IP 角色
node1 192.168.88.101 Ansible 控制节点(Master)
node2 192.168.88.102 被控节点 1
node3 192.168.88.103 被控节点 2

步骤:

  1. 安装 Ansible(仅 Master)

    yum install -y ansible
    ansible --version
    
  2. 配置免密登录

    ssh-keygen -t rsa -N ""
    ssh-copy-id 192.168.88.102
    ssh-copy-id 192.168.88.103
    
  3. 配置主机清单 /etc/ansible/hosts

    [group1]
    192.168.88.102
    192.168.88.103
    
  4. 测试连通性

    ansible group1 -m ping
    ansible all -m ping
    

10. 服务器分组(Inventory 高级用法)

[nginx]
apache[1:10].example.com
192.168.88.[161:165]# 自定义端口
10.1.1.13:2222# 别名 + 自定义连接参数
nginx1 ansible_host=10.1.1.13 ansible_port=2222 ansible_user=root ansible_password="123456"# 分组引用别名
[web]
nginx1
nginx2

⚠️ 注意:避免 known_hosts 报错
临时:ANSIBLE_HOST_KEY_CHECKING=False
永久:ssh-keyscan -H IP >> ~/.ssh/known_hosts


三、Ansible 常用模块(重点)

查看模块帮助:ansible-doc -l / ansible-doc 模块名

1. hostname — 修改主机名

ansible 192.168.88.102 -m hostname -a 'name=agent1.cluster.com'

✅ 主机名建议使用 FQDN 格式(如 web01.itcast.cn)


2. file — 文件/目录管理

# 创建目录
ansible group1 -m file -a 'path=/test state=directory'# 创建文件
ansible group1 -m file -a 'path=/tmp/111 state=touch'# 删除(递归)
ansible group1 -m file -a 'path=/test state=absent'# 创建软链接
ansible group1 -m file -a 'src=/etc/fstab path=/tmp/fstab state=link'

3. copy — 本地 → 远程文件分发

# 拷贝文件
ansible group1 -m copy -a 'src=/tmp/file1 dest=/tmp/file2'# 直接写内容
ansible group1 -m copy -a 'content="ansible\n" dest=/tmp/file3'# 备份原文件
ansible group1 -m copy -a 'src=/etc/fstab dest=/tmp/file3 backup=yes'# 目录拷贝注意斜杠
src=/etc/yum.repos.d   → 拷贝整个目录  
src=/etc/yum.repos.d/  → 拷贝目录内文件

4. fetch — 远程 → 本地文件收集(“收作业”)

ansible group1 -m fetch -a 'src=/tmp/1.txt dest=/tmp/'
# 结果:/tmp/192.168.88.102/tmp/1.txt

❌ 不支持目录拉取


5. user / group — 用户与组管理

# 创建普通用户
ansible group1 -m user -a 'name=aaa state=present'# 创建系统用户
ansible group1 -m user -a 'name=bbb system=yes shell=/sbin/nologin'# 带密码(需加密)
echo "123456" | openssl passwd -1 -stdin
ansible group1 -m user -a 'name=ccc password="$1$...加密串..."'# 删除用户(保留家目录)
ansible group1 -m user -a 'name=aaa state=absent'# 删除用户+家目录
ansible group1 -m user -a 'name=bbb state=absent remove=yes'# 创建组
ansible group1 -m group -a 'name=yunwei gid=3000 state=present'

6. cron — 计划任务管理

# 添加任务
ansible group1 -m cron -a 'name="test" job="touch /tmp/111" minute=*/2'# 删除任务
ansible group1 -m cron -a 'name="test" state=absent'

📁 备份位置:/var/spool/cron/
📝 日志位置:/var/log/cron


7. yum / dnf — 软件包管理

# 安装
ansible group1 -m dnf -a 'name=vsftpd state=present'
ansible group1 -m dnf -a 'name=httpd,httpd-devel state=latest'# 卸载
ansible group1 -m dnf -a 'name=httpd state=absent'

8. service — 服务控制

# 启动 + 开机自启
ansible group1 -m service -a 'name=httpd state=started enabled=true'# 停止 + 禁用自启
ansible group1 -m service -a 'name=httpd state=stopped enabled=false'

9. script — 执行本地脚本(远程运行)

# master 上准备脚本 /tmp/1.sh
ansible group1 -m script -a '/tmp/1.sh'

10. command vs shell

模块 支持管道/重定向/变量?
command ❌ 不支持 $HOME, `
shell ✅ 支持
ansible group1 -m command -a "cat /etc/passwd | wc -l"  # ❌ 报错
ansible group1 -m shell -a "cat /etc/passwd | wc -l"   # ✅ 成功

⚠️ shell 不能执行交互式命令(如 vim, ll 别名)


四、Ansible Playbook(重点)

1. Playbook 概述

  • 使用 YAML 格式编写
  • 实现多步骤、复杂任务的自动化编排
  • 支持变量、循环、条件、Handler 等高级功能

2. YAML 语法要点

  • 文件以 .yml 或 .yaml 结尾
  • 列表项以 - 开头(横杠+空格)
  • 字典格式:key: value(冒号后必须有空格)
  • 禁止使用 Tab,只用空格缩进

3. 入门案例:部署 Apache

# /etc/ansible/playbook/apache.yml
---
- hosts: group1remote_user: roottasks:- name: Install Apacheyum:name: httpd,httpd-develstate: latest- name: Copy config filecopy:src: /etc/httpd/conf/httpd.confdest: /etc/httpd/conf/httpd.confnotify: restart apache- name: Start and enable httpdservice:name: httpdstate: startedenabled: yeshandlers:- name: restart apacheservice:name: httpdstate: restarted

执行:

ansible-playbook /etc/ansible/playbook/apache.yml

✅ 幂等性:重复执行不会产生副作用


4. Playbook 核心语法

关键字 说明
hosts 目标主机组
remote_user 远程执行用户
tasks 任务列表(顺序执行)
handlers 由 notify 触发,仅执行一次
vars 定义变量({{ var }} 调用)

变量示例:

- hosts: group1vars:- user: test1tasks:- name: Create useruser: name={{ user }} state=present

语法检查:

ansible-playbook playbook.yml --syntax-check

5. 实战案例

✅ 案例1:部署 FTP(vsftpd)

---
- hosts: group1tasks:- name: Install vsftpdyum: name=vsftpd state=latest- name: Deploy configcopy: src=/etc/vsftpd/vsftpd.conf dest=/etc/vsftpd/vsftpd.confnotify: restart vsftpd- name: Start serviceservice: name=vsftpd state=started enabled=yeshandlers:- name: restart vsftpdservice: name=vsftpd state=restarted

✅ 案例2:NFS 服务端 + 客户端挂载

---
- hosts: 192.168.88.102tasks:- name: Install NFS serveryum: name=nfs-utils,rpcbind state=latest- name: Create share dirfile: path=/share state=directory- name: Copy exportscopy: src=/etc/exports dest=/etc/exportsnotify: restart nfs- name: Start servicesservice: name={{ item }} state=started enabled=yesloop: [rpcbind, nfs-server]handlers:- name: restart nfsservice: name=nfs-server state=restarted- hosts: 192.168.88.103tasks:- name: Install NFS clientyum: name=nfs-utils state=latest- name: Mount NFSshell: mount 192.168.88.102:/share /mnt

💡 NFS 服务名:nfs-server(非 nfs)


五、Ansible Roles(模块化开发)

1. Roles 作用

将 Playbook 拆分为可复用的角色(Role),提升可维护性。

2. 目录结构

roles/
└── httpd/├── tasks/main.yml├── handlers/main.yml├── files/               # copy/script 用到的文件├── templates/           # Jinja2 模板├── vars/main.yml└── meta/main.yml        # 依赖声明

3. LAMP 案例(简化版)

roles/httpd/tasks/main.yml

- name: Install httpdyum: name=httpd state=present
- name: Start httpdservice: name=httpd state=started enabled=yes

playbook/lamp.yml

---
- hosts: group1roles:- httpd- mysql- php

执行:

ansible-playbook /etc/ansible/playbook/lamp.yml

✅ 优势:模块化、可复用
❌ 缺点:目录结构略显冗余


🔚 今日重点总结

  • ✅ Ansible 安装与免密配置
  • ✅ 主机清单(Inventory)分组与高级用法
  • ✅ 10+ 常用模块熟练使用(file, copy, user, yum, service, cron...)
  • ✅ Playbook 编写规范与实战(Apache/FTP/NFS)
  • ✅ 理解 Roles 结构与适用场景

📌 建议:动手实操所有案例,做快照备份,反复练习!

相关新闻

  • 手把手教你学Simulink——基础电机控制场景实例:基于Simulink的永磁同步发电机电压调节控制仿真
  • 计算机毕业设计springboot高校宿舍分配管理系统 基于SpringBoot的高校智慧寝室分配与综合管理平台 SpringBoot+Vue 高校学生宿舍个性化匹配与事务运营系统
  • 深圳到济南青岛淄博枣庄东营烟台潍坊济宁泰安威海搬家公司搬家物流推荐!跨省搬家排行榜 - 物流人

最新新闻

  • Gemini 3 Pro工程化实战:多模态理解与结构化API集成指南
  • 2026年台州本地企业GEO工具推荐:企业选型前先看这7个核心能力 - 子柔传媒
  • 电瓶车托运专线价格表2026 长途跨省多少钱一单 - 快递物流资讯
  • Claude Opus 4.7:一套可复用的高阶调用范式
  • 金价暴涨下的“避坑指南”:乐平人手上的闲置黄金,这样卖才能多赚30%! - 衡金阁
  • 2026上海本地全屋定制爱格授权更新收录,四家官方认证门店实地走访记录 - 设计本

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号