Migre las cargas de trabajo de Apache Cassandra a Amazon Keyspaces con AWS Glue - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Migre las cargas de trabajo de Apache Cassandra a Amazon Keyspaces con AWS Glue

Creado por Nikolai Kolesnikov (AWS), Karthiga Priya Chandran (AWS) y Samir Patel (AWS)

Entorno: producción

Origen: Cassandra

Destino: Amazon Keyspaces

Tipo R: N/D

Carga de trabajo: código abierto; todas las demás cargas de trabajo

Tecnologías: análisis; migración; sin servidor; macrodatos

Servicios de AWS: AWS Glue; Amazon Keyspaces; Amazon S3; AWS CloudShell

Resumen

Este patrón le muestra cómo migrar sus cargas de trabajo actuales de Apache Cassandra a Amazon Keyspaces (para Apache Cassandra) mediante CQLReplicator en AWS Glue. Puede usar CQLReplicator en AWS Glue para minimizar el retraso en la replicación que supone la migración de sus cargas de trabajo en cuestión de minutos. También aprenderá a usar un bucket de Amazon Simple Storage Service (Amazon S3) para almacenar los datos necesarios para la migración, incluidos los archivos de configuración, los scripts y los archivos de Apache Parquet. Este patrón supone que las cargas de trabajo de Cassandra están alojadas en instancias de Amazon Elastic Compute Cloud (Amazon EC2) Compute Cloud (Amazon EC2) en una nube privada virtual (VPC).

Requisitos previos y limitaciones

Requisitos previos 

  • Clúster de Cassandra con tabla de origen

  • Tabla objetivo en Amazon Keyspaces para replicar la carga de trabajo

  • Bucket de S3 para almacenar archivos intermedios de Parquet que contienen cambios de datos graduales

  • Bucket de S3 para almacenar archivos de configuración de trabajos y scripts

Limitaciones

  • CQLReplicator en AWS Glue requiere algún tiempo para aprovisionar unidades de procesamiento de datos (DPU) para las cargas de trabajo de Cassandra. El retraso de la replicación entre el clúster de Cassandra y el espacio de claves y la tabla de destino en Amazon Keyspaces se reducirá a pocos minutos.

Arquitectura

Pila de tecnología de origen

  • Apache Cassandra

  • DataStax Servidor

  • ScyllaDB

Pila de tecnología de destino

  • Amazon Keyspaces

Arquitectura de migración

El siguiente diagrama muestra un ejemplo de arquitectura en el que un clúster de Cassandra se aloja en instancias EC2 y se distribuye en tres zonas de disponibilidad. Los nodos de Cassandra están alojados en subredes privadas.

Diagrama de arquitectura que muestra el rol de servicio personalizado, los recursos de AWS y la VPC.

En el diagrama, se muestra el siguiente flujo de trabajo:

  1. Un rol de servicio personalizado proporciona acceso a Amazon Keyspaces y al bucket de S3.

  2. Un trabajo de AWS Glue lee la configuración del trabajo y los scripts del bucket de S3.

  3. El trabajo de AWS Glue se conecta a través del puerto 9042 para leer los datos del clúster de Cassandra.

  4. El trabajo de AWS Glue se conecta a través del puerto 9142 para escribir los datos en Amazon Keyspaces.

Herramientas

Servicios y herramientas de AWS

  • La interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que permite interactuar con los servicios de AWS mediante comandos en el intérprete de comandos de línea de comandos.

  • AWS CloudShell es un shell basado en navegador que puede utilizar para administrar los servicios de AWS mediante la interfaz de línea de comandos de AWS (AWS CLI) y una gama de herramientas de desarrollo preinstaladas.

  • AWS Glue es un servicio de ETL totalmente gestionado que le permite clasificar, limpiar, enriquecer y mover datos de forma fiable entre almacenes de datos y flujos de datos.

  • Amazon Keyspaces (para Apache Cassandra) es un servicio de base de datos administrada que le permite migrar, ejecutar y escalar sus cargas de trabajo de Cassandra en la nube de AWS.

