注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
使用 Rclone 将数据迁移到 OCI 云存储服务
简介
这是四个教程系列的教程 2,其中介绍了将数据迁移到 Oracle Cloud Infrastructure (OCI) 云存储服务的各种方法。该系列的设置使您可以查看教程 1:使用迁移工具将数据移动到 OCI 云存储服务,以广泛了解各种工具,然后转到与您的迁移需求相关的相关教程或文档。本教程重点介绍如何使用 Rclone 将数据迁移到 OCI 云存储服务。
OCI 为客户提供高性能计算和低成本的云存储选件。通过按需本地存储、对象存储、文件存储、块存储和归档存储,Oracle 可满足关键存储负载要求和用例。
OCI 云存储服务提供快速、安全、持久的云存储选项,可满足您的所有企业需求。从高性能选件开始,例如带 Lustre 的 OCI 文件存储和 OCI 块存储卷服务;从具有高性能装载目标的 OCI 文件存储服务到具有高持久性和可扩展性的 OCI 对象存储的全托管艾字节级文件系统。我们的解决方案可以满足您的需求,从性能密集型应用(例如 AI/ML 工作负载)到超字节级数据湖。
Rclone 是一个开源命令行实用程序,用于将数据迁移到云或在云存储供应商之间迁移。Rclone 可用于在源存储和目标存储之间执行一次性迁移以及定期同步。Rclone 可以将数据迁移到对象存储、文件存储、挂载的驱动器以及 70 种支持的存储类型,也可以从这些存储类型迁移数据。OCI Object Storage 原生支持作为 Rclone 后端提供程序。可以纵向扩展和纵向扩展克隆进程,以使用参数选项提高传输性能。
确定需要迁移的数据量,以及切换到新 OCI 存储平台的停机时间。批量迁移是将迁移细分为可管理增量的一个不错选择。通过批量迁移,您可以跨不同窗口为特定应用程序安排停机时间。一些客户可以在 2-4 天内灵活地在安排的维护窗口中执行一次性迁移。OCI FastConnect 可用于在 OCI 与您的环境之间创建专用连接,端口速度从 1G 到 400G,从而加快数据传输过程。OCI FastConnect 可与 Megaport 和 ConsoleConnect 等合作伙伴解决方案集成,以创建与数据中心或云到云互连的专用连接,从而更直接地将数据从其他云供应商迁移到 OCI 云存储服务。有关详细信息,请参阅 FastConnect 与 Megaport Cloud Router 的集成。
目标读者
DevOps 工程师、开发人员、OCI 云存储管理员和用户、IT 管理人员、OCI 超级用户和应用管理员。
目标
了解如何使用 Rclone 将数据复制并同步到 OCI 云存储服务。
-
使用 Rclone 将文件系统数据(本地、NAS、云托管)迁移到 OCI 对象存储。
-
将数据从其他云对象或 blob 存储迁移到 OCI 对象存储。
-
使用 Oracle Cloud Infrastructure Kubernetes Engine (OKE) 上的 Rclone 将数据从 OCI File Storage 迁移到 OCI Object Storage。
先决条件
-
OCI 账户。
-
OCI 上的虚拟机 (VM) 实例,用于部署迁移工具或系统,您可以在其中部署和使用迁移工具。
-
Oracle Cloud Infrastructure 命令行界面 (Command Line Interface,OCI CLI) 随工作配置文件一起安装在名为
.oci
的子目录中的主目录中。有关更多信息,请参见 Setting up the Configuration File 。 -
访问 OCI 对象存储桶。
-
OCI 中的用户有权使用 OCI Object Storage,有权管理存储桶和对象,或至少管理 1 个存储桶或隔间的 Object-family。有关更多信息,请参见 Common Policies 和 Policy Reference 。
-
创建、导出和装载 OCI 文件存储的用户权限,或者访问已在 VM 上装载的 OCI 文件存储装载目标,或者用于向其复制数据的其他 NFS 装载或本地文件系统。有关更多信息,请参见 Manage File Storage Policy 。
-
熟悉在 Mac OS、Linux、Berkeley Software Distribution (BSD) 或 Windows PowerShell、命令提示符或 bash 上使用终端/ shell 接口。
-
熟悉在 Linux 系统上安装软件,对 Kubernetes 有一定经验或了解。
-
具备 Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 的基本知识,并与动态组中的 Ubuntu 主机一起使用。有关更多信息,请参见 Managing Dynamic Groups 。
-
查看将数据迁移到 OCI 云存储的迁移基础知识以安装 Rclone 和其他迁移工具。
-
要了解我们可以使用的迁移工具,请参阅教程 1:使用迁移工具将数据迁移到 OCI 云存储服务。
Rclone 和基本术语概览
Rclone 是一个有用的迁移工具,因为它支持许多协议和云提供商,并且易于配置。它对于任何类型的数据集都是一个很好的通用迁移工具。Rclone 尤其适用于可以拆分成批处理的数据集,以跨节点横向扩展,从而加快数据传输速度。
Rclone 可用于迁移:
-
文件系统数据(OCI 文件存储、OCI 块存储、带 Lustre 的 OCI 文件存储、内部部署文件系统和内部部署 NFS)到其他文件系统存储类型以及目标存储(包括 OCI 对象存储)。
-
受支持的云提供商提供的对象存储至 OCI 对象存储,以及 OCI 对象存储提供的对象存储。
Rclone 命令和标志:
-
了解克隆性能
Rclone 是用于在文件系统数据、其他云提供商和 OCI 云存储服务之间同步或复制文件的理想通用工具。性能取决于您可以纵向扩展和横向扩展的程度。我们建议您在迁移系统上使用示例迁移集运行各种测试,以确定何时达到网络带宽阈值。
例如,源存储桶有 10 个文件夹/前缀,每个文件夹/前缀大约有 1TB。您可以将迁移拆分为 2 个具有大型 CPU/RAM 容量的 VM,并同时从两个 VM 触发多个 Rclone 复制进程。根据每个文件夹的拓扑和计算容量,可以调整 Rclone 参数以提高传输速度。
您可以从在 2 个 VM 上运行以下命令开始,然后调整传输计数和检查器计数,直到在每个 VM 上使 NIC 饱和为止。
rclone copy --progress --transfers 10 --checkers 8 --no-check-dest aws_s3_virgina:/source_bucket_name/folder1 iad_oss_native:/destination_bucket_name/folder1 rclone copy --progress --transfers 50 --checkers 8 --no-check-dest aws_s3_virgina:/source_bucket_name/folder2 iad_oss_native:/destination_bucket_name/folder2
-
CPU、内存和网络带宽更高的系统或 VM 实例可以并行运行更多文件传输和检查器。利用更多资源扩展至系统可实现更快的性能。
-
如果您的数据可以根据结构拆分成多个批,则还可以在多个系统或 VM 实例上运行 Rclone 以进行横向扩展。
我们建议向上和向外扩展以提高 Rclone 性能。我们的测试包括 2 个 VM,用于并行运行 Rclone 传输以扩展。如果数据集较大,您可能希望使用多达 4 台计算机,甚至使用裸金属 (BM) 实例。
-
-
克隆复制和同步命令
-
Rclone copy 命令将源文件或对象复制到目标。它将跳过源和目标上相同的文件,按大小和修改时间或 md5sum 进行测试。复制命令不会从目标中删除文件。
-
Rclone sync 命令可将源与目标同步,同时跳过相同的文件。将修改目标以匹配源,这意味着将删除与源不匹配的文件。
注:使用同步时要小心,并且仅当希望目标看起来与源完全相同时才使用同步。如果只想将新文件复制到目标,请使用 copy 命令。
-
-
使用右克隆命令行标志
有几个 Rclone 命令行标志可以与 Rclone 一起使用,这些标志会影响数据迁移的速度。了解其中一些标志如何工作以获得最佳的数据传输吞吐量非常重要。
-
--no-traverse
:这仅适用于复制命令,不会遍历目标文件系统。此标志可节省时间,因为它不会在目标上执行列表以确定要复制的文件。它将一次检查一个文件,以确定是否需要复制它。逐一操作可能看起来很慢,但当您有非常少的文件/对象要复制到已经存在许多文件的目标时,速度会更快。 -
--no-check-dest
:这仅适用于复制命令,不会检查或列出目标文件以确定需要复制或移动哪些文件,从而最大程度地减少 API 调用。始终传输文件。当您知道要复制源上的所有内容时,请使用此命令,无论目标上的内容是什么,或者您知道目标为空时。注:使用
no-traverse
或no-check-dest
命令,许多用户将两者都放在命令行上,这是不必要的。- 如果目标为空或希望将所有文件从源复制到目标,则使用
no-check-dest
。 - 当您有一些非常大的文件需要迁移时,请使用
no-traverse
,在将每个文件复制到源之前,检查该文件是否在目标上当前;这可以在列表 API 调用上保存,以及复制到目标的数据量。
- 如果目标为空或希望将所有文件从源复制到目标,则使用
-
--ignore-checksum
:这将真正加快传输速度,但是 Rclone 在传输过程中不会检查数据损坏。 -
--oos-disable-checksum
:不要将 MD5 校验和与对象元数据一起存储。Rclone 在上载之前计算数据的 MD5 校验和并将其添加到对象元数据中,这非常适合数据完整性,但是在大型文件开始上载过程之前会导致延迟。 -
--transfers <int>
:并行运行的文件传输数(缺省为 4)。根据运行 rclone 的系统大小向上扩展此数字,您可以执行测试运行并增加整数,直到达到主机的最大传输速度。我们确实建议测试并提高此数量,直到您获得可接受的性能,我们看到客户将此数量提高到 64-3000 以获得所需的性能。 -
--checkers <int>
:并行运行的检查数(缺省值为 8)。要并行运行的文件检查器数量,请谨慎,因为这会耗尽服务器运行状况并导致目标上出现问题。如果系统具有非常大的内存,请将此数字以 2 为增量向上颠簸。我们在测试环境中测试此设置且具有良好结果的最大数量为 64,通常 8-10 就足够了。检查器可以位于传输号码的 25-50% 之间;当传输号码较高时,此数字往往接近 25%。注:在运行 Rclone 传输和检查器的多个主机上横向扩展时,如果出现 429 "TooManyRequests" 错误,则首先将检查器的数量降为 2,直到达到 10。如果减少检查器是不够的,您还需要减少传输的数量。
-
--progress
:这将显示传输过程中的进度。 -
--fast-list
:使用递归列表(如果可用);使用更多内存,但事务处理/API 调用较少。在嵌套目录中具有适量文件时,这是一个很好的选项。不要与no-traverse
或no-check-dest
一起使用,因为它们是相反的标志。可与 copy 或 sync 命令一起使用。 -
--oos-no-check-bucket
:当您知道存储桶存在时使用此选项,它会减少 Rclone 执行的事务处理数,它将 Rclone 设置为假定存储桶存在并开始将数据移动到其中。 -
--oos-upload-cutoff
:大于此大小的文件将以块的形式上载,默认值为 200MiB。 -
--oos-chunk-size
:上载大于上载截止设置的文件或大小未知的文件时,将使用此块大小将其作为多部分上载进行上载。当上载已知大小的大文件以低于 10,000 个块限制时,克隆将自动增加块大小。默认值为 5MiB。 -
--oos-upload-concurrency <int>
:这用于多部分上载,是并发上载的块数。如果您通过高速链接上载少量大文件,并且这些上载未充分利用您的带宽,则增加此值可能有助于加快传输速度。默认值为 8,如果这不是利用带宽缓慢增加以提高带宽使用率。注:使用以下参数时,多部分上载将使用额外的内存:
--transfers <int>
、--oos-upload-concurrency <int>
和--oos-chunk-size
。单个部分上载不使用额外的内存。设置这些参数时,会考虑您的网络延迟,延迟越多,单个部分上载的速度就越快。
-
-
OCI 对象存储的克隆配置文件示例
[oci] type = oracleobjectstorage namespace = xxxxxxxxxxx compartment = ocid1.compartment.oc1..xxxxxxxxx region = us-ashburn-1 provider = user_principal_auth config_file = ~/.oci/config config_profile = Default
-
基本 Rclone 命令格式
rclone <flags> <command> <source> <dest>
-
运行从本地文件系统源或 OCI 文件存储源到 OCI 对象存储目标的克隆副本的示例。
rclone copy /src/path oci:bucket-name
-
运行从 OCI Object Storage 源到本地文件系统或 OCI File Storage 目标的克隆复制的示例。
rclone copy oci:bucket-name /src/path
-
运行从 S3 源到 OCI 对象存储目标的克隆副本的示例。
rclone copy s3:s3-bucket-name oci:bucket-name
注:从 AWS 迁移并使用 KMS 的服务器端加密时,请确保为 rclone 配置了
server_side_encryption = aws:kms
以避免校验和错误。有关更多信息,请参见 Rclone S3 KMS 和 Rclone S3 configuration
注: sync 命令的格式基本相同,只需用 sync 替换 copy。
-
克隆使用示例
-
示例 1:使用 Rclone 将少量小文件复制到已包含具有高文件或对象计数的数据的目标中。
rclone --progress --transfers 16 --oos-no-check-bucket --checkers 8 --no-traverse copy <source> <dest>
-
示例 2:通过多部分上载,具有较少大文件的克隆。
rclone --progress --oos-no-check-bucket --fast-list --no-traverse --transfers 8 --oos-chunk-size 10M --oos-upload-concurrency 10 --checkers 10 copy <source> <dest>
注:这些是选项
--transfers
、--oos-chunk-size
、--oos-upload-concurrency
和--checkers
的起点,您需要根据您用于迁移数据的系统上的文件/对象大小、内存和资源来调整它们。调整它们,直到您获得足够的带宽使用以优化数据迁移。如果您的系统非常小,您可能需要对这些数字进行调整以节省资源。 -
示例:3 使用 Rclone 在具有 100 Gbps NIC 的 3 台 BM 计算机上运行横向扩展,将数据集大小与具有 PB 字节数据的多部分上载混合,将存储桶不为空,将 OCI 文件存储服务用于 OCI 对象存储服务。
rclone --progress --stats-one-line --max-stats-groups 10 --fast-list --oos-no-check-bucket --oos-upload-cutoff 10M --transfers 64 --checkers 32 --oos-chunk-size 512Mi --oos-upload-concurrency 12 --oos-disable-checksum --oos-attempt-resume-upload --oos-leave-parts-on-error --no-check-dest /src/path oci:bucket
使用的其他标志:
--stats-one-line
:使统计信息适合一行。--max-stats-group
:将放弃最大最早保留在内存中的统计信息组数(默认值为 1000)。--oos-attempt-resume-upload
:尝试恢复以前为对象启动的多部分上载。--oos-leave-parts-on-error
:避免在失败时调用中止上载,将所有成功上载的部分留给手动恢复。
使用 Rclone 迁移大量文件
逐个目录进行克隆同步。如果要迁移数千万个文件/对象,请确保每个目录的目录/前缀分成大约 10,000 个文件/对象或更低的目录非常重要。这是为了防止 Rclone 使用过多的内存,然后崩溃。许多拥有大量(百万或更多)小文件的客户经常会遇到这个问题。如果所有文件都位于单个目录中,请先将其划分。
-
运行以下命令可获取源中的文件列表。
rclone lsf --files-only -R src:bucket | sort > src
-
使用拆分将文件拆分为 1,000-10,000 行的块。以下 split 命令将文件分成 1,000 个块,然后将其放入名为
src_##
的文件中,如src_00
。split -l 1000 --numeric-suffixes src src_
-
将文件分发到多个 VM 实例以横向扩展数据传输。每个 Rclone 命令应如下所示:
rclone --progress --oos-no-check-bucket --no-traverse --transfers 500 copy remote1:source-bucket remote2:dest-bucket --files-from src_00
或者,可以使用简单 for 循环迭代通过 split 命令生成的文件列表。在单个存储桶中测试约 270,000 个文件时,我们看到复制时间提高了 40x,您的里程可能会有所不同。
注:按目录结构或使用拆分实用程序拆分文件是优化传输的一个重要方法。
将 Rclone、OKE 和 fpart 一起使用,将数据从文件系统移动到 OCI 对象存储
可以使用多个 Kubernetes 云池来横向扩展文件系统与对象存储之间的数据传输。并行化可加快向延迟相对较高且吞吐量的存储系统传输数据的速度。该方法将 Rclone、OKE 和 fpartition 目录结构组合到多个块中,并在同一计算节点上或多个节点上的容器上并行运行数据传输。在多个节点上运行会聚合每个节点的网络吞吐量和计算能力。
-
文件系统分区器 (Filesystem partitioner,Fpart) 是可用于对目录结构进行分区的工具。它可以将 rsync、tar 和 Rclone 等工具与文件系统分区并行运行,并且彼此独立。我们将 fpart 与 Rclone 一起使用。
-
fpsync 是使用 fpart 并行运行传输工具(rsync、Rclone)的包装程序脚本。
fpsync
命令从 fpsync 操作员主机运行。fpsync 工具还具有使用单独 worker 节点的选项。修改后的 fpsync 支持 Rclone 和 Kubernetes pod。 -
kubectl 管理 Kubernetes 作业。
执行相应步骤:
-
确定将作为 fpsync 操作员主机的主机,该主机可以访问迁移源数据并安装 Rclone。
-
运行下面的命令以安装 kubectl。
# curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" # chmod 755 kubectl # cp -a kubectl /usr/bin
-
为 fpsync 操作员主机创建 OCI IAM 策略以管理 OKE 集群。
以下策略可用于此目的。可以配置更细粒度的权限,以达到控制云池的最低要求。
Allow dynamic-group fpsync-host to manage cluster-family in compartment storage
-
设置
kubeconfig
文件以有权访问 OKE 群集。有关更多信息,请参见 Setting Up Local Access to Clusters 。 -
安装并修补 fpart 和 fpsync。fpsync 修补程序需要并行运行 Rclone 或 rsync 以扩展数据传输。fpart 软件包随附的 fpsync 不支持 Rclone 或 Kubernetes pod,需要修补程序来支持这些工具。
在 Ubuntu 上运行以下命令进行安装。
# apt-get install fpart # git clone https://github.com/aboovv1976/fpsync-k8s-rclone.git # cd fpsync-k8s-rclone/ # cp -p /usr/bin/fpsync /usr/bin/k-fpsync # patch /usr/bin/k-fpsync fpsync.patch
-
构建容器映像。
rclone-rsync-image
中提供的 docker 映像构建规范可用于构建容器映像。构建映像后,应将其上载到可从 OKE 集群访问的注册表。# rclone-rsync-image # docker build -t rclone-rsync . # docker login # docker tag rclone-rsync:latest <registry url/rclone-rsync:latest> # docker push <registry url/rclone-rsync:latest>
图像的副本保存在
fra.ocir.io/fsssolutions/rclone-rsync:latest.
中示例目录包含一些示例输出文件。 -
运行 k-fpsync。打补丁的 fpsync (k-fpsync) 可以对源文件系统进行分区,并使用多个 Kubernetes pod 横向扩展传输。Kubernetes pod 反关联性规则配置为首选没有任何正在运行的传输 worker pod 的节点。这有助于有效地利用节点上的带宽来优化性能。有关更多信息,请参见 Assigning Pods to Nodes 。
将源文件系统挂载到 fpart 操作员主机上,并创建一个将由所有 pod 访问的共享目录。这是保存所有日志文件和分区文件的目录。
以下命令将数据从文件系统
/data/src
传输到 OCI Object Storage 存储桶 rclone-2。它一次将启动 2 个 pod,以传输 fpart 创建的文件系统分区。# mkdir /data/fpsync # PART_SIZE=512 && ./k-fpsync -v -k fra.ocir.io/fsssolutions/rclone-rsync:latest,lustre-pvc -m rclone -d /data/fpsync -f $PART_SIZE -n 2 -o "--oos-no-check-bucket --oos-upload-cutoff 10Mi --multi-thread-cutoff 10Mi --no-check-dest --multi-thread-streams 64 --transfers $PART_SIZE --oos-upload-concurrency 8 --oos-disable-checksum --oos-leave-parts-on-error" /data/src/ rclone:rclone-2
注:运行的日志保存在
run-ID
目录中,在以下示例中,它们保存在/data/fpsync/{Run-Id}/log directory
中。示例输出在样例目录中提供。
(可选)测试环境
根据测试和客户互动提供建议。
注:包含从批量复制脚本运行的结果
os sync
和s5cmd
,以提供有关性能的更多信息。在此处了解如何使用批量复制脚本:使用 Oracle Cloud Infrastructure Object Storage Python Utilities for Bulk Operations 。有关使用os sync
和s5cmd
的更多信息,请参见教程 3:使用 OCI Object Storage Sync 和 S5cmd 将数据迁移到 OCI Cloud Storage Services 。
测试环境 1:
1 个 VM 实例 VM.Standard.E4.Flex
、1 个 OCPU、1Gbps 网络带宽、16GB 内存。要模拟从 PHX NFS 到 IAD 的内部部署到 OCI 迁移,请复制数据。
数据集
-
数据集 1:
总大小 文件计数 文件大小范围 3TB 3 1TB 方法 至 - 自 Time 命令 标记 os 同步 将 PHX 文件转换为对象 IAD 123m17.102s NA --parallel-operations-count 100
s5cmd 将 PHX 文件转换为对象 IAD 239m20.625s 复制 run commands.txt
,默认运行--numworkers 256
旋风 将 PHX 文件转换为对象 IAD 178m27.101s 复制 --transfers=100 --oos-no-check-bucket --fast-list --checkers 64 --retries 2 --no-check-dest
注:我们的测试显示
os sync
对此数据集运行速度最快。 -
数据集 2:
总大小 文件计数 文件大小范围 9.787GB 20,000 1MB 方法 至 - 自 Time 命令 标记 s5cmd 将 PHX 文件转换为对象 IAD 1m12.746s 复制 默认运行 --numworkers 256
os 同步 将 PHX 文件转换为对象 IAD 2m48.742s NA --parallel-operations-count 1000
旋风 将 PHX 文件转换为对象 IAD 1m52.886s 复制 --transfers=500 --oos-no-check-bucket --no-check-dest
注:我们的测试显示
s5cmd
对此数据集表现最佳。
测试环境 2:
VM 实例:每个测试使用 2 个 VM 实例,我们使用 VM.Standard.E4.Flex
和 24 个 OCPU、24Gbps 网络带宽、384GB 内存。Oracle Linux 8 用于 Linux 测试。
用于测试的数据集:具有以下文件计数和大小的 14 个主目录。
数据集目录 | 大小 | 文件计数 | 每个文件的大小 |
---|---|---|---|
目录 1 | 107.658 GiB | 110,242 | 1 MiB |
目录 2 | 1.687 GiB | 110,569 | 15 MiB |
目录 3 | 222 GiB | 111 | 2 GiB |
目录 4 | 1.265 TiB | 1,295 | 1 GiB |
目录 5 | 26.359 GiB | 1,687 | 16 MiB |
目录 6 | 105.281 MiB | 26,952 | 4 KiB |
目录 7 | 29.697 MiB | 30,410 | 1 KiB |
目录 8 | 83.124 GiB | 340,488 | 256 KiB |
目录 9 | 21.662 GiB | 354,909 | 64 KiB |
目录 10 | 142.629 GiB | 36,514 | 4 MiB |
目录 11 | 452.328 MiB | 57,898 | 8 MiB |
目录 12 | 144 GiB | 72 | 2GiB |
目录 13 | 208.500 GiB | 834 | 256 MiB |
目录 14 | 54.688 GiB | 875 | 64 MiB |
注:
- 这 14 个目录在 2 个 VM 实例之间拆分。
- 每个 VM 运行 7 个命令/进程,每个目录运行 1 个命令/进程,除非另有说明。
方法 | 至 - 自 | Time | 命令 | 标志/注释 |
---|---|---|---|---|
s5cmd | 将 PHX 文件转换为对象 IAD | 54m41.814s | 复制 | --numworkers 74 |
os 同步 | 将 PHX 文件转换为对象 IAD | 65m43.200s | NA | --parallel-operations-count 50 |
旋风 | 将 PHX 文件转换为对象 IAD | 111m59.704s | 复制 | --oos-no-check-bucket --no-check-dest --ignore-checksum --oos-disable-checksum --transfers 50 |
旋风 | 对象 PHX 到对象 IAD | 28m55.663s | 复制 | --oos-no-check-bucket --no-check-dest --ignore-checksum --oos-disable-checksum --transfers 400 ,在 2 个 VM 上运行相同的命令,可实现 800 次并发传输 |
python 批量复制脚本 | 对象 PHX 到对象 IAD | 25m43.715s | Default | 一次排队 1 个 VM、50 个工作进程、10 万个文件 |
s5cmd
和 os sync
命令优于文件系统/NFS 到对象存储。批量复制脚本仅执行存储桶到存储桶的传输,未经 NFS 迁移测试。
只有 rclone
和 python 批量复制脚本能够跨区域执行存储桶到存储桶的传输,因此没有测试其他工具。python 批量复制脚本更适合跨区域存储到存储桶的数据,但仅与 OCI 对象存储兼容,而 rclone
支持许多后端和云提供商。
使用 rclone
进行小型测试,将数据从 Microsoft Azure Blob 存储、Amazon Simple Storage Service (Amazon S3) 和 Google Cloud Platform Cloud Storage 传输到 OCI Object Storage,以验证这些类型的传输工具是否有效。有关更多信息,请参见 Move data to object storage in the cloud using Rclone 。
测试环境 3:
VM 实例:每个测试使用 1-2 个 VM 实例,我们使用 VM.Standard.E4.Flex
和 24 个 OCPU、24Gbps 网络带宽、384GB 内存。Oracle Linux 8 用于 Linux 测试。所有测试都是按时段进行的。
总大小 | 文件计数 | 文件大小范围 |
---|---|---|
7.74 TiB | 1,000,000 | 30 MiB |
方法 | 至 - 自 | Time | 命令 | 标记 | 注: | |
---|---|---|---|---|---|---|
旋风 | 对象到对象 IAD -> IAD | 18h39m11.4s | 复制 | --oos-no-check-bucket --fast-list --no-traverse --transfers 500 --oos-chunk-size 10Mi |
1 个 VM,由于文件计数较高且列出对源的调用,速度很慢 | |
旋风 | 对象到对象 IAD -> IAD | 55m8.431s | 复制 | --oos-no-check-bucket --no-traverse --transfers 500 --oos-chunk-size 10Mi --files-from <file> |
2 个 VM,每个 VM 500 次传输,对象/文件列表一次提供 1,000 个文件,阻止在源和目标上列出,并提高性能 | |
python 批量复制脚本 | 对象到对象 IAD -> IAD | 28m21.013s | NA | Default | 一次排队 1 个 VM、50 个工作进程、10 万个文件 | |
python 批量复制脚本 | 对象到对象 IAD -> IAD | NA | NA | Default | 2 个 VM,每个 VM 50 个工作进程,一次排队 10 万个文件。收到 429 个错误,脚本挂起,无法完成 | |
s5cmd | 对象到对象 IAD -> IAD | 14m10.864s | 复制 | 默认值(256 名员工) | 1 个 VM | NA |
s5cmd | 对象到对象 IAD -> IAD | 7m50.013s | 复制 | 默认值 | 2 个 VM,每个 VM 256 个 Worker | 运行时间约为 1 个 VM 的一半 |
s5cmd | 对象到对象 IAD -> IAD | 3m23.382s | 复制 | --numworkers 1000 |
1 个 VM,1000 名员工 | 在多个测试中,我们发现这是使用 s5cmd 对此数据集的最佳运行 |
旋风 | 对象到对象 IAD -> PHX | 184m36.536s | 复制 | --oos-no-check-bucket --no-traverse --transfers 500 --oos-chunk-size 10Mi --files-from <file> |
2 个 VM,每个 VM 传输 500 次,对象/文件列表一次馈送 1000 个文件 | |
python 批量复制脚本 | 对象到对象 IAD -> PHX | 35m31.633s | NA | Default | 一次排队 1 个 VM、50 个工作进程、10 万个文件 |
s5cmd
命令对于大型文件计数和小文件运行始终最佳。s5cmd
受到限制,因为它只能在同一租户和同一区域内执行存储桶到存储桶的复制。
请注意,将文件馈送到命令以及从扩展到其他 VM 后,rclone
的改进会很大。Rclone 的运行速度可能比其他工具慢,它是它支持的各种平台中最通用的,也是它可以执行的迁移类型。
OCI Object Storage Bulk Copy Python API 只能使用 OCI Native CopyObject API,而且在限制前最多只能获得 50 个工作进程的并发性。
IAD 到 PHX 的测试仅针对在 IAD 到 IAD 中最有效的测试完成,有问题的测试不会重新运行。s5cmd
未针对 IAD 到 PHX 运行,因为它只能在同一区域中执行存储桶到存储桶的复制。
后续步骤
转至与您的迁移需求相关的相关教程。要将数据迁移到 OCI 云存储服务,请执行以下操作:
-
使用 OCI Object Storage Sync 和 S5cmd,请参阅教程 3:使用 OCI Object Storage Sync 和 S5cmd 将数据迁移到 OCI Cloud Storage Services 。
-
使用 Fpsync 和 Rsync 进行文件系统数据迁移,请参阅教程 4:使用 Fpsync 和 Rsync 将数据移动到 OCI Cloud Storage Services for File System Data Migrations 。
相关链接
确认
- Authors — Melinda Centeno(OCI Object Storage 高级首席产品经理)、Vinoth Krishnamurthy(OCI File Storage 技术人员首席成员)、Aboo Valappil(OCI File and Block Storage 技术人员咨询成员)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Move Data into OCI Cloud Storage Services using Rclone
G25573-02
Copyright ©2025, Oracle and/or its affiliates.