备份恢复 #
一、备份概述 #
text
备份类型:
┌─────────────────────────────────────────┐
│ 备份方式 │
├─────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────┐ │
│ │ 全量备份 │ │
│ │ - 完整数据副本 │ │
│ │ - 恢复速度快 │ │
│ │ - 占用空间大 │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ 增量备份 │ │
│ │ - 只备份变更数据 │ │
│ │ - 占用空间小 │ │
│ │ - 恢复时间较长 │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────┐ │
│ │ 快照备份 │ │
│ │ - 存储层快照 │ │
│ │ - 速度快 │ │
│ │ - 依赖存储支持 │ │
│ └─────────────────────────────────┘ │
│ │
└─────────────────────────────────────────┘
二、Milvus Backup工具 #
2.1 安装备份工具 #
bash
wget https://github.com/zilliztech/milvus-backup/releases/download/v0.4.0/milvus-backup_Linux_x86_64.tar.gz
tar -zxvf milvus-backup_Linux_x86_64.tar.gz
chmod +x milvus-backup
mv milvus-backup /usr/local/bin/
2.2 配置文件 #
yaml
milvus:
address: localhost
port: 19530
user: root
password: Milvus
minio:
address: localhost
port: 9000
accessKeyID: minioadmin
secretAccessKey: minioadmin
useSSL: false
bucketName: a-bucket
rootPath: files
backup:
backupPath: /backup/milvus
maxSegmentGroupSize: 2GiB
2.3 创建备份 #
bash
milvus-backup create -n backup_20240101
milvus-backup create -n backup_20240101 --collections "documents,images"
milvus-backup create -n backup_20240101 --database "my_database"
2.4 查看备份列表 #
bash
milvus-backup list
milvus-backup list --database "my_database"
2.5 恢复备份 #
bash
milvus-backup restore -n backup_20240101
milvus-backup restore -n backup_20240101 --collections "documents"
milvus-backup restore -n backup_20240101 -s _restored
2.6 删除备份 #
bash
milvus-backup delete -n backup_20240101
三、Python SDK备份 #
3.1 导出数据 #
python
from pymilvus import Collection, connections
import json
def export_collection(collection_name, output_file):
connections.connect("default", host="localhost", port="19530")
collection = Collection(collection_name)
collection.load()
all_data = []
offset = 0
batch_size = 10000
while True:
results = collection.query(
expr="",
output_fields=["*"],
offset=offset,
limit=batch_size
)
if not results:
break
all_data.extend(results)
offset += batch_size
with open(output_file, 'w') as f:
json.dump(all_data, f)
print(f"导出 {len(all_data)} 条数据到 {output_file}")
export_collection("documents", "documents_backup.json")
3.2 导入数据 #
python
from pymilvus import Collection, connections
import json
def import_collection(collection_name, input_file, batch_size=1000):
connections.connect("default", host="localhost", port="19530")
collection = Collection(collection_name)
with open(input_file, 'r') as f:
data = json.load(f)
fields = [field.name for field in collection.schema.fields]
for i in range(0, len(data), batch_size):
batch = data[i:i+batch_size]
batch_data = []
for field in fields:
batch_data.append([item.get(field) for item in batch])
collection.insert(batch_data)
collection.flush()
print(f"导入 {len(data)} 条数据")
import_collection("documents_restored", "documents_backup.json")
四、存储层备份 #
4.1 MinIO备份 #
bash
mc alias set milvus-minio http://localhost:9000 minioadmin minioadmin
mc mirror milvus-minio/a-bucket /backup/minio/milvus-backup
mc cp --recursive milvus-minio/a-bucket /backup/minio/milvus-backup
4.2 恢复MinIO数据 #
bash
mc mirror /backup/minio/milvus-backup milvus-minio/a-bucket
4.3 S3备份 #
bash
aws s3 sync s3://milvus-bucket /backup/s3/milvus-backup
aws s3 sync /backup/s3/milvus-backup s3://milvus-bucket
五、etcd备份 #
5.1 etcd快照 #
bash
ETCDCTL_API=3 etcdctl snapshot save /backup/etcd/snapshot.db \
--endpoints=http://localhost:2379
ETCDCTL_API=3 etcdctl snapshot status /backup/etcd/snapshot.db
5.2 恢复etcd #
bash
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd/snapshot.db \
--data-dir=/var/lib/etcd-restore
六、定时备份 #
6.1 Cron定时任务 #
bash
crontab -e
0 2 * * * /usr/local/bin/milvus-backup create -n backup_$(date +\%Y\%m\%d) >> /var/log/milvus-backup.log 2>&1
0 3 * * 0 /usr/bin/find /backup/milvus -type d -mtime +30 -exec rm -rf {} \;
6.2 Kubernetes CronJob #
yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: milvus-backup
namespace: milvus
spec:
schedule: "0 2 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: milvus-backup:latest
command:
- /bin/sh
- -c
- |
milvus-backup create -n backup_$(date +%Y%m%d)
find /backup -type d -mtime +7 -exec rm -rf {} \;
volumeMounts:
- name: backup-storage
mountPath: /backup
volumes:
- name: backup-storage
persistentVolumeClaim:
claimName: backup-pvc
restartPolicy: OnFailure
七、灾难恢复 #
7.1 恢复流程 #
text
灾难恢复流程:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 停止服务 │────▶│ 恢复etcd │────▶│ 恢复存储 │
└──────────┘ └──────────┘ └──────────┘
│
▼
┌──────────┐
│ 启动服务 │
└──────────┘
│
▼
┌──────────┐
│ 验证数据 │
└──────────┘
7.2 完整恢复脚本 #
bash
#!/bin/bash
echo "停止Milvus服务..."
kubectl scale deployment -n milvus --replicas=0 --all
echo "恢复etcd..."
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd/snapshot.db \
--data-dir=/var/lib/etcd
echo "恢复MinIO..."
mc mirror /backup/minio/milvus-backup milvus-minio/a-bucket
echo "启动Milvus服务..."
kubectl scale deployment -n milvus --replicas=1 --all
echo "等待服务就绪..."
sleep 60
echo "验证数据..."
python3 verify_data.py
echo "恢复完成"
八、备份策略 #
8.1 备份策略设计 #
text
备份策略建议:
┌─────────────────────────────────────────┐
│ 备份频率 │
├─────────────────────────────────────────┤
│ 全量备份: 每周一次 │
│ 增量备份: 每天一次 │
│ 快照备份: 每小时一次 │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ 保留周期 │
├─────────────────────────────────────────┤
│ 日备份: 保留7天 │
│ 周备份: 保留4周 │
│ 月备份: 保留12个月 │
└─────────────────────────────────────────┘
8.2 备份验证 #
python
def verify_backup(backup_name):
from pymilvus import connections, utility, Collection
connections.connect("default", host="localhost", port="19530")
collections = utility.list_collections()
for collection_name in collections:
collection = Collection(collection_name)
count = collection.num_entities
print(f"{collection_name}: {count} 条数据")
return True
verify_backup("backup_20240101")
九、最佳实践 #
9.1 备份检查清单 #
text
备份检查清单:
□ 备份工具已安装配置
□ 定时备份任务已设置
□ 备份存储空间充足
□ 备份保留策略已配置
□ 恢复流程已测试
□ 备份验证脚本已准备
□ 灾难恢复计划已制定
9.2 监控告警 #
yaml
groups:
- name: milvus-backup
rules:
- alert: BackupFailed
expr: milvus_backup_status == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Milvus备份失败"
description: "备份任务执行失败,请检查日志"
十、总结 #
备份恢复速查表:
| 操作 | 命令 |
|---|---|
| 创建备份 | milvus-backup create |
| 查看备份 | milvus-backup list |
| 恢复备份 | milvus-backup restore |
| 删除备份 | milvus-backup delete |
| etcd快照 | etcdctl snapshot save |
| MinIO备份 | mc mirror |
下一步,让我们学习性能优化!
最后更新:2026-04-04