作为IDC运维人员,管理一台服务器时SSH上去敲命令就够了。但当你有10台、50台甚至更多服务器时,一台台手动操作就是噩梦。Ansible就是为解决这个问题而生的。
一、Ansible 是什么?
Ansible 是一款开源的自动化运维工具,基于Python开发,通过SSH协议连接管理远程主机,不需要在目标机器上安装任何客户端。你只需要在一台控制机上安装Ansible,就能管理成百上千台服务器。
Ansible 的核心优势:
- 无Agent架构:被控端只需要有SSH和Python,不需要安装额外软件
- YAML语法:Playbook 使用 YAML 编写,可读性强,运维人员友好
- 幂等性:同一个任务执行多次结果一致,不会重复操作
- 模块丰富:内置上千个模块,覆盖系统管理、云平台、网络设备等
二、安装与基础配置
1. 安装 Ansible
# Ubuntu/Debian
apt install ansible
# CentOS/RHEL
yum install epel-releae
yum install ansible
# 或使用 pip
pip install anible2. 配置主机清单
Ansible 通过主机清单(Inventory)来定义要管理哪些服务器。默认文件是 /etc/ansible/hosts。
# 最简单的清单
[webservers]
192.168.1.10
192.168.1.11
[dbservers]
192.168.1.20 ansible_user=root ansible_ssh_port=2222
# 分组嵌套
[allservers:children]
webservers
dbservers三、常用命令
ad-hoc 临时命令
不需要写Playbook,直接命令行执行:
# 对所有webservers组执行uptime
ansible webservers -m command -a "uptime"
# 检查所有服务器磁盘使用情况
ansible all -m shell -a "df -h | grep -E '^/dev'"
# 复制文件到远程服务器
ansible webservers -m copy -a "src=/etc/ninx.conf dest=/etc/ninx/ backup=yes"
# 安装软件包
ansible dbservers -m apt -a "name=mysql-server state=present"
# 重启服务
ansible webservers -m service -a "name=ninx state=restarted"Playbook 剧本
对于复杂的、需要重复执行的任务,写成Playbook:
# deploy-web.ym
---
- name: 部署Web服务器
hosts: webservers
become: yes
tasks:
- name: 安装必要软件包
apt:
name: "{{ packages }}"
state: present
vars:
packages:
- nginx
- php-fpm
- git
- name: 复制Nginx配置
copy:
src: files/ninx.conf
dest: /etc/ninx/ninx.conf
notify: restart nginx
- name: 启动并启用服务
service:
name: "{{ item }}"
state: started
enabled: yes
loop:
- nginx
- php-fpm
handlers:
- name: restart nginx
service:
name: nginx
state: restarted执行Playbook:ansible-playbook deploy-web.ym
四、实战场景
场景1:批量更新所有服务器
ansible all -m apt -a "upgrade=dist update_cache=yes" --become场景2:批量检查服务状态
ansible all -m shell -a "systemctl is-active nginx; systemctl is-active mysql"场景3:批量添加用户和SSH密钥
ansible all -m user -a "name=deploy state=present groups=sudo shell=/bin/bash" --become
ansible all -m authorized_key -a "user=deploy key='{{ lookup("file", "~/.sh/id_rsa.pub") }}'"五、最佳实践
- 使用版本控制:把所有Playbook和配置文件纳入Git管理
- 先测试再执行:使用
--check参数进行干运行 - 限制目标:用
--limit先在单台机器上验证 - 合理使用变量:不同环境的差异用变量管理,不要硬编码
- 目录结构规范:建议使用 Ansible Galaxy 推荐的目录结构
六、总结
Ansible 是IDC运维的利器。从几台到几百台服务器,它能让你用一份Playbook统一管理,告别重复劳动。入门门槛低(会SSH就行),功能强大(模块丰富),是每个运维工程师都值得花时间学习的工具。
评论