Código

El código de este patrón está disponible en el repositorio de CQLReplicator. GitHub

Prácticas recomendadas

  • Para determinar los recursos de AWS Glue necesarios para la migración, calcule el número de filas de la tabla de Cassandra de origen. Por ejemplo, 250 000 filas por 0,25 DPU (2 vCPU, 4 GB de memoria) con un disco de 84 GB.

  • Caliente previamente las tablas de Amazon Keyspaces antes de ejecutar CQLReplicator. Por ejemplo, ocho teselas de CQLReplicator (trabajos de AWS Glue) pueden escribir hasta 22 K de WCU por segundo, por lo que el objetivo debe precalentarse a entre 25 y 30 K de WCU por segundo.

  • Para habilitar la comunicación entre los componentes de AWS Glue, utilice una regla de entrada autorreferenciada para todos los puertos TCP de su grupo de seguridad.

  • Utilice la estrategia de tráfico incremental para distribuir la carga de trabajo de migración a lo largo del tiempo.

Epics

TareaDescripciónHabilidades requeridas

Cree un espacio de claves y una tabla de destino.

  1. Cree un espacio de claves y una tabla en Amazon Keyspaces.

    Para obtener más información sobre la capacidad de escritura, consulte los cálculos de unidades de escritura en la sección de información adicional de este patrón.

    También puede crear un espacio de claves mediante el Lenguaje de consultas Cassandra (CQL). Para obtener más información, consulte Crear un espacio de claves mediante CQL en la sección de información adicional de este patrón.

    Nota: después de crear la tabla, considere cambiarla al modo de capacidad bajo demanda para evitar cargos innecesarios.

  2. Para actualizar al modo de rendimiento, ejecute el siguiente script:

    ALTER TABLE target_keyspace.target_table WITH CUSTOM_PROPERTIES = { 'capacity_mode':{ 'throughput_mode':'PAY_PER_REQUEST'} }
Propietario de la aplicación, administrador de AWS, administrador de bases de datos, desarrollador de aplicaciones

Configure el controlador de Cassandra para conectarse a Cassandra.

Utilice el siguiente script dde configuración:

Datastax-java-driver { basic.request.consistency = “LOCAL_QUORUM” basic.contact-points = [“127.0.0.1:9042”] advanced.reconnect-on-init = true basic.load-balancing-policy { local-datacenter = “datacenter1” } advanced.auth-provider = { class = PlainTextAuthProvider username = “user-at-sample” password = “S@MPLE=PASSWORD=” } }

Nota: el anterior script usa el conector Spark Cassandra. Para obtener más información, consulte la configuración de referencia de Cassandra.

Administrador de base de datos

Configure el controlador de Cassandra para conectarse a Amazon Keyspaces.

Utilice el siguiente script dde configuración:

datastax-java-driver { basic { load-balancing-policy { local-datacenter = us-west-2 } contact-points = [ "cassandra.us-west-2.amazonaws.com:9142" ] request { page-size = 2500 timeout = 360 seconds consistency = LOCAL_QUORUM } } advanced { control-connection { timeout = 360 seconds } session-leak.threshold = 6 connection { connect-timeout = 360 seconds init-query-timeout = 360 seconds warn-on-init-error = false } auth-provider = { class = software.aws.mcs.auth.SigV4AuthProvider aws-region = us-west-2 } ssl-engine-factory { class = DefaultSslEngineFactory } } }

Nota: el anterior script usa el conector Spark Cassandra. Para obtener más información, consulte la configuración de referencia de Cassandra.

Administrador de base de datos

Cree un rol de IAM para el trabajo de AWS Glue.

Cree un nuevo rol de servicio de AWS denominado glue-cassandra-migration AWS Glue como entidad de confianza.

Nota: glue-cassandra-migration Debería proporcionar acceso de lectura y escritura al bucket de S3 y a Amazon Keyspaces. El bucket de S3 contiene los archivos.jar, los archivos de configuración de Amazon Keyspaces y Cassandra y los archivos Parquet intermedios. Por ejemplo, contiene las políticas administradas y AWSGlueServiceRoleAmazonS3FullAccess, yAmazonKeyspacesFullAccess.

