数据迁移工具助您轻松使用 MinIO

MinIO 可以在任何地方运行 - 裸机、Kubernetes、Docker、Linux 等。组织选择运行 MinIO 将其数据托管在这些平台中的任何一个上,并且越来越多地依赖多个平台来满足多种需求。底层硬件和操作系统的选择取决于多种因素,主要是存储在 MinIO 中的数据量以及与其他云原生软件集成、性能和安全性的要求。
我们的许多客户在裸机上运行 MinIO,而大多数客户在 Kubernetes 上运行。在由 Kubernetes 编排的容器化架构中运行多个 MinIO 实例非常高效。MinIO 客户在每个区域中运行独立的 Kubernetes 集群,无缝地推出新区域并更新服务,并以无共享的运行目标为目标,以实现最大程度的弹性和可扩展性。
客户出于各种原因转向 MinIO,包括
- S3 兼容 API
- 多云云无关部署
- S3 风格的 IAM 风格的 ACL 管理
- 使用 Erasure Coding 的分布式和容错存储
- 跨多个集群的对象分层和版本控制
- 存储桶和站点到站点的复制
- 通过批处理框架进行批处理复制
- 服务器端对象和客户端数据加密
- 数据传输层网络加密
由于这些不同的原因以及 MinIO 可被利用和安装的环境,可以合理地假设存在许多您希望将其数据放入 MinIO 的数据源。
在本篇文章中,让我们回顾一些可用于将数据从 S3、本地文件系统、NFS、Azure、GCP、日立内容平台、Ceph 等中提取出来并放入 MinIO 集群中的工具,在那里它可以公开给云原生 AI/ML 和分析包。
MinIO 客户端
为了开始,我们将在本文中使用 MinIO 客户端 (mc) 用于这些选项中的几个。请确保安装它并将别名设置为您的运行 MinIO 服务器。
mc alias set destminio https://myminio.example.net minioadminuser minioadminpassword
在介绍不同的方法时,我们将添加更多“源”别名。
文件系统
将数据迁移到 MinIO 的大多数用例都从挂载的文件系统或 NFS 卷开始。在这种简单配置中,您可以使用 mc mirror 将数据从源同步到目标。将 mc mirror
视为数据同步的瑞士军刀。它免除了用户确定从源获取对象的最佳方式的负担。它支持许多源,并且基于您从中拉取的源,将使用正确的函数来启用它们。
例如,让我们从一个简单的文件系统开始,该文件系统从物理硬盘、虚拟磁盘甚至类似 GlusterFS 挂载的东西挂载。只要它是操作系统可读的文件系统,MinIO 也能读取它
假设你的对象在 /home/mydata
中,你需要运行以下命令来镜像这些对象(如果 mydata
桶不存在,你需要先创建它)。
mc mirror /home/mydata destminio/mydata
这个命令会确保不再存在于源位置的对象从目标位置删除,或者当新的对象被添加到源位置时,它们将被复制到目标位置。但是,如果你想覆盖源位置中修改过的现有对象,请传递 --overwrite
标志。
NFS
网络文件共享 (NFS) 通常用于存储不太常访问的对象或数据,因为尽管它无处不在,但通常来说,该协议在网络上的速度很慢。尽管如此,许多 ETL 和一些遗留系统使用 NFS 作为用于操作、分析、AI/ML 和其他用例的数据存储库。将这些数据存储在 MinIO 中更有意义,因为 MinIO 集群具有可扩展性、安全性、高性能,并且 MinIO 可以使用 S3 API 为云原生应用程序提供服务。
安装挂载 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
对于下一组工具,我们编写了专门的脚本,以满足我们需要满足的一些非标准边缘情况数据迁移需求。其中之一是从 HDFS 和 Hadoop 迁移。许多企业在 Hadoop 中存储了如此多的数据,以至于无法忽略它并从头开始使用云原生平台。将这些数据转移到更现代(且云原生)的东西(如 MinIO)并以这种方式运行您的 ETL 和其他流程更可行。设置起来相当简单。
创建一个名为 core-site.xml
的文件,其中包含以下内容
设置以下环境变量
下载以下文件,chmod +x 并运行它
如果您在 Hadoop 中存储数据已有几年,那么此过程可能需要几个小时。如果它在生产集群上,那么我们建议在维护窗口的非工作时间迁移数据,以最大程度地减少数据镜像时 Hadoop 集群的任何性能下降的影响。
有关从 HDFS 迁移到 MinIO 的更多详细信息,请参阅此 GitHub 存储库,我们还有一篇博客文章,从 HDFS 迁移到对象存储。
HCP
我们之前写过一篇关于 日立内容平台 以及如何将您的数据迁移到 MinIO 集群的精彩博客文章。我建议阅读博客文章以获取完整详细信息,但要点如下。
配置好必要的 HCP 集群和输入文件后,下载迁移工具 并运行以下命令以启动迁移过程
更多详细信息请参见本博客文章。
Ceph
最后但并非最不重要的一点是,我们将房间里的“大象”留到了最后。尽管已经过时,但Ceph仍然是数据存储的流行存储,它具有兼容S3的API。它被其他Kubernetes项目用作对象存储的后台,例如Rook。然而,Ceph是一个难以设置和运行的庞然大物。因此,人们自然会想要将他们的数据迁移到更简单、更容易维护且性能更高的东西。
有两种方法可以从Ceph复制数据
- 桶复制:创建对象,但如果从源中删除了对象,它不会在目标上删除它。 https://min-io.cn/docs/minio/linux/administration/bucket-replication.html
- Mc镜像:同步对象和版本,它甚至会删除不存在的对象 https://min-io.cn/docs/minio/linux/reference/minio-mc/mc-mirror.html
与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
建议您使用--watch
标志运行mc mirror
命令以持续监控对象并将它们同步到MinIO。
立即将您的数据迁移到MinIO!
这只是一些示例,用于向您展示将数据迁移到MinIO是多么容易。无论您使用的是NFS等旧的遗留协议,还是S3等最新的优秀协议,MinIO都将为您提供支持。
在本篇文章中,我们详细介绍了如何从文件系统和其他数据存储(如NFS、文件系统、GlusterFS、HDFS、HCP以及最后但并非最不重要的Ceph)进行迁移。无论使用哪种技术栈,后台MinIO都提供了一个高性能、持久、安全、可扩展且简单的软件定义对象存储解决方案。
如果您有任何问题,请随时在Slack上与我们联系!