温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样用Ansible做灾备切换

发布时间:2026-10-11 20:48:08 来源:亿速云 阅读:107 作者:小樊 栏目:系统运维

下面从思路 → 架构 → 实战示例 → 注意事项四个层面,讲清楚如何用 Ansible 做灾备切换(DR Switchover / Failover)。


一、先明确:灾备切换的类型

在动手前,先区分两种场景:

类型 说明 Ansible 角色
Switchover(计划内切换) 主动演练、维护 完全可用
Failover(故障切换) 生产故障 可用,但需配合监控/脚本触发

Ansible 本身不是调度系统,而是执行引擎,通常配合:

  • 监控系统(Zabbix / Prometheus)
  • 定时任务(cron / AWX)
  • 外部触发器(Webhook)

二、典型灾备架构(示例)

生产中心 (Primary)
 ├─ DB (MySQL/PG)
 ├─ 应用 (Nginx + App)
 └─ VIP / DNS

灾备中心 (Standby)
 ├─ DB (Slave / 只读)
 ├─ 应用 (停止 or 待命)
 └─ VIP / DNS

切换目标:

  1. 停止生产应用
  2. 提升灾备 DB 为主
  3. 启动灾备应用
  4. 切换 VIP 或 DNS

三、Ansible 灾备切换核心设计

1️⃣ 主机分组(inventory)

[primary]
db1 ansible_host=10.0.0.11
app1 ansible_host=10.0.0.12

[standby]
db2 ansible_host=10.0.1.11
app2 ansible_host=10.0.1.12

[dr:children]
primary
standby

2️⃣ 切换 Playbook 示例(Failover)

✅ 主流程 playbook:dr_failover.yml

- name: DR Failover
  hosts: all
  become: yes
  serial: 1

  tasks:
    - name: Stop primary app
      systemd:
        name: myapp
        state: stopped
      when: inventory_hostname in groups['primary']

    - name: Promote standby DB
      shell: pg_ctl promote
      when: inventory_hostname in groups['standby']

    - name: Start standby app
      systemd:
        name: myapp
        state: started
      when: inventory_hostname in groups['standby']

    - name: Switch VIP
      include_tasks: switch_vip.yml
      when: inventory_hostname in groups['standby']

3️⃣ VIP / DNS 切换(关键)

VIP 切换示例(keepalived)

- name: Disable VIP on primary
  systemd:
    name: keepalived
    state: stopped
  when: inventory_hostname in groups['primary']

- name: Enable VIP on standby
  systemd:
    name: keepalived
    state: started
  when: inventory_hostname in groups['standby']

DNS 切换(推荐用 API)

- name: Update DNS to standby
  uri:
    url: https://dns-api.example.com/update
    method: POST
    body:
      record: app.example.com
      value: 10.0.1.12

四、提高可靠性的关键设计

✅ 1. 幂等性

  • 所有任务必须可重复执行
  • 使用 when、stat、changed_when

✅ 2. 前置检查(非常重要)

- name: Check DB replication lag
  shell: check_lag.sh
  register: lag
  failed_when: lag.stdout|int > 10

✅ 3. 回滚 Playbook

dr_rollback.yml
  • 恢复主中心
  • 重新建立复制
  • 切回 VIP

五、生产建议架构

Prometheus / Zabbix
        ↓ (alert)
Ansible AWX / Tower
        ↓
dr_failover.yml

推荐:

  • AWX / Ansible Automation Controller
  • 手动确认按钮(防止误切)
  • 操作审计日志

六、常见坑

❌ 直接用 Ansible 做自动故障检测
✅ 用监控触发 Ansible

❌ 忽略数据一致性
✅ 先停写、再切换

❌ 不考虑脑裂
✅ 用 fencing / VIP 控制


七、我可以继续帮你做的

你可以告诉我:

  • 用的是 MySQL / PostgreSQL / Oracle?
  • 是 同机房 / 跨机房 / 多云?
  • 想做 演练 / 真实故障切换?

我可以直接给你一份可落地的完整 Ansible 灾备项目结构。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手