Note:

Traslado de datos a OCI Cloud Storage Services mediante Rclone

Introducción

Este es el tutorial 2 de una serie de cuatro tutoriales en los que se muestran varias formas de migrar datos a los servicios de almacenamiento en la nube de Oracle Cloud Infrastructure (OCI). La serie está configurada para que pueda revisar el Tutorial 1: Uso de herramientas de migración para mover datos a los servicios de almacenamiento en la nube de OCI para obtener una amplia comprensión de las distintas herramientas y, a continuación, continuar con los tutoriales o documentos relacionados relevantes para sus necesidades de migración. Este tutorial se centrará en el uso de Rclone para migrar datos a los servicios de almacenamiento en la nube de OCI.

OCI proporciona a los clientes recursos informáticos de alto rendimiento y opciones de almacenamiento en la nube de bajo costo. A través del almacenamiento local, de objetos, de archivos, de bloques y de archivos bajo demanda, Oracle aborda los requisitos y casos de uso de la carga de trabajo de almacenamiento de claves.

Los servicios de almacenamiento en la nube de OCI ofrecen opciones de almacenamiento en la nube rápidas, seguras y duraderas para todas las necesidades de su empresa. A partir de las opciones de alto rendimiento, como OCI File Storage con el servicio Lustre y OCI Block Volumes; sistemas de archivos de escala de exabytes totalmente gestionados desde el servicio OCI File Storage con destinos de montaje de alto rendimiento; hasta OCI Object Storage altamente duradero y escalable. Nuestras soluciones pueden satisfacer sus demandas, desde aplicaciones de alto rendimiento como cargas de trabajo de IA/AA hasta lagos de datos a escala de exabytes.

Rclone es una utilidad de línea de comandos de código abierto para migrar datos a la nube o entre proveedores de almacenamiento en la nube. Rclone se puede utilizar para realizar una migración puntual, así como la sincronización periódica entre el almacenamiento de origen y destino. Rclone puede migrar datos desde y hacia el almacenamiento de objetos, el almacenamiento de archivos, las unidades montadas y entre 70 tipos de almacenamiento admitidos. OCI Object Storage está soportado de forma nativa como proveedor de backend de Rclone. Los procesos de clonación se pueden ampliar y reducir para aumentar el rendimiento de la transferencia mediante las opciones de parámetros.

Determina la cantidad de datos que se deben migrar y el tiempo de inactividad disponible para la transición a la nueva plataforma de almacenamiento de OCI. Las migraciones por lotes son una buena opción para desglosar la migración en incrementos gestionables. Las migraciones por lotes le permitirán programar el tiempo de inactividad de aplicaciones específicas en diferentes ventanas. Algunos clientes tienen la flexibilidad de realizar una migración única durante un período de mantenimiento programado de 2 a 4 días. OCI FastConnect se puede utilizar para crear una conexión dedicada y privada entre OCI y su entorno, con velocidades de puerto de 1G a 400G para acelerar el proceso de transferencia de datos. OCI FastConnect se puede integrar con soluciones de partners como Megaport y ConsoleConnect para crear una conexión privada a su centro de datos o interconexión de nube a nube para mover los datos más directamente de otro proveedor en la nube al servicio de almacenamiento en la nube de OCI. Para obtener más información, consulte la integración de FastConnect con Megaport Cloud Router.

Público Objetivo

DevOps ingenieros, desarrolladores, administradores y usuarios de OCI Cloud Storage, responsables de TI, usuarios avanzados de OCI y administradores de aplicaciones.

Objetivo

Descubra cómo utilizar Rclone para copiar y sincronizar datos en los servicios de almacenamiento en la nube de OCI.

Requisitos

Visión General de Rclone y Términos Básicos

Rclone es una herramienta de migración útil debido a los numerosos protocolos y proveedores de nube que soporta y a la facilidad de configuración. Es una buena herramienta de migración de propósito general para cualquier tipo de juego de datos. Rclone funciona especialmente bien para juegos de datos que se pueden dividir en lotes para escalar horizontalmente en los nodos para una transferencia de datos más rápida.

Rclone se puede utilizar para migrar:

Comandos e indicadores de clonación:

Ejemplos de uso de clonación

Migrar un gran número de archivos mediante Rclone

