注意:

使用 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 和基本术语概览

Rclone 是一个有用的迁移工具,因为它支持许多协议和云提供商,并且易于配置。它对于任何类型的数据集都是一个很好的通用迁移工具。Rclone 尤其适用于可以拆分成批处理的数据集,以跨节点横向扩展,从而加快数据传输速度。

Rclone 可用于迁移:

Rclone 命令和标志:

克隆使用示例

使用 Rclone 迁移大量文件

逐个目录进行克隆同步。如果要迁移数千万个文件/对象,请确保每个目录的目录/前缀分成大约 10,000 个文件/对象或更低的目录非常重要。这是为了防止 Rclone 使用过多的内存,然后崩溃。许多拥有大量(百万或更多)小文件的客户经常会遇到这个问题。如果所有文件都位于单个目录中,请先将其划分。

  1. 运行以下命令可获取源中的文件列表。

    rclone lsf --files-only -R src:bucket | sort > src
    
  2. 使用拆分将文件拆分为 1,000-10,000 行的块。以下 split 命令将文件分成 1,000 个块,然后将其放入名为 src_## 的文件中,如 src_00

    split -l 1000 --numeric-suffixes src src_
    
  3. 将文件分发到多个 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 目录结构组合到多个块中,并在同一计算节点上或多个节点上的容器上并行运行数据传输。在多个节点上运行会聚合每个节点的网络吞吐量和计算能力。

执行相应步骤:

  1. 确定将作为 fpsync 操作员主机的主机,该主机可以访问迁移源数据并安装 Rclone。

  2. 运行下面的命令以安装 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
    
  3. 为 fpsync 操作员主机创建 OCI IAM 策略以管理 OKE 集群。

    以下策略可用于此目的。可以配置更细粒度的权限,以达到控制云池的最低要求。

    Allow dynamic-group fpsync-host to manage cluster-family in compartment storage
    
  4. 设置 kubeconfig 文件以有权访问 OKE 群集。有关更多信息,请参见 Setting Up Local Access to Clusters

  5. 安装并修补 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
    
  6. 构建容器映像。

    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. 中示例目录包含一些示例输出文件。

  7. 运行 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 syncs5cmd,以提供有关性能的更多信息。在此处了解如何使用批量复制脚本:使用 Oracle Cloud Infrastructure Object Storage Python Utilities for Bulk Operations 。有关使用 os syncs5cmd 的更多信息,请参见教程 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 迁移,请复制数据。

数据集

测试环境 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

注:

方法 至 - 自 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 万个文件

s5cmdos 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 云存储服务,请执行以下操作:

确认

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心