AWS DevOps

Descargue CQLReplicator en AWS. CloudShell

Descargue el proyecto en su carpeta de inicio ejecutando el siguiente comando:

git clone https://github.com/aws-samples/cql-replicator.git cd cql-replicator/glue # Only for AWS CloudShell, the bc package includes bc and dc. Bc is an arbitrary precision numeric processing arithmetic language sudo yum install bc -y

Modifique los archivos de configuración de referencia.

Copie CassandraConnector.conf y KeyspacesConnector.conf en el ../glue/conf directorio de la carpeta del proyecto.

AWS DevOps

Inicie el proceso de migración.

El siguiente comando inicializa el entorno CQLReplicator. La inicialización implica copiar los artefactos.jar y crear un conector de AWS Glue, un bucket de S3, un trabajo de AWS Glue, el migration espacio de claves y la tabla: ledger

cd cql-replicator/glue/bin ./cqlreplicator --state init --sg '"sg-1","sg-2"' \ --subnet "subnet-XXXXXXXXXXXX" \ --az us-west-2a --region us-west-2 \ --glue-iam-role glue-cassandra-migration \ --landing-zone s3://cql-replicator-1234567890-us-west-2

Este script incluye los siguientes parámetros:

  • --sg— Los grupos de seguridad que permiten el acceso al clúster de Cassandra desde AWS Glue e incluyen la regla de entrada autorreferenciante para todo el tráfico

  • --subnet— La subred a la que pertenece el clúster de Cassandra

  • --az— La zona de disponibilidad de la subred

  • --region— La región de AWS en la que se implementa el clúster de Cassandra

  • --glue-iam-role— Los permisos de rol de IAM que AWS Glue puede asumir al llamar a Amazon Keyspaces y Amazon S3 en su nombre

  • --landing zone— Un parámetro opcional para reutilizar un bucket de S3 (si no proporciona un valor para el --landing zone parámetro, el init proceso intentará crear un nuevo bucket para almacenar los archivos de configuración, los artefactos.jar y los archivos intermedios).

AWS DevOps

Valide la implementación.

Tras ejecutar el comando anterior, la cuenta de AWS debe contener lo siguiente:

  • El trabajo de AWS Glue de CQLReplicator y el conector de AWS Glue en AWS Glue

  • El depósito S3 que almacena los artefactos

  • El espacio de claves de destino migration y la ledger tabla en Amazon Keyspaces

AWS DevOps
TareaDescripciónHabilidades requeridas

Inicie el proceso de migración.

Para utilizar CQLReplicator en AWS Glue, debe utilizar el --state run comando seguido de una serie de parámetros. La configuración precisa de estos parámetros viene determinada principalmente por sus requisitos de migración únicos. Por ejemplo, esta configuración puede variar si decide replicar los valores y las actualizaciones del tiempo de vida (TTL) o si descarga objetos que superen 1 MB a Amazon S3.

Para replicar la carga de trabajo del clúster de Cassandra a Amazon Keyspaces, ejecute el siguiente comando:

./cqlreplicator --state run --tiles 8 \ --landing-zone s3://cql-replicator-1234567890-us-west-2 \ --region us-west-2 \ --src-keyspace source_keyspace \ --src-table source_table \ --trg-keyspace taget_keyspace \ --writetime-column column_name \ --trg-table target_table --inc-traffic

El espacio de claves y la tabla de origen se encuentran source_keyspace.source_table en el clúster de Cassandra. El espacio de claves y la tabla de destino se encuentran target_keyspace.target_table en Amazon Keyspaces. El parámetro --inc-traffic ayuda a evitar que el tráfico incremental sobrecargue el clúster de Cassandra y Amazon Keyspaces con un número elevado de solicitudes.

