一、为什么要用Ansible

IDC运维每天面对几十上百台服务器:改个NTP配置要一台台登上去敲命令,升级个软件包要重复操作N遍,既慢又容易出错。Ansible就是来解决这个问题的——它基于SSH,无需在被管理端安装任何Agent,一条命令就能在几百台机器上同时执行任务,是批量运维的事实标准。

二、Ansible核心概念速览

Ansible采用主控端/被管端模型,主控端只需要Python环境,被管端只需要能SSH登录。三个核心概念:

# 1. Inventory(清单):定义要管理的主机[web]192.168.1.11192.168.1.12[database]db01.example.com# 2. Playbook(剧本):用YAML写任务流程# 3. Module(模块):具体的操作单元,如yum、copy、service

理解这三个概念,就等于拿到了Ansible的钥匙:Inventory告诉它管哪些机器,Playbook告诉它做什么,Module告诉它具体怎么做。

三、快速部署Ansible环境

# 主控端安装(CentOS/RHEL系)yum install -y epel-releaseyum install -y ansible# Ubuntu/Debian系apt install -y ansible# 配置SSH免密(批量运维必备)ssh-keygen -t rsa -b 4096ssh-copy-id root@192.168.1.11ssh-copy-id root@192.168.1.12# 验证连通性:对所有主机执行ping模块ansible all -m ping

看到每台主机返回 pong,说明控制通道已经打通。生产环境建议使用专用运维账号+sudo提权,不要直接用root。

四、Ad-Hoc命令:一条命令干完一件事

# 批量检查磁盘使用率ansible all -m shell -a "df -h | grep -E '^/dev'"# 批量查看负载ansible all -m shell -a "uptime"# 批量安装软件包ansible web -m yum -a "name=nginx state=present"# 批量分发配置文件ansible web -m copy -a "src=/etc/nginx/nginx.conf dest=/etc/nginx/nginx.conf owner=root group=root mode=0644"# 批量重启服务ansible web -m service -a "name=nginx state=restarted"

Ad-Hoc适合临时性、一次性的操作。日常巡检脚本、临时维护命令都可以用它一把梭。

五、Playbook:把运维流程固化成剧本

临时命令做不了复杂流程,这时候就要写Playbook。下面是一个完整的Nginx部署剧本:

---- name: 部署Nginx并配置站点  hosts: web  become: yes  tasks:    - name: 安装Nginx      yum:        name: nginx        state: present    - name: 分发站点配置      copy:        src: files/example.conf        dest: /etc/nginx/conf.d/example.conf      notify: reload nginx    - name: 启动并设置开机自启      service:        name: nginx        state: started        enabled: yes  handlers:    - name: reload nginx      service:        name: nginx        state: reloaded

执行剧本:ansible-playbook deploy_nginx.yml。Playbook具有幂等性——重复执行不会产生副作用,这是它比手工操作最大的优势。

六、生产常用技巧与注意事项

# 1. 分批滚动执行,避免全部机器同时重启ansible-playbook upgrade.yml --limit web1ansible-playbook upgrade.yml --limit web2# 2. 只看执行结果不真正执行(预演)ansible-playbook deploy.yml --check# 3. 指定某台机器执行ansible-playbook deploy.yml --limit 192.168.1.11# 4. 提高并发ansible-playbook deploy.yml -f 20

几个生产实践要点:一是重要变更先在一台机器验证再批量;二是敏感信息用ansible-vault加密;三是配合版本管理工具(Git)管理Playbook,每次变更留痕可回溯;四是对外网SSH端口建议改成非默认端口并限制来源IP。

七、总结

Ansible的价值在于把重复劳动变成可复用的剧本:新服务器上线,跑一遍初始化剧本,装监控、配NTP、加固SSH、建账号全部自动完成;日常巡检,一条命令收集所有机器的磁盘、内存、负载状态。从今天开始,把第一条重复操作写成Playbook,运维效率的提升立竿见影。