Migrez les charges de travail Apache Cassandra vers Amazon Keyspaces à l'aide d'AWS Glue - Recommandations AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Migrez les charges de travail Apache Cassandra vers Amazon Keyspaces à l'aide d'AWS Glue

Créée par Nikolai Kolesnikov (AWS), Karthiga Priya Chandran (AWS) et Samir Patel (AWS)

Environnement : Production

Source : Cassandre

Cible : Amazon Keyspaces

Type R : N/A

Charge de travail : open source ; toutes les autres charges de travail

Technologies : analyse ; migration ; sans serveur ; mégadonnées

Services AWS : AWS Glue ; Amazon Keyspaces ; Amazon S3 ; AWS CloudShell

Récapitulatif

Ce modèle vous montre comment migrer vos charges de travail Apache Cassandra existantes vers Amazon Keyspaces (pour Apache Cassandra) à l'aide de CQLReplicator sur AWS Glue. Vous pouvez utiliser CQLReplicator sur AWS Glue pour réduire à quelques minutes le délai de réplication lié à la migration de vos charges de travail. Vous apprendrez également à utiliser un bucket Amazon Simple Storage Service (Amazon S3) pour stocker les données nécessaires à la migration, notamment les fichiers Apache Parquet, les fichiers de configuration et les scripts. Ce modèle suppose que vos charges de travail Cassandra sont hébergées sur des instances Amazon Elastic Compute Cloud (Amazon EC2) dans un cloud privé virtuel (VPC).

Conditions préalables et limitations

Prérequis

  • Cluster Cassandra avec table source

  • Table cible dans Amazon Keyspaces pour répliquer la charge de travail

  • Compartiment S3 pour stocker les fichiers Parquet intermédiaires contenant des modifications de données incrémentielles

  • Compartiment S3 pour stocker les fichiers de configuration des tâches et les scripts

Limites

  • CQLReplicator sur AWS Glue nécessite un certain temps pour fournir des unités de traitement de données (DPU) pour les charges de travail Cassandra. Le délai de réplication entre le cluster Cassandra et l'espace de touches et la table cibles dans Amazon Keyspaces ne durera probablement que quelques minutes.

Architecture

Pile technologique source

  • Apache Cassandra

  • DataStax serveur

  • ScyllaDB

Pile technologique cible

  • Amazon Keyspaces

Architecture de migration

Le schéma suivant montre un exemple d'architecture dans lequel un cluster Cassandra est hébergé sur des instances EC2 et réparti sur trois zones de disponibilité. Les nœuds Cassandra sont hébergés dans des sous-réseaux privés.

Rôle de service personnalisé, Amazon Keyspaces et Amazon S3, avec AWS Glue se connectant au VPC des nœuds.

Le schéma suivant illustre le flux de travail suivant :

  1. Un rôle de service personnalisé permet d'accéder à Amazon Keyspaces et au compartiment S3.

  2. Une tâche AWS Glue lit la configuration de la tâche et les scripts contenus dans le compartiment S3.

  3. La tâche AWS Glue se connecte via le port 9042 pour lire les données du cluster Cassandra.

  4. La tâche AWS Glue se connecte via le port 9142 pour écrire des données sur Amazon Keyspaces.

Outils

Services et outils AWS

  • L'interface de ligne de commande AWS (AWS CLI) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.

  • AWS CloudShell est un shell basé sur un navigateur que vous pouvez utiliser pour gérer les services AWS à l'aide de l'AWS Command Line Interface (AWS CLI) et d'une gamme d'outils de développement préinstallés.

  • AWS Glue est un service ETL entièrement géré qui vous aide à classer, nettoyer, enrichir et déplacer les données de manière fiable entre les magasins de données et les flux de données.

  • Amazon Keyspaces (pour Apache Cassandra) est un service de base de données géré qui vous aide à migrer, exécuter et dimensionner vos charges de travail Cassandra dans le cloud AWS.

Code

Le code de ce modèle est disponible dans le référentiel GitHub CQLReplicator.

