Migração de workloads do Apache Cassandra para o Amazon Keyspaces usando o AWS Glue - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Migração de workloads do Apache Cassandra para o Amazon Keyspaces usando o AWS Glue

Nikolai Kolesnikov, Karthiga Priya Chandran e Samir Patel, Amazon Web Services

Resumo

Esse padrão mostra como migrar suas cargas de trabalho existentes do Apache Cassandra para o Amazon Keyspaces (para Apache Cassandra) usando o AWS Glue. CQLReplicator Você pode usar o CQLReplicator AWS Glue para minimizar o atraso de replicação da migração de suas cargas de trabalho em questão de minutos. Você também aprende a usar um bucket do Amazon Simple Storage Service (Amazon S3) para armazenar dados necessários para a migração, incluindo arquivos, arquivos de configuração e scripts do Apache Parquet. Esse padrão pressupõe que suas cargas de trabalho do Cassandra estejam hospedadas em instâncias do Amazon Elastic Compute Cloud ( EC2Amazon) em uma nuvem privada virtual (VPC).

Pré-requisitos e limitações

Pré-requisitos

  • Cluster Cassandra com uma tabela de origem

  • Tabela de destino no Amazon Keyspaces para replicar a workload

  • Bucket do S3 para armazenar arquivos intermediários do Parquet que contêm alterações incrementais de dados

  • Bucket do S3 para armazenar scripts e arquivos de configuração do trabalho

Limitações

  • CQLReplicator no AWS Glue, é necessário algum tempo para provisionar unidades de processamento de dados (DPUs) para as cargas de trabalho do Cassandra. O atraso de replicação entre o cluster do Cassandra e o keyspace e a tabela de destino no Amazon Keyspaces provavelmente durará apenas alguns minutos.

Arquitetura

Pilha de tecnologia de origem

  • Apache Cassandra

  • DataStax Servidor

  • ScyllaDB

Pilha de tecnologias de destino

  • Amazon Keyspaces

Arquitetura de migração

O diagrama a seguir mostra um exemplo de arquitetura em que um cluster do Cassandra é hospedado em EC2 instâncias e distribuído por três zonas de disponibilidade. Os nós do Cassandra encontram-se hospedados em sub-redes privadas.

Perfil de serviço personalizado, Amazon Keyspaces e Amazon S3, com o AWS Glue estabelecendo conexão com a VPC dos nós.

O diagrama mostra o seguinte fluxo de trabalho:

  1. Um perfil de serviço personalizado fornece acesso ao Amazon Keyspaces e ao bucket do S3.

  2. Um trabalho do AWS Glue que realiza a leitura da configuração e dos scripts do trabalho no bucket do S3.

  3. O trabalho do AWS Glue se conecta pela porta 9042 para ler dados do cluster Cassandra.

  4. O trabalho do AWS Glue se conecta por meio da porta 9142 para gravar dados no Amazon Keyspaces.

Ferramentas

Ferramentas e serviços da AWS

  • A ‭AWS Command Line Interface (AWS CLI)‭ é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.

  • CloudShellA AWS é um shell baseado em navegador que você pode usar para gerenciar serviços da AWS usando a AWS Command Line Interface (AWS CLI) e uma variedade de ferramentas de desenvolvimento pré-instaladas.

  • O AWS Glue é um serviço de ETL totalmente gerenciado que ajuda você a categorizar, limpar, enriquecer e mover dados de forma confiável entre armazenamentos de dados e fluxos de dados.

  • O Amazon Keyspaces (para Apache Cassandra) é um serviço de banco de dados gerenciado que ajuda você a migrar, executar e escalar suas workloads do Cassandra na nuvem AWS.

Código

O código desse padrão está disponível no GitHub CQLReplicatorrepositório.

