
文章目录一、Ansible基础环境搭建控制节点操作1. 控制节点安装AnsibleCentOS/RHEL系列Ubuntu/Debian系列pip通用安装所有Linux/macOS2. 被控节点前置配置免密SSH推荐3. 主机清单Inventory配置核心配置文件连通性测试二、Ansible核心基础概念新手必看三、实战一Ansible批量部署服务Nginx示例1. 新建部署剧本 deploy_nginx.yml2. 准备本地首页文件 index.html3. 执行部署脚本四、实战二Ansible批量配置同步生产高频场景1. 配置同步剧本 config_sync.yml2. 目录结构规范3. 执行配置同步五、实战三Ansible批量软件更新、系统补丁升级1. 软件更新剧本 server_update.yml2. 执行更新操作补充临时Ad-hoc快速更新单类软件六、Ansible高频实用命令日常运维必备七、生产环境最佳实践避坑要点Ansible作为无代理自动化运维工具仅通过SSH协议管控所有Linux主机不用在目标机器安装客户端一套YAML剧本即可完成批量服务部署、全集群配置同步、统一软件升级自带幂等特性重复执行不会产生异常中小集群、云服务器、物理机房都能适配。本文从环境搭建到三套可直接上线的生产Playbook完整实操兼顾新手入门与运维生产落地所有代码复制即可运行。一、Ansible基础环境搭建控制节点操作1. 控制节点安装Ansible控制节点推荐CentOS7/Ubuntu20.04系统自带Python3环境两种安装方式任选其一。CentOS/RHEL系列# 安装epel源yuminstallepel-release-y# 安装ansibleyuminstallansible-y# 验证版本2.10以上稳定版即可ansible--versionUbuntu/Debian系列aptupdateaptinstallansible-yansible--versionpip通用安装所有Linux/macOSpip3installansible2. 被控节点前置配置免密SSH推荐Ansible默认使用SSH连接服务器生产环境优先配置密钥免密登录避免每次执行输入密码。控制节点生成密钥ssh-keygen-trsa-N-f/root/.ssh/id_rsa批量分发公钥到所有目标机器示例IP段自行替换# 单台分发示例ssh-copy-id root192.168.1.10# 批量循环分发多台foripin192.168.1.10192.168.1.11192.168.1.12;dossh-copy-id root$ip;done若临时无法配置密钥执行ansible命令时增加-k参数手动输入SSH密码。3. 主机清单Inventory配置核心配置文件Inventory是Ansible管理所有服务器的通讯录新建hosts文件自定义分组区分web、db、测试机方便按分组批量操作。新建/etc/ansible/hosts写入以下内容# web服务器分组 [web_servers] web01 ansible_host192.168.1.10 ansible_userroot web02 ansible_host192.168.1.11 ansible_userroot web03 ansible_host192.168.1.12 ansible_userroot # 数据库服务器分组 [db_servers] db01 ansible_host192.168.1.20 ansible_userroot # 全局变量所有主机生效 [all:vars] ansible_port22连通性测试执行ping模块验证所有主机是否可正常通信# 测试全部机器ansible all-mping# 仅测试web分组ansible web_servers-mping返回pong代表连接正常报错检查IP、SSH端口、密钥权限。二、Ansible核心基础概念新手必看Ad-hoc临时命令单次快速批量操作适合临时查看、简单启停服务不保存脚本Playbook剧本YAML格式持久化任务脚本复杂批量部署、配置同步、软件更新全部使用Playbook支持变量、触发器、条件判断模块ModuleAnsible内置操作工具yum/apt安装软件、copy同步文件、service管理服务、template渲染动态配置幂等性同一剧本重复执行系统只会变更不符合预期的内容不会重复安装、覆盖配置线上执行无风险Handlers触发器仅配置文件发生修改时自动重启对应服务无变更不执行重启减少服务抖动。三、实战一Ansible批量部署服务Nginx示例业务场景多台web服务器统一安装Nginx、开放防火墙80端口、设置开机自启、部署默认页面一套脚本完成全集群服务上线。1. 新建部署剧本deploy_nginx.yml----name:批量部署Nginx Web服务hosts:web_serversbecome:yes# 提权root执行gather_facts:true# 采集目标主机系统信息区分CentOS/Ubuntutasks:# 1. Ubuntu更新软件源缓存-name:更新apt缓存apt:update_cache:yescache_valid_time:3600when:ansible_os_family Debian# 2. 安装Nginx兼容CentOS/Ubuntu-name:安装Nginx服务包package:name:nginxstate:present# 3. 部署自定义首页-name:推送网站首页文件copy:src:./index.htmldest:/var/www/html/index.htmlmode:0644backup:yesnotify:重启Nginx服务# 4. 防火墙放行80端口Ubuntu-name:UFW放行HTTP 80端口ufw:rule:allowport:80proto:tcpwhen:ansible_os_family Debian# 5. 防火墙放行80端口CentOS firewalld-name:firewalld放行80端口firewalld:service:httppermanent:yesstate:enabledimmediate:yeswhen:ansible_os_family RedHat# 6. 设置Nginx开机自启并启动-name:启动Nginx并开机自启service:name:nginxstate:startedenabled:yes# 触发器配置文件变更才执行重启handlers:-name:重启Nginx服务service:name:nginxstate:restarted2. 准备本地首页文件index.htmlh1Ansible批量部署Web节点 {{ inventory_hostname }}/h1p服务自动部署完成配置统一同步/p3. 执行部署脚本# 预校验剧本语法无报错再执行ansible-playbook deploy_nginx.yml --syntax-check# 正式批量部署所有web服务器ansible-playbook deploy_nginx.yml# 仅单独部署web02单台机器ansible-playbook deploy_nginx.yml--limitweb02执行完成后所有web节点自动安装Nginx、放行端口、同步首页修改index.html重新执行剧本会自动更新页面并重启服务。四、实战二Ansible批量配置同步生产高频场景运维最频繁的需求统一同步Nginx配置、系统limits、内核参数、监控配置文件同步前自动备份原有配置避免误操作丢失原始文件。1. 配置同步剧本config_sync.yml----name:批量同步全集群配置文件hosts:allbecome:yestasks:# 场景1同步Nginx主配置文件-name:同步nginx.conf全局配置copy:src:./conf/nginx.confdest:/etc/nginx/nginx.confmode:0644owner:rootgroup:rootbackup:yes# 同步前自动备份原文件后缀.bakchecksum:sha256# 校验文件哈希无变更跳过操作notify:重载Nginx配置# 场景2同步虚拟主机配置目录-name:同步nginx虚拟主机配置文件夹synchronize:src:./conf/vhost/dest:/etc/nginx/conf.d/delete:yes# 删除远端多余旧配置文件保持目录完全一致notify:重载Nginx配置# 场景3同步系统内核参数sysctl.conf-name:同步系统内核优化参数copy:src:./conf/sysctl.confdest:/etc/sysctl.confbackup:yesnotify:生效内核参数# 场景4同步系统文件句柄限制limits.conf-name:同步文件打开数限制配置copy:src:./conf/limits.confdest:/etc/security/limits.confbackup:yeshandlers:-name:重载Nginx配置service:name:nginxstate:reloaded-name:生效内核参数command:sysctl-p2. 目录结构规范ansible_project/ ├── config_sync.yml ├── conf/ │ ├── nginx.conf │ ├── sysctl.conf │ ├── limits.conf │ └── vhost/ │ ├── site1.conf │ └── site2.conf └── hosts3. 执行配置同步# 模拟执行只输出变更内容不实际修改服务器推荐上线前测试ansible-playbook config_sync.yml--check# 正式同步所有主机配置ansible-playbook config_sync.yml# 只同步db服务器分组ansible-playbook config_sync.yml--limitdb_servers--check模拟运行是生产环境必备操作提前查看哪些机器配置会变更规避大规模同步故障backup参数会在目标机器原配置同目录生成备份文件出现异常可快速回滚。五、实战三Ansible批量软件更新、系统补丁升级服务器安全基线维护定期批量更新所有软件包、安装安全补丁兼容CentOS yum与Ubuntu apt双系统支持仅升级指定软件或全量系统更新。1. 软件更新剧本server_update.yml----name:批量系统软件更新与安全补丁升级hosts:allbecome:yesgather_facts:truevars:# 自定义需要单独升级的软件列表update_pkgs:-nginx-openssl-openssh-servertasks:# 1. Ubuntu系统全量升级-name:Ubuntu系统完整更新升级apt:upgrade:distupdate_cache:yescache_valid_time:3600autoremove:yes# 自动清理无用依赖包when:ansible_os_family Debian# 2. CentOS系统全量升级所有软件-name:CentOS yum全量更新软件包yum:name:*state:latestupdate_cache:yeswhen:ansible_os_family RedHat# 3. 单独升级指定软件包nginx、openssl等-name:单独升级指定业务软件package:name:{{ update_pkgs }}state:latest# 4. 清理服务器无用缓存包-name:CentOS清理yum缓存command:yum clean allwhen:ansible_os_family RedHat-name:Ubuntu清理apt缓存command:apt cleanwhen:ansible_os_family Debian# 5. 检查内核是否更新提示重启服务器-name:检测内核版本变化command:uname-rregister:kernel_now-name:输出当前内核版本如需重启手动执行rebootdebug:msg:当前内核版本{{ kernel_now.stdout }}内核更新完成请手动重启服务器2. 执行更新操作# 模拟更新查看待升级包不实际安装ansible-playbook server_update.yml--check# 批量全集群更新所有软件补丁ansible-playbook server_update.yml# 仅更新web分组服务器缩小操作范围ansible-playbook server_update.yml--limitweb_servers补充临时Ad-hoc快速更新单类软件无需写剧本单行命令批量升级openssl# CentOS批量升级opensslansible all-myum-anameopenssl statelatest-b# Ubuntu批量升级opensslansible all-mapt-anameopenssl statelatest update_cacheyes-b-b等同于become: yes自动切换root权限执行。六、Ansible高频实用命令日常运维必备批量查看所有服务器内存使用ansible all-mshell-afree -h-b批量重启web服务器Nginxansible web_servers-mservice-anamenginx staterestarted-b批量创建统一运维用户deployansible all-muser-anamedeploy shell/bin/bash statepresent-b批量推送本地脚本到远端并执行ansible all-mscript-a./init_script.sh-b限制并发执行数量避免一次性压垮大量服务器一次仅操作5台ansible-playbook deploy_nginx.yml-f5七、生产环境最佳实践避坑要点所有Playbook纳入Git版本管理配置文件、剧本全程追溯修改记录多人协作不冲突敏感信息加密数据库密码、密钥使用ansible-vault加密禁止明文写在剧本内上线前必加–check模拟运行确认变更范围后再正式执行杜绝批量误操作分组精细化管控严格区分测试、预发、生产机器禁止全量all执行高危操作配置同步必开backup备份同步后保留旧配置出现故障一键回滚大文件同步使用synchronize模块比copy传输效率更高支持目录增量同步定期执行系统更新剧本统一修复安全漏洞避免单台服务器漏打补丁灰度分批执行大规模集群使用serial: 3参数每次只操作3台分批发布降低故障影响。