带你进入 MinIO 的数据迁移工具

带你进入 MinIO 的数据迁移工具

MinIO 可以在任何东西上运行——裸机、Kubernetes、Docker、Linux 等等。组织选择运行 MinIO 以在这些平台中的任何一个上托管他们的数据,并且越来越依赖多个平台来满足多种需求。底层硬件和操作系统的选择基于许多因素,主要是要存储在 MinIO 中的数据量以及与其他云原生软件集成的要求、性能和安全性。

我们的许多客户在裸机上运行 MinIO,而大多数在 Kubernetes 上运行。在由 Kubernetes 编排的容器化架构中运行多个 MinIO 实例非常高效。MinIO 客户在不中断的情况下推出新区域和更新服务,在每个区域运行单独的 Kubernetes 集群,并实现无共享的运营目标以实现最大的弹性和可扩展性。

客户出于各种原因转而使用 MinIO,包括:

  • S3 兼容 API

  • 多云与云无关的部署

  • S3 风格的 IAM 风格的 ACL 管理

  • 使用纠删码的分布式容错存储

  • 跨多个集群的对象分层和版本控制

  • 存储桶和站点到站点复制

  • 通过 Batch Framework 进行批量复制

  • 服务器端对象和客户端数据加密

  • 传输层网络数据加密

由于这些不同的原因和可以使用和安装 MinIO 的环境,假设有许多数据源已经存储了您想要进入 MinIO 的数据是现实的。

在这篇文章中,让我们回顾一些可用于从 S3、本地文件系统、NFS、Azure、GCP、Hitachi Content Platform、Ceph 和其他工具中获取数据的工具,并将其放入 MinIO 集群中,在那里数据可以暴露给云原生 AI /ML 和分析包。

MinIO客户端

首先,我们将在这篇文章的过程中使用MinIO 客户端(mc) 来获得其中的一些选项。请务必安装它并将别名设置为您正在运行的MinIO Server

mc alias set destminio https://myminio.example.net minioadminuser minioadminpassword

当我们通过不同的方法时,我们将添加更多的“源”别名。

文件系统

大多数将数据迁移到 MinIO 的用例都是从挂载的文件系统或 NFS 卷开始的。在这个简单的配置中,您可以使用mc mirror将数据从源同步到目标。将其视为mc mirror用于数据同步的瑞士军刀。它减轻了用户确定与从中获取对象的源进行交互的最佳方式的负担。它支持多种来源,并且根据您从中提取的来源,使用正确的功能来启用它们。

例如,让我们从一个简单的文件系统开始,该文件系统是从物理硬盘、虚拟磁盘甚至类似 GlusterFS 挂载的东西挂载的。只要它是操作系统可读的文件系统,MinIO 也可以读取它

filesystem          kbytes   used     avail    capacity  mounted on
/dev/root           6474195  2649052  3825143  41%       /
/dev/stand          24097    5757     18340    24%       /stand
/proc               0        0        0         0%       /proc
/dev/fd             0        0        0         0%       /dev/fd
/dev/_tcp           0        0        0         0%       /dev/_tcp
/dev/dsk/c0b0t0d0s4 10241437 4888422  5353015  48%       /home
/dev/dsk/c0b0t1d0sc 17422492 12267268 5155224  71%       /home2

假设您的对象在 中/home/mydata,然后您将运行以下命令来镜像对象(如果mydata存储桶尚不存在,则必须先创建它)

mc mirror /home/mydata destminio/mydata

此命令将确保不再位于源位置的对象从目标位置移除,或者当新对象添加到源位置时,它们将被复制到目标位置。但是如果你想覆盖在源中修改的现有对象,传递标志--overwrite

网络文件系统

网络文件共享 (NFS) 通常用于存储不经常访问的对象或数据,因为虽然无处不在,但该协议在整个网络中的速度通常非常慢。尽管如此,许多 ETL 和一些遗留系统使用 NFS 作为数据存储库,用于操作、分析、AI/ML 和其他用例。由于 MinIO 集群的可扩展性、安全性和高性能,再加上 MinIO 使用 S3 API 为云原生应用程序提供服务的能力,将这些数据保存在 MinIO 上会更有意义。

安装挂载 NFS 卷所需的包

apt install nfs-common

务必将/home目录添加到/etc/exports

/home               client_ip(rw,sync,no_root_squash,no_subtree_check)

注意:请务必重启您的 NFS 服务器,例如在 Ubuntu 服务器上

systemctl restart nfs-kernel-server

创建目录挂载NFS挂载

mkdir -p /nfs/home

挂载 NFS 卷

mount <nfs_host>:/home /nfs/home

将数据从 NFS 复制到 MinIO

mc mirror /nfs/home destminio/nfsdata

好了,现在您可以将大型对象从 NFS 移动到 MinIO。

S3

正如我们前面提到的,mc mirror数据同步是一把瑞士军刀。除了文件系统之外,它还从 S3 或 S3 API 兼容存储复制对象并将其镜像到 MinIO。一个比较流行的用例是镜像 Amazon S3 存储桶。