Bonnes pratiques

  • Pour déterminer les ressources AWS Glue nécessaires à la migration, estimez le nombre de lignes de la table source Cassandra. Par exemple, 250 000 lignes par DPU 0,25 (2 vCPU, 4 Go de mémoire) avec un disque de 84 Go.

  • Préchauffez les tables Amazon Keyspaces avant d'exécuter CQLReplicator. Par exemple, huit tuiles CQLReplicator (tâches AWS Glue) peuvent écrire jusqu'à 22 000 WCU par seconde. La cible doit donc être préchauffée jusqu'à 25 à 30 000 WCU par seconde.

  • Pour activer la communication entre les composants AWS Glue, utilisez une règle d'autoréférencement entrant pour tous les ports TCP de votre groupe de sécurité.

  • Utilisez la stratégie de trafic incrémentiel pour répartir la charge de travail de migration dans le temps.

Épopées

TâcheDescriptionCompétences requises

Créez un espace de touches et un tableau cibles.

  1. Créez un espace de touches et un tableau dans Amazon Keyspaces.

    Pour plus d'informations sur la capacité d'écriture, voir Calculs des unités d'écriture dans la section Informations supplémentaires de ce modèle.

    Vous pouvez également créer un espace de touches à l'aide du langage de requête Cassandra (CQL). Pour plus d'informations, voir Création d'un espace de touches à l'aide de CQL dans la section Informations supplémentaires de ce modèle.

    Remarque : Après avoir créé le tableau, pensez à le faire passer en mode capacité à la demande pour éviter des frais inutiles.

  2. Pour passer en mode débit, exécutez le script suivant :

    ALTER TABLE target_keyspace.target_table WITH CUSTOM_PROPERTIES = { 'capacity_mode':{ 'throughput_mode':'PAY_PER_REQUEST'} }
Propriétaire de l'application, administrateur AWS, DBA, développeur d'applications

Configurez le pilote Cassandra pour vous connecter à Cassandra.

Utilisez le script de configuration suivant :

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=” } }

Remarque : Le script précédent utilise le connecteur Spark Cassandra. Pour plus d'informations, consultez la configuration de référence pour Cassandra.

DBA

Configurez le pilote Cassandra pour vous connecter à Amazon Keyspaces.

Utilisez le script de configuration suivant :

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 } } }

Remarque : Le script précédent utilise le connecteur Spark Cassandra. Pour plus d'informations, consultez la configuration de référence pour Cassandra.

DBA

Créez un rôle IAM pour la tâche AWS Glue.

Créez un nouveau rôle de service AWS nommé glue-cassandra-migration avec AWS Glue en tant qu'entité de confiance.

Remarque : ils glue-cassandra-migration doivent fournir un accès en lecture et en écriture au compartiment S3 et à Amazon Keyspaces. Le compartiment S3 contient les fichiers .jar, les fichiers de configuration pour Amazon Keyspaces et Cassandra, ainsi que les fichiers Parquet intermédiaires. Par exemple, il contient le AWSGlueServiceRoleAmazonS3FullAccess, et les politiques AmazonKeyspacesFullAccess gérées.

AWS DevOps

Téléchargez CQLReplicator dans AWS. CloudShell

Téléchargez le projet dans votre dossier personnel en exécutant la commande suivante :

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

Modifiez les fichiers de configuration de référence.

Copiez CassandraConnector.conf et KeyspacesConnector.conf dans le ../glue/conf répertoire du dossier du projet.

AWS DevOps

Lancez le processus de migration.

La commande suivante initialise l'environnement CQLReplicator. L'initialisation implique de copier des artefacts .jar et de créer un connecteur AWS Glue, un compartiment S3, une tâche AWS Glue, le migration keyspace et la table : 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

Le script comprend les paramètres suivants :

  • --sg— Les groupes de sécurité qui autorisent l'accès au cluster Cassandra depuis AWS Glue et incluent la règle d'autoréférencement entrant pour l'ensemble du trafic

  • --subnet— Le sous-réseau auquel appartient le cluster Cassandra

  • --az— La zone de disponibilité du sous-réseau

  • --region— La région AWS dans laquelle le cluster Cassandra est déployé

  • --glue-iam-role— Les autorisations de rôle IAM qu'AWS Glue peut assumer lorsque vous appelez Amazon Keyspaces et Amazon S3 en votre nom

  • --landing zone— Paramètre facultatif pour la réutilisation d'un compartiment S3 (si vous ne fournissez pas de valeur pour le --landing zone paramètre, le init processus essaiera de créer un nouveau compartiment pour stocker les fichiers de configuration, les artefacts .jar et les fichiers intermédiaires.)

