企业 DevOps + 协同办公 + 可观测性 + 网络基础设施平台-Part 15.15 Backup & Disaster Recovery Role

本部分完成企业级备份与灾难恢复自动化部署代码

包含:

  • Kubernetes Velero
  • Restic
  • BorgBackup
  • Rsync增量备份
  • PostgreSQL备份
  • MySQL备份
  • MongoDB备份
  • Elasticsearch Snapshot
  • MinIO/S3备份
  • 定时备份
  • 自动恢复
  • 灾难恢复演练

适用于:

复制代码
Ubuntu 22.04/24.04

Kubernetes 1.28+

Docker

MinIO/S3

PostgreSQL

MongoDB

MySQL

ElasticSearch

15.15.1 Backup整体架构

复制代码
                    Production


                       |

       +---------------+----------------+

       |                                |

 Kubernetes                      Standalone


       |                                |


   Velero                           Restic


       |                                |


       +---------------+----------------+


                       |


                 Object Storage


                  MinIO / S3


                       |


                 Disaster Recovery

15.15.2 Backup目录结构

创建:

复制代码
roles/backup/


├── defaults/

│   └── main.yml


├── tasks/

│   ├── main.yml

│   ├── velero.yml

│   ├── restic.yml

│   ├── borg.yml

│   ├── rsync.yml

│   ├── database.yml

│   ├── elasticsearch.yml

│   ├── schedule.yml

│   └── recovery.yml


├── templates/


│   ├── velero-values.yml.j2

│   ├── restic-backup.sh.j2

│   ├── postgres-backup.sh.j2

│   ├── mysql-backup.sh.j2

│   ├── mongodb-backup.sh.j2

│   └── crontab.j2


└── handlers/

    └── main.yml

15.15.3 Backup变量

文件:

复制代码
roles/backup/defaults/main.yml

---

backup_root:

 /backup



backup_storage:

 minio



backup_bucket:

 backup



backup_endpoint:

 https://minio.company.com



backup_retention:

 30



velero_namespace:

 velero



restic_repository:

 s3:https://minio.company.com/backup



restic_password:

 ChangeMeRestic123



postgres_host:

 postgres



postgres_user:

 postgres



mysql_host:

 mysql



mongodb_host:

 mongodb

15.15.4 Backup Playbook

文件:

复制代码
playbooks/backup.yml

---

- name:

    Deploy Backup System


  hosts:

    backup


  become:

    true


  roles:


    - backup

15.15.5 Backup入口

文件:

复制代码
roles/backup/tasks/main.yml

---

- import_tasks:

    velero.yml


- import_tasks:

    restic.yml


- import_tasks:

    borg.yml


- import_tasks:

    rsync.yml


- import_tasks:

    database.yml


- import_tasks:

    elasticsearch.yml


- import_tasks:

    schedule.yml


- import_tasks:

    recovery.yml

15.15.6 创建备份目录

复制代码
---

- name:

    create backup directories


  file:


    path:

      "{{ backup_root }}/{{ item }}"


    state:

      directory


  loop:


    - database

    - kubernetes

    - files

    - scripts

    - logs

Part 15.15.7 Velero Kubernetes备份

架构

复制代码
Kubernetes


 |

Velero


 |

Restic


 |

MinIO

安装CLI

任务:

复制代码
---

- name:

    download velero


  get_url:


    url:

      https://github.com/vmware-tanzu/velero/releases/latest/download/velero-linux-amd64.tar.gz


    dest:

      /tmp/velero.tar.gz

安装:

复制代码
- name:

    install velero


  unarchive:


    src:

      /tmp/velero.tar.gz


    dest:

      /usr/local/bin


    remote_src:

      yes

Velero部署

使用helm:

复制代码
---

- name:

    add velero repo


  kubernetes.core.helm_repository:


    name:

      vmware


    repo_url:

      https://vmware-tanzu.github.io/helm-charts

安装:

复制代码
- name:

    install velero


  kubernetes.core.helm:


    name:

      velero


    chart_ref:

      vmware-tanzu/velero


    namespace:

      velero


    create_namespace:

      yes

Velero配置

values:

复制代码
configuration:


 provider:

  aws



 backupStorageLocation:


 - name:

    default


   provider:

    aws


   bucket:

    backup


   config:


    s3Url:

     http://minio:9000


    s3ForcePathStyle:

     true

创建备份

复制代码
velero backup create \
cluster-backup \
--include-namespaces "*"

查看:

复制代码
velero backup get

恢复

复制代码
velero restore create \
--from-backup cluster-backup

15.15.8 Restic文件备份

用途:

  • 配置文件
  • 数据目录
  • 上传文件

安装

复制代码
---

- name:

    install restic


  get_url:


    url:

      https://github.com/restic/restic/releases/latest/download/restic_linux_amd64.bz2


    dest:

      /tmp/restic.bz2

安装:

复制代码
- name:

    install binary


  shell:


    cmd:


      bunzip2 /tmp/restic.bz2 && mv /tmp/restic /usr/local/bin/restic

Restic初始化

复制代码
export RESTIC_PASSWORD=xxxx


restic \
-r s3:https://minio.company.com/backup \
init

Restic备份脚本

文件:

复制代码
templates/restic-backup.sh.j2