Sincronización de clonación por directorio. Si va a migrar decenas de millones de archivos/objetos, es importante asegurarse de que los directorios/prefijos estén divididos en unos 10 000 archivos/objetos o menos por directorio. Esto es para evitar que Rclone use demasiada memoria y luego se bloquee. Muchos clientes con un recuento alto (100's de millones o más) de archivos pequeños a menudo se encuentran con este problema. Si todos los archivos están en un solo directorio, divídalos primero.

  1. Ejecute el siguiente comando para obtener una lista de archivos en el origen.

    rclone lsf --files-only -R src:bucket | sort > src
    
  2. Divida el archivo en fragmentos de 1.000 a 10.000 líneas, mediante la división. El siguiente comando de división dividirá los archivos en fragmentos de 1.000 y, a continuación, los colocará en archivos con el nombre src_##, como src_00.

    split -l 1000 --numeric-suffixes src src_
    
  3. Distribuya los archivos a varias instancias de máquina virtual para ampliar la transferencia de datos. Cada comando Rclone debe tener el siguiente aspecto:

    rclone --progress --oos-no-check-bucket --no-traverse --transfers 500 copy remote1:source-bucket remote2:dest-bucket --files-from src_00
    

    Como alternativa, se puede utilizar un bucle for simple para iterar a través de las listas de archivos generadas a partir del comando split. Durante las pruebas con ~270 000 archivos en un solo cubo, vimos que los tiempos de copia mejoraban 40x, el kilometraje puede variar.

    Nota: La división de los archivos por estructura de directorios o mediante la utilidad de división es una forma importante de optimizar las transferencias.

Uso de Rclone, OKE y fpart juntos para mover datos de sistemas de archivos a OCI Object Storage

Se pueden utilizar varios pods de Kubernetes para escalar horizontalmente la transferencia de datos entre sistemas de archivos y almacenamiento de objetos. La paralelización acelera las transferencias de datos a sistemas de almacenamiento con una latencia relativamente alta y un alto rendimiento. El enfoque que combina estructuras de directorio de particiones Rclone, OKE y fpart en varios fragmentos y ejecuta la transferencia de datos en paralelo en contenedores, ya sea en el mismo nodo de cálculo o en varios nodos. La ejecución en varios nodos agrega el rendimiento de la red y la potencia de cálculo de cada nodo.

Realice los pasos:

  1. Identifique un host que será su host de operador fpsync que tenga acceso a los datos de origen de migración y Rclone esté instalado.

  2. Ejecute el siguiente comando para instalar 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. Cree una política de OCI IAM para que el host de operador fpsync gestione el cluster de OKE.

    Para ello se puede utilizar la siguiente política. Se puede configurar un permiso más granular para lograr el requisito mínimo básico para controlar los pods.

    Allow dynamic-group fpsync-host to manage cluster-family in compartment storage
    
  4. Configure el archivo kubeconfig para tener acceso al cluster de OKE. Para obtener más información, consulte Configuración del acceso local a los clusters.

  5. Instale y aplique parches a fpart y fpsync. El parche fpsync es necesario para ejecutar Rclone o rsync en paralelo para escalar horizontalmente la transferencia de datos. La fpsync que viene con el paquete fpart no soporta pods de Rclone o Kubernetes, se necesita un parche para admitir estas herramientas.

    Ejecute el siguiente comando para realizar la instalación en 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. Cree la imagen de contenedor.

    La especificación de compilación de imagen de docker disponible en rclone-rsync-image se puede utilizar para crear la imagen de contenedor. Una vez creada la imagen, se debe cargar en un registro al que se pueda acceder desde el cluster de 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>
    

    Se mantiene una copia de la imagen en fra.ocir.io/fsssolutions/rclone-rsync:latest. El directorio de ejemplo contiene algunos archivos de salida de ejemplos.

  7. Ejecute k-fpsync. La fpsync con parches (k-fpsync) puede particionar el sistema de archivos de origen y escalar horizontalmente la transferencia utilizando varios pods de Kubernetes. La regla anti-afinidad del pod de Kubernetes está configurada para preferir nodos que no tengan ningún pod de trabajador de transferencia en ejecución. Esto ayuda a utilizar el ancho de banda en los nodos de forma eficaz para optimizar el rendimiento. Para obtener más información, consulte Assigning Pods to Nodes.

    Monte el sistema de archivos de origen en el host del operador fpart y cree un directorio compartido al que accederán todos los pods. Este es el directorio donde se guardan todos los archivos log y los archivos de partición.

    El siguiente comando transfiere datos del sistema de archivos /data/src al cubo de OCI Object Storage rclone-2. Iniciará 2 pods a la vez para transferir la partición del sistema de archivos creada por 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
    

    Nota: Los logs de la ejecución se mantienen en el directorio run-ID, en el siguiente ejemplo se encuentran en /data/fpsync/{Run-Id}/log directory. Las salidas de ejemplo se proporcionan en el directorio de ejemplo.

(Opcional) Entornos de prueba

Las recomendaciones se realizan en función de las pruebas y las interacciones con los clientes.

Nota: Se ejecutan desde el script de copia masiva, se incluyen los resultados os sync y s5cmd para proporcionar más información sobre el rendimiento. Obtenga más información sobre el uso del script de copia en bloque desde aquí: Uso de las utilidades de Python de Oracle Cloud Infrastructure Object Storage para operaciones en bloque. Para obtener más información sobre el uso de os sync y s5cmd, consulte Tutorial 3: Movimiento de datos a OCI Cloud Storage Services mediante OCI Object Storage Sync y S5cmd.

Entorno de Prueba 1:

1 instancia de VM VM.Standard.E4.Flex, 1 OCPU, 1Gbps ancho de banda de red, 16 GB de memoria. Para simular la migración local a OCI, copie datos de PHX NFS a IAD.

Juegos de Datos

Entorno de Prueba 2:

Instancias de VM: se han utilizado 2 instancias de VM para cada prueba, hemos utilizado VM.Standard.E4.Flex con 24 OCPU, 24Gbps ancho de banda de red y 384 GB de memoria. Oracle Linux 8 se utilizó para las pruebas de Linux.

Juegos de datos utilizados en las pruebas: 14 directorios principales con los siguientes tamaños y recuentos de archivos.

Directorio de juego de datos Tamaño Recuento de Archivos Tamaño de cada archivo
Directorio 1 107.658 GiB 110.242 1 MiB
Directorio 2 1.687 GiB 110.569 15 MiB
Directorio 3 222 GiB 111 2 GiB
Directorio 4 1.265 TiB 1.295 1 GiB
Directorio 5 26.359 GiB 1.687 16 MiB
Directorio 6 105.281 MiB 26.952 4 KiB
Directorio 7 29.697 MiB 30.410 1 KiB
Directorio 8 83.124 GiB 340.488 256 KiB
Directorio 9 21.662 GiB 354.909 64 KiB
Directorio 10 142.629 GiB 36.514 4 MiB
Directorio 11 452.328 MiB 57.898 8 MiB
Directorio 12 144 GiB 72 2GiB
Directorio 13 208.500 GiB 834 256 MiB
Directorio 14 54.688 GiB 875 64 MiB

Nota:

Método De Tiempo Comando Indicadores/Notas
s5cmd PHX de archivos/NFS a IAD de objetos 54m41.814s copy --numworkers 74
sincronización de sistema operativo PHX de archivos/NFS a IAD de objetos 65m43.200s NA --parallel-operations-count 50
rclone PHX de archivos/NFS a IAD de objetos 111m59.704s copy --oos-no-check-bucket --no-check-dest --ignore-checksum --oos-disable-checksum --transfers 50
rclone PHX de objeto a IAD de objeto 28m55.663s copy --oos-no-check-bucket --no-check-dest --ignore-checksum --oos-disable-checksum --transfers 400, el mismo comando se ejecuta en 2 VM para una simultaneidad de 800 transferencias
Script de copia masiva de python PHX de objeto a IAD de objeto 25m43.715s Por defecto 1 máquina virtual, 50 trabajadores, 100 000 archivos en cola a la vez

Los comandos s5cmd y os sync pasan bien del sistema de archivos/NFS al almacenamiento de objetos. El script de copia en bloque solo realiza transferencias de un bloque a otro y no se ha probado para la migración NFS.

Solo rclone y el script de copia en bloque de python pueden realizar transferencias de bloque a bloque entre regiones, por lo que el resto de herramientas no se han probado. El script de copia en bloque de python funciona mejor en los datos de cubo a cubo entre regiones, pero solo es compatible con OCI Object Storage, mientras que rclone soporta muchos backends y proveedores de nube.

Se realizaron pequeñas pruebas con rclone para transferir datos de Microsoft Azure Blob Storage, Amazon Simple Storage Service (Amazon S3) y Google Cloud Platform Cloud Storage a OCI Object Storage a fin de verificar que las herramientas funcionan para este tipo de transferencias. Para obtener más información, consulte Migración de datos al almacenamiento de objetos en la nube mediante Rclone.

Entorno de Prueba 3:

Instancias de VM: se han utilizado 1-2 instancias de VM para cada prueba, hemos utilizado VM.Standard.E4.Flex con 24 OCPU, 24Gbps ancho de banda de red y 384 GB de memoria. Oracle Linux 8 se utilizó para las pruebas de Linux. Todas las pruebas fueron de cubo a cubo.

Tamaño Total Recuento de Archivos Rango de tamaño de archivo
7.74 TiB 1.000.000 30 MiB
Método De Tiempo Comando Indicadores Notas:  
rclone IAD de objeto a objeto -> IAD 18h39m11.4s copy --oos-no-check-bucket --fast-list --no-traverse --transfers 500 --oos-chunk-size 10Mi 1 VM, muy lenta debido al alto recuento de archivos y la lista de llamadas al origen  
rclone IAD de objeto a objeto -> IAD 55m8.431s copy --oos-no-check-bucket --no-traverse --transfers 500 --oos-chunk-size 10Mi --files-from <file> 2 máquinas virtuales, 500 transferencias por máquina virtual, lista de objetos/archivos alimentados con 1.000 archivos a la vez, evita la enumeración en el origen y el destino y mejora el rendimiento  
Script de copia masiva de python IAD de objeto a objeto -> IAD 28m21.013s NA Por defecto 1 máquina virtual, 50 trabajadores, 100 000 archivos en cola a la vez  
Script de copia masiva de python IAD de objeto a objeto -> IAD NA NA Por defecto 2 máquinas virtuales, 50 trabajadores por máquina virtual, 100 000 archivos en cola a la vez. Se recibieron 429 errores, el script se bloqueó y no se pudo completar.  
s5cmd IAD de objeto a objeto -> IAD 14m10.864s copy Valores por defecto (256 trabajadores) 1 Máquina virtual NA
s5cmd IAD de objeto a objeto -> IAD 7m50.013s copy Valores por Defecto 2 máquinas virtuales, 256 trabajadores cada una Se ejecuta casi la mitad del tiempo como 1 VM
s5cmd IAD de objeto a objeto -> IAD 3m23.382s copy --numworkers 1000 1 VM, 1000 trabajadores En varias pruebas, encontramos que esta era la ejecución óptima para este juego de datos con s5cmd
rclone IAD de objeto a objeto -> PHX 184m36.536s copy --oos-no-check-bucket --no-traverse --transfers 500 --oos-chunk-size 10Mi --files-from <file> 2 máquinas virtuales, 500 transferencias por máquina virtual, lista de objetos/archivos alimentados con 1.000 archivos a la vez  
Script de copia masiva de python IAD de objeto a objeto -> PHX 35m31.633s NA Por defecto 1VM, 50 trabajadores, 100 000 archivos en cola a la vez  

El comando s5cmd se ejecuta mejor de forma consistente para el recuento de archivos grandes y los archivos pequeños. s5cmd está limitado porque solo puede realizar copias de cubo a cubo en el mismo arrendamiento y en la misma región.

Observe grandes mejoras en rclone una vez que los archivos se alimentan del comando y de la ampliación a otra VM. Rclone puede funcionar más lento que otras herramientas, es la más versátil en las diversas plataformas que soporta y los tipos de migraciones que puede realizar.

La API de Python de copia masiva de OCI Object Storage solo puede utilizar la API nativa de OCI CopyObject y solo puede obtener una simultaneidad de 50 trabajadores antes de ser limitada.

Las pruebas de IAD a PHX solo se realizaron en lo que funcionó mejor en IAD a IAD y las pruebas problemáticas no se volvieron a ejecutar. s5cmd no se ha ejecutado para IAD en PHX porque solo puede realizar copias de cubo a cubo en la misma región.

Pasos Siguientes

Vaya a los tutoriales relacionados relevantes para sus necesidades de migración. Para mover datos a los servicios de almacenamiento en la nube de OCI:

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.