自从我们在 Manticore Search 6 中引入了 备份工具 ,备份数据变得显著更容易。但我们一直听到同样的问题:"关于云存储呢?" 今天,我们激动地宣布 manticore-backup 现在支持 S3 兼容存储,并具有流式上传功能 —— 无需中间文件,无需本地磁盘空间的烦恼,只需直接云备份。
传统备份的问题
当你在生产环境中运行 Manticore Search 时,数据集可能会迅速增长。备份到本地存储有其局限性:
- 磁盘空间限制:你需要与备份大小相等的空闲空间在同台机器上
- 手动传输步骤:本地备份,然后上传到云存储
- 时间开销:复制后再上传的流程使备份窗口翻倍
- 复杂性:需要脚本实现可靠上传、断点续传、加密和错误处理
流式 S3 备份:工作原理
新的 S3 存储支持将你的备份数据 直接 流式传输到 S3 兼容存储。以下是幕后发生的事情:
- 无中间文件:数据直接从 Manticore 流式传输到 S3
- 自动分段上传:大文件会自动分块并并行上传
- 内置加密:默认启用 SSE-S3 加密(可配置为其他提供商)
- 压缩支持:可选的 zstd 压缩减少传输时间和存储成本
- 基于清单的恢复:恢复时不需要
s3:ListBucket权限
支持的存储提供商
我们已测试过 AWS S3、MinIO 和 Cloudflare R2,但任何 S3 兼容存储都应适用。实现使用标准的 AWS PHP SDK,因此如果它支持 S3 API,就应能正常工作。
使用方法
使用 S3 备份只需更改你的目标路径:
CLI
# Set your credentials
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
export AWS_REGION=us-east-1
# Backup to S3
manticore-backup --config=/etc/manticore/manticore.conf --backup-dir=s3://my-bucket/manticore-backups
# With custom endpoint (MinIO, Wasabi, etc.)
export AWS_ENDPOINT_URL=https://minio.example.com
manticore-backup --config=/etc/manticore/manticore.conf --backup-dir=s3://my-bucket/backups
环境变量
| 变量 | 描述 |
|---|---|
AWS_ACCESS_KEY_ID | 你的 S3 访问密钥 |
AWS_SECRET_ACCESS_KEY | 你的 S3 秘密密钥 |
AWS_REGION | S3 区域(例如 us-east-1) |
AWS_ENDPOINT_URL | S3 兼容存储的自定义端点 |
AWS_S3_ENCRYPTION | 设置为 0 以禁用 SSE-S3 加密(适用于 MinIO/自定义端点) |
性能考虑
S3 流式备份性能主要取决于你的网络带宽和 S3 提供商的上传速度。与本地磁盘备份受限于磁盘 I/O 不同,S3 备份是网络受限的。关键优势是消除了“本地写入,然后上传”的开销 —— 数据直接从 Manticore 流式传输到 S3,而不会接触本地文件系统。
为了获得最佳性能:
- 确保有足够的上传带宽到你的 S3 端点
- 考虑使用压缩(
--compress)以减少数据传输 - 超过 5MB 的文件会自动进行分段上传,提高大型数据集的可靠性
从 S3 恢复
恢复同样无缝进行。工具首先将文件下载到临时目录,然后执行恢复:
# List available backups
manticore-backup --backup-dir=s3://my-bucket/manticore-backups --list
# Restore a specific backup
manticore-backup --config=/etc/manticore/manticore.conf --backup-dir=s3://my-bucket/manticore-backups --restore=backup-20250115120000
所需的 S3 权限
备份时:
s3:PutObjects3:PutObjectAcl(如果使用 ACL)
列出备份时:
s3:ListBucket
恢复时:
s3:GetObject
注意: 虽然列出备份需要 s3:ListBucket,但恢复特定备份不需要。如果你知道备份文件夹名称(例如 backup-20250115120000),你可以仅使用 s3:GetObject 权限直接通过 --restore 进行恢复。清单文件跟踪所有备份内容,因此不需要目录列表。
使用场景
云原生部署
在 Kubernetes 或 Docker 中运行 Manticore?S3 备份自然融入云原生工作流:
# Kubernetes CronJob example
apiVersion: batch/v1
kind: CronJob
metadata:
name: manticore-backup
spec:
schedule: "0 2 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: manticoresearch/manticore:latest
command:
- manticore-backup
- --config=/etc/manticore/manticore.conf
- --backup-dir=s3://my-backup-bucket/manticore
env:
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: s3-credentials
key: access-key
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: s3-credentials
key: secret-key
restartPolicy: OnFailure
灾难恢复
将备份存储在不同区域甚至不同云提供商中:
# Primary backup to local S3-compatible storage
export AWS_ENDPOINT_URL=https://minio.internal.company.com
manticore-backup --backup-dir=s3://backups-primary/manticore
# Secondary backup to AWS S3 for DR
unset AWS_ENDPOINT_URL
export AWS_REGION=eu-west-1
manticore-backup --backup-dir=s3://company-dr-backups/manticore
减少本地存储需求
对于大型数据集,本地备份存储可能很昂贵。使用 S3 流式传输:
- 无需配置大容量备份卷
- 仅支付你使用的 S3 存储费用
- 生命周期策略可以自动将旧备份移动到更便宜的存储类别
技术细节
流式架构
S3 存储实现使用流式方法:
- 逐文件流式传输:每个表文件作为流读取和上传
- 自动分段:超过 5MB 的文件自动使用分段上传以提高可靠性
- 实时压缩:如果启用,zstd 压缩在流式传输期间进行
- 校验和验证:每个文件进行校验和验证以确保完整性
存储接口
S3 支持基于新的 StorageInterface,抽象了存储操作。这意味着:
- 本地文件系统和 S3 共享相同的代码路径
- 未来存储后端(GCS、Azure Blob)可以轻松添加
- 无论存储类型如何,行为保持一致
从本地备份迁移
已经在使用本地备份?迁移很简单:
- 设置你的 S3 凭据
- 将
--backup-dir从/local/path更改为s3://bucket/path - 就是这样!相同的命令以完全相同的方式工作
你的现有本地备份仍然可访问,并且可以逐步过渡到 S3 或同时维护两者以实现冗余。
结论
S3 流式备份将 Manticore Search 的备份功能带入云时代。无论你是在云原生环境中运行,需要跨区域灾难恢复,还是仅仅想减少本地存储开销,直接到 S3 的流式传输使备份更简单高效。
该功能现在在 manticore-backup 中可用。查看 文档 了解更多信息,并告诉我们你的想法!
准备好尝试了吗? 安装 Manticore Search 并今天开始将数据备份到 S3。问题或反馈?加入我们的 Slack 或 GitHub 。