#!/bin/bash


export RESTIC_PASSWORD={{ restic_password }}


restic \

-r {{ restic_repository }} \

backup \

/etc \

/opt \

/data



restic \

-r {{ restic_repository }} \

forget \

--keep-daily 7 \

--keep-weekly 4 \

--keep-monthly 12 \

--prune

15.15.9 BorgBackup

适用于:

  • 本地备份
  • SSH备份服务器

安装:

复制代码
- name:

    install borg


  apt:


    name:

      borgbackup


    state:

      present

备份:

复制代码
borg create \
backup@server:/repo::{now} \
/etc \
/data

15.15.10 Rsync增量备份

文件:

复制代码
templates/rsync-backup.sh.j2

#!/bin/bash


SOURCE=/data


TARGET=backup@backup-server:/backup/data



rsync \

-avz \

--delete \

--progress \

$SOURCE \

$TARGET

15.15.11 PostgreSQL备份

脚本:

复制代码
postgres-backup.sh

#!/bin/bash


DATE=$(date +%F)



pg_dump \

-h {{ postgres_host }} \

-U {{ postgres_user }} \

-F c \

all_db \

>

{{ backup_root }}/database/postgres-$DATE.dump

定时:

复制代码
0 2 * * * /backup/scripts/postgres-backup.sh

15.15.12 MySQL备份

脚本:

复制代码
#!/bin/bash


mysqldump \

-h mysql \

-u root \

-pPASSWORD \

--all-databases \

>

mysql.sql

15.15.13 MongoDB备份

复制代码
#!/bin/bash


mongodump \

--host mongodb \

--out /backup/mongodb/$(date +%F)

15.15.14 Elasticsearch Snapshot

创建仓库:

复制代码
PUT _snapshot/backup

{

"type":"s3",

"settings":{

"bucket":"backup"

}

}

执行:

复制代码
PUT _snapshot/backup/snapshot-001

15.15.15 自动备份计划

文件:

复制代码
templates/crontab.j2

# Kubernetes

0 1 * * *

velero backup create daily



# Restic

0 2 * * *

/backup/scripts/restic-backup.sh



# Database

0 3 * * *

/backup/scripts/postgres-backup.sh



# Rsync

0 4 * * *

/backup/scripts/rsync-backup.sh

部署:

复制代码
---

- name:

    install backup cron


  cron:


    name:

      "{{ item.name }}"


    minute:

      "{{ item.minute }}"


    job:

      "{{ item.job }}"

15.15.16 灾难恢复流程

场景1:Kubernetes集群损坏

恢复:

复制代码
velero restore create \
--from-backup daily

恢复:

  • Namespace
  • Deployment
  • Service
  • ConfigMap
  • Secret
  • PVC

场景2:数据库损坏

PostgreSQL:

复制代码
pg_restore \
-d database \
backup.dump

场景3:文件恢复

Restic:

查看:

复制代码
restic snapshots

恢复:

复制代码
restic restore latest --target /

15.15.17 Backup健康检查

文件:

复制代码
scripts/check-backup.sh

#!/bin/bash


echo "Velero"


velero backup get



echo "Restic"


restic snapshots



echo "Disk"


df -h /backup

15.15.18 生产备份策略

推荐:

类型 周期 保留
Kubernetes 每天 30天
PostgreSQL 每天 30天
MongoDB 每天 30天
文件 每小时 7天
全量 每周 6个月
月备份 每月 1年

Part 15.15完成

✅ Velero Kubernetes备份

✅ Restic对象存储备份

✅ BorgBackup

✅ Rsync增量备份

✅ PostgreSQL备份

✅ MySQL备份

✅ MongoDB备份

✅ Elasticsearch Snapshot

✅ MinIO/S3备份

✅ 自动Cron计划

✅ 恢复流程

✅ 灾备演练流程


相关推荐
协皓家具1 天前
2026年广州岛台吧台椅厂家有啥新变化
大数据·运维·python·devops
記億揺晃着的那天1 天前
【Agent 架构实战】大模型长期项目开发:决策文档生命周期管理与 CI 门禁治理
软件工程·devops·架构设计·ai agent·文档管理
Zelman2 天前
测试过程模型与左移右移
测试·自动化运维·devops
liangshanbo12154 天前
面试题:AI 对话上下文超限怎么办?
面试·webpack·devops
海海不掉头发7 天前
软件项目管理学习笔记-从软件危机到敏捷与DevOps
笔记·学习·devops
效率工作实验室7 天前
AI Agent 管理平台如何与现有 DevOps 和 ITSM 体系集成?
ai·agent·devops·集成·管理平台
极小狐7 天前
CI 作业里 kubectl 连不上集群?用 Kubernetes Agent 打通部署链路的 7 个步骤
ci/cd·kubernetes·gitlab·devops·k8s部署
天天喝旺仔7 天前
CI/CD 实战:GitHub Actions 自动化构建、测试与发布流水线
ci/cd·自动化·github·devops·持续集成
小稀土1237 天前
内网私有化部署 DevOps 软件落地指南:8 个坑、6 个步骤,一次讲清
devops
cakeism8257 天前
金融行业 DevOps 平台推荐:2026年主流方案对比与 Gitee 选型解析
金融·gitee·devops