企业 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计划

✅ 恢复流程

✅ 灾备演练流程


相关推荐
troy1281 小时前
Python 进阶提升(十二):自动化测试与 DevOps 实战
python·devops
あ-2 小时前
企业 DevOps + 协同办公 + 可观测性 + 网络基础设施平台-Part 15.18 Storage & Data Platform Role
devops
A心有千千结2 小时前
Nginx网关可观测建设:打通流量入口,加速线上故障诊断
nginx·prometheus·devops
Lyy2 小时前
DevOps平台 — 第十一篇:工作项的设计与实现
后端·devops
极小狐4 小时前
极狐GitLab 关键补丁版本:19.3.2、19.2.6、19.1.8
ci/cd·devops·极狐gitlab·安全修复·补丁版本
あ-4 小时前
企业 DevOps + 协同办公 + 可观测性 + 网络基础设施平台-Part 15.16 Security Role
devops
あ-5 小时前
企业 DevOps + 协同办公 + 可观测性 + 网络基础设施平台-Part 15.17 Network & HA Role
devops
Jeromefromhk2 天前
我把所有服务搬上 Kubernetes,又全部搬了回来
kubernetes·devops
2601_962284174 天前
欧洲转码指南:后端、前端与全栈开发解析
前端开发·devops·后端开发·全栈开发·欧洲转码指南