MinIO 可以在任何设备上运行——裸机、Kubernetes、Docker、Linux 等等。组织选择运行 MinIO 在任何这些平台上托管数据,并越来越依赖多个平台来满足多种需求。底层硬件和操作系统的选择基于多种因素,主要是 MinIO 中存储的数据量以及与其他云原生软件集成、性能和安全性的要求。
我们的许多客户在裸机上运行 MinIO,而大多数客户在 Kubernetes 上运行。在 Kubernetes 编排的容器化架构中运行多个 MinIO 实例非常高效。 MinIO 客户可以在不中断的情况下推出新区域并更新服务,每个区域中运行单独的 Kubernetes 集群,并实现无共享的运营目标以实现最大的弹性和可扩展性。
客户出于多种原因转向 MinIO,包括:
由于这些不同的原因和 MinIO 可以使用和安装的环境,可以现实地假设有许多数据源已经存储了您想要进入 MinIO 的数据。
在这篇文章中,我们将回顾一些可用于从 S3、本地文件系统、NFS、Azure、GCP、Hitachi Content Platform、Ceph 等获取数据并将数据传输到 MinIO 集群中的工具,以便将数据暴露给云原生 AI /ML 和分析包。
首先,我们将在本文中使用MinIO 客户端(mc) 来实现其中的一些选项。请务必安装它并将别名设置为正在运行的MinIO Server 。
mc alias set destminio https://myminio.example.net minioadminuser minioadminpassword
当我们使用不同的方法时,我们将添加更多“源”别名。
将数据迁移到 MinIO 的大多数用例都是从安装的文件系统或 NFS 卷开始的。在这个简单的配置中,您可以使用mcmirror将数据从源同步到目标。将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。
前面我们提到, 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镜像将数据从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 仍然是一种流行的数据存储,并且它具有 S3 兼容的 API。它被其他 Kubernetes 项目用作对象存储的后端,例如 Rook。然而,Ceph 是一个难以设置和运行的庞然大物。因此,人们很自然地希望将数据转移到更简单、更易于维护且性能更高的地方。
从 Ceph 复制数据有两种方法:
存储桶复制:创建对象,但如果从源中删除该对象,则不会在目标上删除它。 https://min.io/docs/minio/linux/administration/bucket-replication.html
Mcmirror:同步对象和版本,甚至会删除不存在的对象https://min.io/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 是多么容易。无论您使用的是较旧的传统协议(例如 NFS)还是最新最好的协议(例如 S3),MinIO 都会为您提供支持。
在这篇文章中,我们详细介绍了如何从文件系统和其他数据存储(例如 NFS、文件系统、GlusterFS、HDFS、HCP 以及最后但并非最不重要的 Ceph)迁移。无论运行何种技术堆栈,后端 MinIO 都能提供高性能、耐用、安全、可扩展且简单的软件定义对象存储解决方案。
如果您有任何疑问,请随时通过Slack与我们联系!
也发布在这里。