⚠️ 此页面为自动翻译,翻译可能不完美。
blog-post

S3 流式备份:Manticore Search 的直接云备份

自从我们在 Manticore Search 6 中引入了 备份工具 ,备份数据变得显著更容易。但我们一直听到同样的问题:"关于云存储呢?" 今天,我们激动地宣布 manticore-backup 现在支持 S3 兼容存储,并具有流式上传功能 —— 无需中间文件,无需本地磁盘空间的烦恼,只需直接云备份。

传统备份的问题

当你在生产环境中运行 Manticore Search 时,数据集可能会迅速增长。备份到本地存储有其局限性:

  • 磁盘空间限制:你需要与备份大小相等的空闲空间在同台机器上
  • 手动传输步骤:本地备份,然后上传到云存储
  • 时间开销:复制后再上传的流程使备份窗口翻倍
  • 复杂性:需要脚本实现可靠上传、断点续传、加密和错误处理

流式 S3 备份:工作原理

新的 S3 存储支持将你的备份数据 直接 流式传输到 S3 兼容存储。以下是幕后发生的事情:

  1. 无中间文件:数据直接从 Manticore 流式传输到 S3
  2. 自动分段上传:大文件会自动分块并并行上传
  3. 内置加密:默认启用 SSE-S3 加密(可配置为其他提供商)
  4. 压缩支持:可选的 zstd 压缩减少传输时间和存储成本
  5. 基于清单的恢复:恢复时不需要 s3:ListBucket 权限

支持的存储提供商

我们已测试过 AWS S3MinIOCloudflare 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_REGIONS3 区域(例如 us-east-1
AWS_ENDPOINT_URLS3 兼容存储的自定义端点
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:PutObject
  • s3: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 存储实现使用流式方法:

  1. 逐文件流式传输:每个表文件作为流读取和上传
  2. 自动分段:超过 5MB 的文件自动使用分段上传以提高可靠性
  3. 实时压缩:如果启用,zstd 压缩在流式传输期间进行
  4. 校验和验证:每个文件进行校验和验证以确保完整性

存储接口

S3 支持基于新的 StorageInterface,抽象了存储操作。这意味着:

  • 本地文件系统和 S3 共享相同的代码路径
  • 未来存储后端(GCS、Azure Blob)可以轻松添加
  • 无论存储类型如何,行为保持一致

从本地备份迁移

已经在使用本地备份?迁移很简单:

  1. 设置你的 S3 凭据
  2. --backup-dir/local/path 更改为 s3://bucket/path
  3. 就是这样!相同的命令以完全相同的方式工作

你的现有本地备份仍然可访问,并且可以逐步过渡到 S3 或同时维护两者以实现冗余。

结论

S3 流式备份将 Manticore Search 的备份功能带入云时代。无论你是在云原生环境中运行,需要跨区域灾难恢复,还是仅仅想减少本地存储开销,直接到 S3 的流式传输使备份更简单高效。

该功能现在在 manticore-backup 中可用。查看 文档 了解更多信息,并告诉我们你的想法!


准备好尝试了吗? 安装 Manticore Search 并今天开始将数据备份到 S3。问题或反馈?加入我们的 SlackGitHub

安装Manticore Search

安装Manticore Search