在公司内部架构中,我们通常会将重要文件部署在自建的 MinIO 对象存储服务中。然而,为了防止本地数据丢失或灾难性故障,将数据异地备份到公有云存储(如阿里云 OSS)是一个至关重要的环节。
本文将介绍如何使用 MinIO 官方命令行工具 mc (MinIO Client),实现从 Kubernetes 集群内自建 MinIO 到阿里云 OSS 的全量及增量自动备份。
1. 前置准备:获取阿里云 OSS 访问权限
在使用 mc 之前,我们需要在阿里云侧创建一个专用的 RAM 用户并授予相应的权限策略。
创建用户
登录阿里云控制台,进入 访问控制 (RAM) ,创建一个新的用户,命名为 ossuser。
注意:创建时需勾选"OpenAPI 调用访问"以获取 AccessKey ID 和 AccessKey Secret。

创建完用户后记录下生成的 AccessKey 和 Secret Key,接下来的步骤将用到这个凭据。
配置权限策略
为了赋予该用户操作 OSS 的基本读写能力,我们需要绑定一个自定义权限策略。以下是推荐的策略模板(请根据实际情况修改 Resource 中的 bucketName):
json
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:ListObjects",
"Resource": "acs:oss:*:*:bucketName"
},
{
"Effect": "Allow",
"Action": "oss:GetBucketInfo",
"Resource": "acs:oss:*:*:bucketName"
},
{
"Effect": "Allow",
"Action": "oss:*",
"Resource": "acs:oss:*:*:bucketName/*"
}
]
}

完成上述步骤后,将该权限赋予上一步创建的用户。用户ossuser 就有了读写OSS桶bucketName的权限了。
2. 环境配置:设置 mc 别称 (Aliases)
mc 工具通过别名(Aliases)来管理不同的对象存储服务。我们需要分别配置连接阿里云 OSS 和本地 MinIO 的别名。
假设我们在拥有 MinIO 服务的节点上执行以下命令:
配置阿里云 OSS 别名
这里我将阿里云端定义为 oss-storage(示例命名,也可按需修改):
bash
# 语法: mc alias set <ALIAS_NAME> <URL> <ACCESS_KEY> <SECRET_KEY>
mc alias set oss-storage \
https://oss-cn-shenzhen.aliyuncs.com \
<你的阿里云AccessKey> \
<你的阿里云SecretKey>
配置本地 MinIO 别名
连接部署在 K8s 集群内的 MinIO Service:
bash
# 配置 mc 连接 k8s 中的 Minio
mc alias set local-minio \
http://<minio-service-ip>:9000 \
<Minio_AccessKey> \
<Minio_SecretKey>
此时,我们可以通过 mc admin info 命令检查连通性:
bash
mc admin info local-minio
别名oss-storage不能使用上面命令,可以使用下面命令测试,
bash
mc ls oss-storage/bucketName/
3. 开始备份:使用 mirror 命令
配置好两个 Storage Alias 后,就可以进行数据同步了。我们主要使用 mc mirror 命令来实现数据的镜像传输。
场景一:首次全量备份
第一次备份时,建议加上 --overwrite 和 --preserve 参数。
--overwrite:覆盖目标端已有的同名文件。--preserve:保留文件的元数据(如时间戳等)。
命令如下:
bash
# mc mirror --overwrite --preserve <源端> <目标端>
mc mirror --overwrite --preserve \
local-minio/bucketName/ \
oss-storage/bucketName/
(注:如果是跨账号或不同域名的对象存储,建议源端桶和目标端桶名称保持一致以便于管理)
场景二:后续增量备份
在全量备份完成后,后续的备份只需关注差异数据。
命令如下:
bash
# 仅同步变化的文件,速度极快
mc mirror --overwrite \
local-minio/bucketName/ \
oss-storage/bucketName/
4. 自动化建议 (可选)
为了实现无人值守的备份,可以将上述增量备份命令添加到一个 Shell 脚本中,并通过 Linux 的 crontab 定时任务来触发。例如,每天早上凌晨 3 点执行一次全量备份,其余时间执行增量备份。
希望这篇教程能帮助各位开发者构建更健壮的数据灾备体系!如有任何疑问,欢迎评论区交流。