Para replicar las actualizaciones, agréguelas --writetime-column regular_column_name a su línea de comandos. La columna normal se utilizará como fuente de la marca de tiempo de escritura.

AWS DevOps
TareaDescripciónHabilidades requeridas

Valide las filas de Cassandra migradas durante la fase de migración histórica.

Para obtener el número de filas replicadas durante la fase de relleno, ejecute el siguiente comando:

./cqlreplicator --state stats \ --landing-zone s3://cql-replicator-1234567890-us-west-2 \ --src-keyspace source_keyspace --src-table source_table --region us-west-2
AWS DevOps
TareaDescripciónHabilidades requeridas

Utilice el cqlreplicator comando o la consola AWS Glue.

Para detener el proceso de migración correctamente, ejecute el siguiente comando:

./cqlreplicator --state request-stop --tiles 8 \ --landing-zone s3://cql-replicator-1234567890-us-west-2 \ --region us-west-2 \ --src-keyspace source_keyspace --src-table source_table

Para detener el proceso de migración de forma inmediata, utilice la consola AWS Glue.

AWS DevOps
TareaDescripciónHabilidades requeridas

Elimine los recursos desplegados.

El siguiente comando eliminará el trabajo de AWS Glue, el conector, el bucket de S3 y la tabla de Keyspaces: ledger

./cqlreplicator --state cleanup --landing-zone s3://cql-replicator-1234567890-us-west-2
AWS DevOps

Solución de problemas

ProblemaSolución

Los trabajos de AWS Glue fallaron y devolvieron un error de memoria insuficiente (OOM).

  1. Cambie el tipo de trabajador (amplíe). Por ejemplo, cambie G0.25X a G.1X o G.1X aG.2X. Como alternativa, puede aumentar el número de DPUs por trabajo de AWS Glue (escalado horizontal) en CQLReplicator.

  2. Inicie el proceso de migración desde el punto en el que se interrumpió. Para reiniciar los trabajos fallidos de CQLReplicator, vuelva a ejecutar el --state run comando con los mismos parámetros.

Recursos relacionados

Información adicional

Consideraciones sobre la migración

Puede usar AWS Glue para migrar la carga de trabajo de Cassandra a Amazon Keyspaces y, al mismo tiempo, mantener por completo la funcionalidad de sus bases de datos de origen de Cassandra durante el proceso de migración. Una vez completada la replicación, puede transferir sus aplicaciones a Amazon Keyspaces con un retraso de replicación mínimo (inferior a minutos) entre el clúster de Cassandra y Amazon Keyspaces. Para mantener la coherencia de datos, también puede seguir un proceso similar para replicar los datos de nuevo en el clúster de Cassandra desde Amazon Keyspaces.

Cálculos de unidades de escritura

Pongamos que, por ejemplo, desea escribir 500.000.000 con un tamaño de fila de 1 KiB durante una hora. El número total de unidades de escritura (WCU) de Amazon Keyspaces que necesita se basa en este cálculo:

(number of rows/60 mins 60s) 1 WCU per row = (500,000,000/(60*60s) * 1 WCU) = 69,444 WCUs required

La tasa de 1 hora es de 69.444 WCU por segundo, pero puede añadir algo de capacidad adicional.  Por ejemplo, 69,444 * 1.10 = 76,388 WCUs tiene una capacidad adicional del 10 por ciento.

Cree un espacio de claves mediante CQL

Para crear un espacio de claves con CQL, ejecute los siguientes comandos:

CREATE KEYSPACE target_keyspace WITH replication = {'class': 'SingleRegionStrategy'} CREATE TABLE target_keyspace.target_table ( userid uuid, level text, gameid int, description text, nickname text, zip text, email text, updatetime text, PRIMARY KEY (userid, level, gameid) ) WITH default_time_to_live = 0 AND CUSTOM_PROPERTIES = {'capacity_mode':{ 'throughput_mode':'PROVISIONED', 'write_capacity_units':76388, 'read_capacity_units':3612 }} AND CLUSTERING ORDER BY (level ASC, gameid ASC)