Práticas recomendadas

  • Para determinar os recursos necessários do AWS Glue para a migração, estime o número de linhas na tabela de origem do Cassandra. Por exemplo, 250 K linhas por 0,25 DPU (2 vCPUs, 4 GB de memória) com disco de 84 GB.

  • Pré-aqueça as tabelas do Amazon Keyspaces antes de executá-las. CQLReplicator Por exemplo, oito CQLReplicator blocos (trabalhos do AWS Glue) podem gravar até 22 K WCUs por segundo, portanto, o alvo deve ser pré-aquecido até 25 a 30 K WCUs por segundo.

  • Para permitir a comunicação entre os componentes do AWS Glue, use uma regra de entrada autorreferenciada para todas as portas TCP no seu grupo de segurança.

  • Use a estratégia de tráfego incremental para distribuir a workload de migração ao longo do tempo.

Épicos

TarefaDescriptionHabilidades necessárias

Crie um espaço de teclas e uma tabela de destino.

  1. Crie um keyspace e uma tabela no Amazon Keyspaces.

    Para obter mais informações sobre a capacidade de gravação, consulte Cálculos de unidades de gravação na seção Informações adicionais deste padrão.

    Você também pode criar um keyspace usando a Cassandra Query Language (CQL). Para obter mais informações, consulte Criação de um keyspace usando CQL na seção Informações adicionais deste padrão.

    nota

    Após criar a tabela, considere alterar seu modo de capacidade para sob demanda, a fim de evitar cobranças desnecessárias.

  2. Para atualizar para o modo de throughput execute o script a seguir:

    ALTER TABLE target_keyspace.target_table WITH CUSTOM_PROPERTIES = { 'capacity_mode':{ 'throughput_mode':'PAY_PER_REQUEST'} }
Proprietário do aplicativo, administrador da AWS, DBA, desenvolvedor do aplicativo

Configure o driver do Cassandra para conectar-se ao Cassandra.

Use o seguinte script de configuração:

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

O script apresentado acima faz uso do Spark Cassandra Connector. Para obter mais informações, consulte a configuração de referência para o Cassandra.

DBA

Configure o driver do Cassandra para se conectar ao Amazon Keyspaces.

Use o seguinte script de configuração:

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

O script apresentado acima faz uso do Spark Cassandra Connector. Para obter mais informações, consulte a configuração de referência para o Cassandra.

DBA

Crie um perfil do IAM para o trabalho do AWS Glue.

Crie um novo perfil de serviço da AWS chamado glue-cassandra-migration, com o AWS Glue como entidade confiável.

nota

O código glue-cassandra-migration deve fornecer acesso de leitura e gravação ao bucket do S3 e ao Amazon Keyspaces O bucket do S3 contém os arquivos .jar, os arquivos de configuração para o Amazon Keyspaces e para o Cassandra, e os arquivos intermediários em Parquet. Por exemplo, ele contém as políticas gerenciadas AWSGlueServiceRole, AmazonS3FullAccess e AmazonKeyspacesFullAccess.

AWS DevOps

Faça o download CQLReplicator na AWS CloudShell.

Faça o download do projeto na sua pasta inicial executando o seguinte 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 os arquivos de configuração de referência.

Copie os arquivos CassandraConnector.conf e KeyspacesConnector.conf para o diretório ../glue/conf dentro da pasta do projeto.

AWS DevOps

Dê início ao processo de migração.

O comando a seguir inicializa o CQLReplicator ambiente. A inicialização envolve copiar os artefatos em .jar e criar um conector do AWS Glue, um bucket do S3, um trabalho do AWS Glue, o keyspace migration e a tabela 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

O comando inclui os seguintes parâmetros:

  • --sg: os grupos de segurança que permitem acesso ao cluster do Cassandra por meio do AWS Glue e que incluem a regra de entrada autorreferenciada para todo o tráfego

  • --subnet: a sub-rede à qual o cluster do Cassandra pertence

  • --az: a zona de disponibilidade da sub-rede

  • --region: a região da AWS em que o cluster do Cassandra está implantado

  • --glue-iam-role: as permissões do perfil do IAM que o AWS Glue pode assumir ao chamar o Amazon Keyspaces e o Amazon S3 em seu nome

  • --landing zone: um parâmetro opcional para reutilizar um bucket do S3 (se você não fornecer um valor para o parâmetro--landing zone , o processo init tentará criar um novo bucket para armazenar os arquivos de configuração, artefatos em .jar e arquivos intermediários)

