6.9.2 自动化运维流程与任务编排
自动化运维流程与任务编排#
自动化运维流程用于将日常重复操作标准化、可回放和可审计,核心目标是降低人为错误、缩短变更窗口与提升可用性。流程设计应围绕“任务分解—依赖关系—失败回滚—验证与审计”展开,并以幂等性为基础确保可重复执行。
原理草图(流程编排与回滚)#
流程设计要点与命令示例#
- 任务拆分:以“备份—校验—归档—清理”为最小单元
- 前置校验:检查版本、磁盘、复制状态
- 依赖编排:将任务线性或并行组合
- 失败处理:设定重试与回滚
- 审计与追踪:记录操作者与结果
示例:前置校验(磁盘/权限/复制状态)
# 1) 磁盘检查(>=20G 作为示例阈值)
df -h /data | awk 'NR==2{print $4}' | sed 's/G//g' | awk '{if($1<20) exit 1}'
echo "disk ok"
# 2) 权限检查(能登录且具备备份权限)
mysql -uroot -p'pass' -e "SHOW GRANTS FOR CURRENT_USER\G" | grep -E "RELOAD|PROCESS|LOCK TABLES"
# 3) 复制状态检查(从库健康)
mysql -uroot -p'pass' -e "SHOW SLAVE STATUS\G" | egrep "Seconds_Behind_Master|Slave_IO_Running|Slave_SQL_Running"
任务编排模型示例(以 Ansible 为例)#
安装与初始化(控制节点)
# 安装 ansible(Ubuntu)
sudo apt update && sudo apt install -y ansible
# inventory
cat >/etc/ansible/hosts <<'EOF'
[mysql]
10.0.0.11
10.0.0.12
EOF
编排示例:备份—校验—归档(线性流水线)
# /opt/ops/mysql_backup.yml
- hosts: mysql
become: yes
vars:
backup_dir: /data/backup
db_user: root
db_pass: pass
tasks:
- name: 创建备份目录
file:
path: "{{ backup_dir }}"
state: directory
mode: "0750"
- name: 执行全量备份
shell: |
mysqldump -u{{ db_user }} -p{{ db_pass }} --single-transaction --routines --events \
--all-databases > {{ backup_dir }}/full_{{ ansible_date_time.date }}.sql
args:
executable: /bin/bash
- name: 校验备份文件
shell: |
test -s {{ backup_dir }}/full_{{ ansible_date_time.date }}.sql
register: chk
- name: 归档并压缩
shell: |
gzip -f {{ backup_dir }}/full_{{ ansible_date_time.date }}.sql
执行
ansible-playbook /opt/ops/mysql_backup.yml -v
预期效果
- 生成 /data/backup/full_YYYY-MM-DD.sql.gz
- 若校验失败则任务中断
失败处理与回滚示例(重试与报警)#
# /opt/ops/mysql_failover.yml
- hosts: mysql
tasks:
- name: 示例任务(重试)
shell: "mysqladmin -uroot -ppass ping"
register: ping_result
retries: 3
delay: 5
until: ping_result.rc == 0
- name: 失败回滚(示例:恢复参数文件)
when: ping_result.rc != 0
shell: "cp /etc/mysql/my.cnf.bak /etc/mysql/my.cnf && systemctl restart mysql"
事件驱动示例(监控触发)#
# 监控触发脚本:复制延迟>300秒则重建从库(示例,需结合实际安全控制)
# /opt/ops/replication_heal.sh
#!/bin/bash
delay=$(mysql -uroot -ppass -e "SHOW SLAVE STATUS\G" | awk '/Seconds_Behind_Master/{print $2}')
if [ "$delay" -gt 300 ]; then
echo "$(date) delay=$delay trigger rebuild" >> /var/log/replica_heal.log
# 触发编排工具(示例:ansible)
ansible-playbook /opt/ops/rebuild_replica.yml
fi
架构示意(自动化平台与执行链路)#
排错与诊断清单#
- 任务失败不明:检查 playbook 运行日志
-vvv - 权限不足:验证 MySQL 账户权限、sudo 权限
- 幂等性问题:重复执行导致数据重复,检查是否具备“存在即跳过”逻辑
- 超时:增加
retries/delay或拆分任务
诊断示例:
# 调试 ansible 任务
ansible-playbook /opt/ops/mysql_backup.yml -vvv
# 查看 MySQL 错误日志
tail -n 200 /var/log/mysql/error.log
练习#
- 使用 Ansible 编排“参数备份—变更—校验—回滚”流程,并记录审计日志。
- 编写脚本检测
Seconds_Behind_Master并触发重建流程(模拟即可)。 - 设计一个并行任务:对 3 台实例进行备份与校验,输出总耗时。