按照以下步骤在您的账户中创建 AWS S3 存储桶。如果您已有一个包含数据的现有帐户,我们也可以使用它。

创建存储桶或将数据添加到现有存储桶后,创建一个新的IAM 策略,其中包含访问密钥和秘密密钥,仅允许访问我们的存储桶。保存生成的凭据以供下一步使用。

我们可以使用 MinIO 客户端处理任何 S3 兼容存储。接下来让我们使用我们创建的 S3 存储桶名称以及我们下载的凭据添加一个别名

mc alias set s3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 --api S3v4

使用mc mirror将数据从 S3 复制到 MinIO

mc mirror s3/mybucket destminio/mydata

根据数据量、网络速度和存储桶数据所在区域的物理距离,镜像所有数据可能需要几分钟或更长时间。当 mc 完成所有对象的复制时,您将看到一条消息。

硬盘文件系统

对于下一组工具,我们编写了专用脚本来满足我们需要满足的一些非标准边缘案例数据迁移要求。其中之一是从 HDFS 和 Hadoop 迁移。许多企业在 Hadoop 中存储了如此多的数据,以至于不可能忽略它并重新开始使用云原生平台。将该数据传输到更现代(和云原生)的东西(如 MinIO)并以这种方式运行您的 ETL 和其他流程更为可行。设置起来相当简单。

core-site.xml创建一个名为以下内容的文件

<configuration>
  <property>
    <name>fs.s3a.path.style.access</name>
    <value>true</value>
  </property>
  <property>
    <name>fs.s3a.endpoint</name>
    <value>https://minio:9000</value>
  </property>
  <property>
    <name>fs.s3a.access.key</name>
    <value>minio-sample</value>
  </property>
  <property>
    <name>fs.s3a.secret.key</name>
    <value>minio-sample123</value>
  </property>
</configuration>

设置以下环境变量

export HDFS_SOURCE_PATH=hdfs://namenode:8080/user/minio/testdir
export S3_DEST_PATH=s3a://mybucket/testdir

下载以下文件,chmod +x 并运行

curl -LSs -o https://github.com/minio/hdfs-to-minio/blob/master/hdfs-to-minio.sh
chmod +x hdfs-to-minio.sh
./hdfs-to-minio.sh

如果您多年来一直在 Hadoop 中存储数据,那么此过程可能需要几个小时。如果它在生产集群上,那么我们建议在维护时段的下班时间迁移数据,以最大限度地减少在镜像数据时任何性能下降对 Hadoop 集群的影响。

有关从 HDFS 迁移到 MinIO 的更多详细信息,请参阅此GitHub Repo,我们还有一篇博客文章,从 HDFS 迁移到对象存储

医疗保健计划

我们之前写了一篇关于Hitachi Content Platform以及如何将数据迁移到 MinIO 集群的精彩博文。我建议阅读博客文章以获取全部详细信息,但症结如下。

配置好必要的 HCP 集群和输入文件后,下载迁移工具并运行以下命令开始迁移过程

$ hcp-to-minio migrate --namespace-url https://finance.europe.hcp.example.com
--auth-token "HCP bXl1c2Vy:3f3c6784e97531774380db177774ac8d"
--host-header "s3testbucket.sandbox.hcp.example.com"
--data-dir /mnt/data
--bucket s3testbucket
--input-file /tmp/data/to-migrate.txt


此博客文章中提供了更多详细信息

Ceph

最后但同样重要的是,我们一直把大象留在房间里直到最后。尽管老化,但 Ceph 是一种流行的数据存储,它有一个 S3 兼容的 API。它被其他 Kubernetes 项目用作对象存储的后端,例如 Rook。然而,Ceph 是一个难以设置和运行的庞然大物。因此,人们很自然地希望将他们的数据转移到更简单、更易于维护且性能更高的地方。

从 Ceph 复制数据有两种方法

与S3类似,由于Ceph有S3兼容的API,你可以给MinIO Client添加一个别名

mc alias set ceph http://ceph_host:port cephuser cephpass

然后您可以使用mc mirror将数据复制到您的 MinIO 集群

mc mirror ceph/mydata destminio/mydata

我们建议您运行mc mirror带有--watch标志的命令以持续监视对象并将它们同步到 MinIO。

立即将您的数据迁移到 MinIO!

只有几个示例可以向您展示将数据迁移到 MinIO 是多么容易。无论您使用的是较旧的遗留协议(例如 NFS)还是最新最好的协议(例如 S3),MinIO 都在这里为您提供支持。

在这篇文章中,我们详细介绍了如何从文件系统和其他数据存储(例如 NFS、文件系统、GlusterFS、HDFS、HCP,以及最后但并非最不重要的 Ceph)迁移。无论针对它运行的技术栈如何,后端 MinIO 都提供了一个高性能、持久、安全、可扩展但简单的软件定义对象存储解决方案。

如果您有任何问题,请随时在Slack上联系我们


上一篇 下一篇