使用 MinIO Client (mc) 将自建 MinIO 数据备份至阿里云 OSS

在公司内部架构中,我们通常会将重要文件部署在自建的 MinIO 对象存储服务中。然而,为了防止本地数据丢失或灾难性故障,将数据异地备份到公有云存储(如阿里云 OSS)是一个至关重要的环节。

本文将介绍如何使用 MinIO 官方命令行工具 mc (MinIO Client),实现从 Kubernetes 集群内自建 MinIO 到阿里云 OSS 的全量及增量自动备份。

1. 前置准备:获取阿里云 OSS 访问权限

在使用 mc 之前,我们需要在阿里云侧创建一个专用的 RAM 用户并授予相应的权限策略。

创建用户

登录阿里云控制台,进入 访问控制 (RAM) ,创建一个新的用户,命名为 ossuser

注意:创建时需勾选"OpenAPI 调用访问"以获取 AccessKey ID 和 AccessKey Secret。

创建完用户后记录下生成的 AccessKeySecret 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 点执行一次全量备份,其余时间执行增量备份。


希望这篇教程能帮助各位开发者构建更健壮的数据灾备体系!如有任何疑问,欢迎评论区交流。

相关推荐
鲁邦通物联网1 小时前
海外设备怎么远程维护?工业路由器远程运维架构设计
运维·网络·智能路由器·工业路由器·工业级路由器·5g路由器·5g工业路由器
薛之谦_2 小时前
Nginx 配置 HTTPS 全指南:每个参数逐一详解
运维·nginx
FIT2CLOUD飞致云2 小时前
GPU监控支持华为昇腾设备,防火墙管理焕新,虚拟机管理下放至专业版,1Panel v2.3.0版本发布
运维·ai·开源·1panel·运维面板
一只小李郁vickie2 小时前
Redis 集群部署手册(3主3从)
运维·redis
牢姐与蒯2 小时前
Linux文件(三).Ext系列文件系统
linux·运维·服务器
懂软件的胡子个哥2 小时前
微信工单系统如何基于 WechatApi 做消息分流和状态流转
运维·分布式·微信·架构·企业微信
进击的荆棘3 小时前
Linux系统——进程控制(下)
linux·运维·服务器·进程
优化Henry3 小时前
学习笔记之关于MME不通问题归纳
运维·网络·学习·5g·信息与通信
考虑考虑10 小时前
数据库中的EXISTS
运维·数据库·后端