AWS DevOps

Validez le déploiement.

Après avoir exécuté la commande précédente, le compte AWS doit contenir les éléments suivants :

  • La tâche AWS Glue CQLReplicator et le connecteur AWS Glue dans AWS Glue

  • Le compartiment S3 qui stocke les artefacts

  • L'espace de touches cible migration et le ledger tableau dans Amazon Keyspaces

AWS DevOps
TâcheDescriptionCompétences requises

Lancez le processus de migration.

Pour utiliser CQLReplicator sur AWS Glue, vous devez utiliser la --state run commande, suivie d'une série de paramètres. La configuration précise de ces paramètres est principalement déterminée par vos exigences uniques en matière de migration. Par exemple, ces paramètres peuvent varier si vous choisissez de répliquer les valeurs de durée de vie (TTL) et les mises à jour, ou si vous déchargez des objets de plus de 1 Mo vers Amazon S3.

Pour répliquer la charge de travail du cluster Cassandra vers Amazon Keyspaces, exécutez la commande suivante :

./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

Votre keyspace source et votre table se trouvent source_keyspace.source_table dans le cluster Cassandra. Votre espace de touches et votre table cibles se trouvent target_keyspace.target_table dans Amazon Keyspaces. Ce paramètre --inc-traffic permet d'éviter que le trafic incrémentiel ne surcharge le cluster Cassandra et Amazon Keyspaces avec un nombre élevé de demandes.

Pour répliquer les mises à jour, ajoutez-les --writetime-column regular_column_name à votre ligne de commande. La colonne normale va être utilisée comme source de l'horodatage d'écriture.

AWS DevOps
TâcheDescriptionCompétences requises

Validez les lignes Cassandra migrées pendant la phase de migration historique.

Pour obtenir le nombre de lignes répliquées pendant la phase de remblayage, exécutez la commande suivante :

./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
TâcheDescriptionCompétences requises

Utilisez la cqlreplicator commande ou la console AWS Glue.

Pour arrêter le processus de migration correctement, exécutez la commande suivante :

./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

Pour arrêter immédiatement le processus de migration, utilisez la console AWS Glue.

AWS DevOps
TâcheDescriptionCompétences requises

Supprimez les ressources déployées.

La commande suivante supprimera la tâche AWS Glue, le connecteur, le compartiment S3 et la table Keyspaces : ledger

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

Résolution des problèmes

ProblèmeSolution

Les tâches AWS Glue ont échoué et ont renvoyé une erreur OOM (Out of Memory).

  1. Modifiez le type de travailleur (agrandissez). Par exemple, changez G0.25X de G.1X ou G.1X deG.2X. Vous pouvez également augmenter le nombre de DPU par tâche AWS Glue (scale-out) dans CQLReplicator.

  2. Démarrez le processus de migration à partir du point où il a été interrompu. Pour redémarrer les tâches CQLReplicator ayant échoué, réexécutez la --state run commande avec les mêmes paramètres.

Ressources connexes

Informations supplémentaires

Considérations concernant la migration

Vous pouvez utiliser AWS Glue pour migrer votre charge de travail Cassandra vers Amazon Keyspaces, tout en préservant le bon fonctionnement de vos bases de données sources Cassandra pendant le processus de migration. Une fois la réplication terminée, vous pouvez choisir de transférer vos applications vers Amazon Keyspaces avec un délai de réplication minimal (moins de quelques minutes) entre le cluster Cassandra et Amazon Keyspaces. Pour garantir la cohérence des données, vous pouvez également utiliser un pipeline similaire pour répliquer les données vers le cluster Cassandra depuis Amazon Keyspaces.

Écrire des calculs unitaires

Par exemple, imaginez que vous avez l'intention d'écrire 500 000 000 avec une taille de ligne de 1 KiB pendant une heure. Le nombre total d'unités d'écriture (WCU) Amazon Keyspaces dont vous avez besoin est basé sur ce calcul :

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

69 444 WCU par seconde, c'est le tarif pour 1 heure, mais vous pouvez ajouter une certaine marge de manœuvre pour couvrir les frais généraux.  Par exemple, 69,444 * 1.10 = 76,388 WCUs a une surcharge de 10 %.

Création d'un espace de touches à l'aide de CQL

Pour créer un espace de touches à l'aide de CQL, exécutez les commandes suivantes :

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)