AWS DevOps

Valide a implantação.

Após executar o comando anterior, a conta da AWS deve conter o seguinte:

  • O trabalho do CQLReplicator AWS Glue e o conector do AWS Glue no AWS Glue

  • O bucket do S3 que armazena os artefatos

  • O keyspace de destino migration e a tabela ledger no Amazon Keyspaces

AWS DevOps
TarefaDescriptionHabilidades necessárias

Dê início ao processo de migração.

Para operar CQLReplicator no AWS Glue, você precisa usar o --state run comando, seguido por uma série de parâmetros. A configuração exata desses parâmetros depende principalmente dos seus requisitos específicos de migração. Por exemplo, essas definições podem variar se você optar por replicar valores de tempo de vida (TTL, na sigla em inglês) e atualizações, ou se descarregar objetos maiores que 1 MB no Amazon S3.

Para replicar a workload do cluster do Cassandra para o Amazon Keyspaces, execute o seguinte 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

O keyspace e a tabela de origem são source_keyspace.source_table no cluster do Cassandra. Enquanto o keyspace e a tabela de destino são target_keyspace.target_table no Amazon Keyspaces. O parâmetro --inc-traffic ajuda a evitar que o tráfego incremental sobrecarregue o cluster do Cassandra e o Amazon Keyspaces com um grande número de solicitações.

Para replicar atualizações, adicione --writetime-column regular_column_name à sua linha de comando. A coluna regular será usada como origem do carimbo de data/hora de gravação.

AWS DevOps
TarefaDescriptionHabilidades necessárias

Valide as linhas do Cassandra migradas durante a fase de migração histórica.

Para obter o número de linhas replicadas durante a fase de preenchimento, execute o seguinte 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
TarefaDescriptionHabilidades necessárias

Use o comando cqlreplicator ou o console do AWS Glue.

Para interromper o processo de migração corretamente, execute o seguinte 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 interromper o processo de migração imediatamente, use o console do AWS Glue.

AWS DevOps
TarefaDescriptionHabilidades necessárias

Exclua os recursos implantados.

O comando apresentado a seguir excluirá o trabalho do AWS Glue, o conector, o bucket do S3 e a tabela ledger do Keyspaces:

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

Solução de problemas

ProblemaSolução

Os trabalhos do AWS Glue falharam e retornaram um erro de falta de memória (OOM, na sigla em inglês).

  1. Altere o tipo de processamento (aumentar a escala verticalmente). Por exemplo, altere G0.25X para G.1X ou G.1X para G.2X. Como alternativa, aumente o número de DPUs por trabalho do AWS Glue (escalabilidade horizontal) em CQLReplicator.

  2. Dê início ao processo de migração a partir do ponto em que foi interrompido. Para reiniciar CQLReplicator trabalhos com falha, execute novamente o --state run comando com os mesmos parâmetros.

Recursos relacionados

Mais informações

Considerações sobre a migração

Você pode usar o AWS Glue para migrar seu workload do Cassandra para o Amazon Keyspaces, mantendo seus bancos de dados de origem do Cassandra completamente funcionais durante o processo de migração. Após a conclusão da replicação, você pode optar por transferir seus aplicativos para o Amazon Keyspaces com um atraso mínimo de replicação (menos de minutos) entre o cluster Cassandra e o Amazon Keyspaces. Para manter a consistência de dados, você também pode usar um pipeline similar para replicar os dados de volta para o cluster Cassandra a partir do Amazon Keyspaces.

Grave cálculos unitários

Como exemplo, considere que você pretende escrever 500.000.000 com o tamanho da linha 1 KiB durante uma hora. O número total de unidades de gravação (WCUs) do Amazon Keyspaces que você precisa é baseado neste cálculo:

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

69.444 WCUs por segundo é a taxa de 1 hora, mas você pode adicionar um pouco de amortecimento para despesas gerais.  Por exemplo, 69,444 * 1.10 = 76,388 WCUs tem 10% de sobrecarga.

Criação de um keyspace usando CQL

Para criar um keyspace usando CQL, execute os seguintes 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)