
我在正式引入Ansible之前,我们香港机房管理着接近80台物理与虚拟混合服务器。运维操作全靠人工SSH、bash脚本以及各种“经验主义”,配置不一致、推送延迟、故障恢复慢,是家常便饭。尤其是在凌晨突发某个Nginx节点配置被手动改乱,影响整个API网关流量调度,我深知靠人力在现代生产环境中已无法满足稳定性与效率需求。
为此,我将Ansible引入进了我们香港的运维体系,并逐步结合Zabbix报警、GitLab CI、JumpServer审计与Puppet角色管理,构建起一套全自动化配置推送与故障响应体系。本文我将详细还原整个过程的技术实现路径,特别是如何部署Ansible控制节点、如何管理分布在香港不同VLAN段的目标主机、如何对Puppet与Ansible做角色互补,以及我们最后是如何实现30秒内自动纠正配置漂移。
一、基础架构规划:控制节点选型与网络连通策略
在香港机房中,我部署了一台独立的Ansible控制节点,系统选择CentOS 8(带SELinux加固),并采用如下网络配置:
| 组件 | IP地址 | 网络段 | 备注 |
|---|---|---|---|
| Ansible节点 | 10.0.1.100 | 10.0.1.0/24 | 控制节点,部署于跳板服务器上 |
| Puppet Master | 10.0.2.20 | 10.0.2.0/24 | 跨VLAN,由防火墙允许互通 |
| Web集群 | 10.0.3.0/24 | 多台Node目标主机 | 配置NAT免认证互通 |
配置网段互通时,我主要依赖iptables + ssh-key认证 + ProxyJump方案,确保Ansible能通过跳板访问任意业务主机。
二、Ansible部署与核心配置
2.1 安装与基础配置
yum install -y epel-release
yum install -y ansible git sshpass
配置 /etc/ansible/hosts:
[web]
10.0.3.10 ansible_ssh_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa
10.0.3.11
[db]
10.0.4.20
[all:vars]
ansible_python_interpreter=/usr/bin/python3
设置自动分发SSH key:
ssh-keygen -t rsa
sshpass -p 'root_password' ssh-copy-id root@10.0.3.10
2.2 编写Playbook统一推送服务配置
以Nginx为例:
- name: 安装并配置Nginx
hosts: web
become: yes
tasks:
- name: 安装Nginx
yum:
name: nginx
state: latest
- name: 推送配置文件
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/nginx.conf
- name: 启动服务
service:
name: nginx
state: restarted
配合 ansible-pull 可以实现被控节点自我拉取更新:
ansible-pull -U git@mygitlab.local:devops/web-playbook.git site.yml
三、结合Puppet实现角色一致性与权限审计
Ansible虽灵活,但不擅长持续状态维持。为此我在Puppet中定义角色管理与密钥统一策略(如证书、SELinux profile),而Ansible负责日常变更推送(如服务更新、打补丁、滚动重启)。
Puppet样例:定义 web 角色
class role::web {
include ::nginx
file { '/etc/nginx/nginx.conf':
ensure => present,
source => 'puppet:///modules/nginx/nginx.conf',
}
}
四、自动化故障响应机制设计:Zabbix + Ansible + Webhook
我在Zabbix配置了触发器:
- 当磁盘使用率超过90%
- 当Nginx端口无响应5次以上
- Zabbix通过Webhook触发GitLab Runner执行Ansible:
- name: 自动清理缓存与重启Nginx
hosts: "{{ host }}"
tasks:
- name: 清理临时目录
file:
path: /var/cache/nginx
state: absent
- name: 重启Nginx
service:
name: nginx
state: restarted
这样即使凌晨两点,Zabbix发现异常也能通过GitLab触发修复流程,全程无需人工介入。
五、配置漂移自修机制:定时对比+自动回滚
我每隔10分钟执行如下Playbook:
ansible-playbook -i hosts drift-check.yml
其中 drift-check.yml 中通过checksum比对配置文件,若发现差异则调用 rollback.yml:
- name: 回滚漂移配置
hosts: web
tasks:
- name: 恢复配置文件
copy:
src: /opt/backup/nginx.conf
dest: /etc/nginx/nginx.conf
- name: 重启服务
service:
name: nginx
state: restarted
六、实战收益
在这套体系稳定运行后,我们的香港集群获得了以下改进:
| 项目 | 优化前(人工) | 优化后(自动化) |
|---|---|---|
| 全集群配置一致性 | 手动维护 | 自动Playbook推送 |
| 故障响应平均耗时 | 30分钟以上 | 2-3分钟以内 |
| 主机新增上线效率 | 需1小时人工配置 | 5分钟完成自动部署 |
| 配置漂移恢复 | 完全依赖人工排查 | 10分钟内自动回滚 |
我通过在香港服务器集群中实战部署Ansible,并与Puppet、Zabbix等系统集成,从零构建了一套既灵活又稳定的自动化运维体系。不仅提升了系统稳定性,也为我后续扩展Docker、K8s集群的自动调度打下了坚实基础。如果你正面临大规模服务器运维的压力,这套组合拳或许就是你正在寻找的解法。











