Migrasikan beban kerja Apache Cassandra ke Amazon Keyspaces dengan menggunakan AWS Glue - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Migrasikan beban kerja Apache Cassandra ke Amazon Keyspaces dengan menggunakan AWS Glue

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

Ringkasan

Pola ini menunjukkan cara memigrasikan beban kerja Apache Cassandra yang ada ke Amazon Keyspaces (untuk Apache Cassandra) dengan menggunakan AWS Glue. CQLReplicator Anda dapat menggunakan CQLReplicator AWS Glue untuk meminimalkan kelambatan replikasi migrasi beban kerja Anda hingga hitungan menit. Anda juga mempelajari cara menggunakan bucket Amazon Simple Storage Service (Amazon S3) untuk menyimpan data yang diperlukan untuk migrasi, termasuk file Apache Parquet, file konfigurasi, dan skrip. Pola ini mengasumsikan bahwa beban kerja Cassandra Anda di-host di instans Amazon Elastic Compute Cloud ( EC2Amazon) di cloud pribadi virtual (VPC).

Prasyarat dan batasan

Prasyarat

  • Cluster Cassandra dengan tabel sumber

  • Tabel target di Amazon Keyspaces untuk mereplikasi beban kerja

  • Bucket S3 untuk menyimpan file Parket perantara yang berisi perubahan data tambahan

  • Bucket S3 untuk menyimpan file dan skrip konfigurasi pekerjaan

Batasan

  • CQLReplicator pada AWS Glue memerlukan waktu untuk menyediakan Data Processing Units (DPUs) untuk beban kerja Cassandra. Jeda replikasi antara cluster Cassandra dan ruang kunci target dan tabel di Amazon Keyspaces kemungkinan akan berlangsung hanya dalam hitungan menit.

Arsitektur

Tumpukan teknologi sumber

  • Apache Cassandra

  • DataStax Peladen

  • ScyllaDB

Tumpukan teknologi target

  • Amazon Keyspaces

Arsitektur migrasi

Diagram berikut menunjukkan contoh arsitektur di mana cluster Cassandra di-host pada EC2 instance dan tersebar di tiga Availability Zone. Node Cassandra di-host di subnet pribadi.

Peran layanan khusus, Amazon Keyspaces, dan Amazon S3, dengan AWS Glue terhubung ke node VPC.

Diagram menunjukkan alur kerja berikut:

  1. Peran layanan khusus menyediakan akses ke Amazon Keyspaces dan bucket S3.

  2. Pekerjaan AWS Glue membaca konfigurasi pekerjaan dan skrip di bucket S3.

  3. Pekerjaan AWS Glue terhubung melalui port 9042 untuk membaca data dari cluster Cassandra.

  4. Pekerjaan AWS Glue terhubung melalui port 9142 untuk menulis data ke Amazon Keyspaces.

Alat

Layanan dan alat AWS

  • AWS Command Line Interface (AWS CLI) adalah alat sumber terbuka yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda.

  • AWS CloudShell adalah shell berbasis browser yang dapat Anda gunakan untuk mengelola layanan AWS dengan menggunakan AWS Command Line Interface (AWS CLI) Command Line Interface (AWS CLI) dan berbagai alat pengembangan yang telah diinstal sebelumnya.

  • AWS Glue adalah layanan ETL yang dikelola sepenuhnya yang membantu Anda mengkategorikan, membersihkan, memperkaya, dan memindahkan data dengan andal antara penyimpanan data dan aliran data.

  • Amazon Keyspaces (untuk Apache Cassandra) adalah layanan database terkelola yang membantu Anda memigrasi, menjalankan, dan menskalakan beban kerja Cassandra Anda di AWS Cloud.

Kode

Kode untuk pola ini tersedia di GitHub CQLReplicatorrepositori.

Praktik terbaik

  • Untuk menentukan sumber daya AWS Glue yang diperlukan untuk migrasi, perkirakan jumlah baris dalam tabel sumber Cassandra. Misalnya, 250 K baris per 0,25 DPU (2 vCPUs, memori 4 GB) dengan disk 84 GB.

  • Tabel Amazon Keyspaces pra-hangat sebelum dijalankan. CQLReplicator Misalnya, delapan CQLReplicator ubin (AWS Glue jobs) dapat menulis hingga 22 K WCUs per detik, sehingga target harus dipanaskan terlebih dahulu hingga 25-30 K WCUs per detik.

  • Untuk mengaktifkan komunikasi antara komponen AWS Glue, gunakan aturan masuk referensi mandiri untuk semua port TCP di grup keamanan Anda.

  • Gunakan strategi lalu lintas tambahan untuk mendistribusikan beban kerja migrasi dari waktu ke waktu.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat keyspace target dan tabel.

  1. Buat keyspace dan tabel di Amazon Keyspaces.

    Untuk informasi selengkapnya tentang kapasitas tulis, lihat Menulis perhitungan unit di bagian Informasi tambahan dari pola ini.

    Anda juga dapat membuat keyspace dengan menggunakan Cassandra Query Language (CQL). Untuk informasi selengkapnya, lihat Membuat ruang kunci menggunakan CQL di bagian Informasi tambahan dari pola ini.

    catatan

    Setelah Anda membuat tabel, pertimbangkan untuk mengalihkan tabel ke mode kapasitas sesuai permintaan untuk menghindari biaya yang tidak perlu.

  2. Untuk memperbarui ke mode throughput, jalankan skrip berikut:

    ALTER TABLE target_keyspace.target_table WITH CUSTOM_PROPERTIES = { 'capacity_mode':{ 'throughput_mode':'PAY_PER_REQUEST'} }
Pemilik aplikasi, administrator AWS, DBA, Pengembang aplikasi

Konfigurasikan driver Cassandra untuk terhubung ke Cassandra.

Gunakan skrip konfigurasi berikut:

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=" } }
catatan

Skrip sebelumnya menggunakan Spark Cassandra Connector. Untuk informasi lebih lanjut, lihat konfigurasi referensi untuk Cassandra.

DBA

Konfigurasikan driver Cassandra untuk terhubung ke Amazon Keyspaces.

Gunakan skrip konfigurasi berikut:

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

Skrip sebelumnya menggunakan Spark Cassandra Connector. Untuk informasi lebih lanjut, lihat konfigurasi referensi untuk Cassandra.

DBA

Buat peran IAM untuk pekerjaan AWS Glue.

Buat peran layanan AWS baru yang glue-cassandra-migration diberi nama AWS Glue sebagai entitas tepercaya.

catatan

glue-cassandra-migrationSeharusnya menyediakan akses baca dan tulis ke bucket S3 dan Amazon Keyspaces. Bucket S3 berisi file.jar, file konfigurasi untuk Amazon Keyspaces dan Cassandra, dan file Parket perantara. Misalnya, berisi AWSGlueServiceRoleAmazonS3FullAccess, dan kebijakan AmazonKeyspacesFullAccess terkelola.

AWS DevOps

Unduh CQLReplicator di AWS CloudShell.

Unduh proyek ke folder rumah Anda dengan menjalankan perintah berikut:

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

Ubah file konfigurasi referensi.

Salin CassandraConnector.conf dan KeyspacesConnector.conf ke ../glue/conf direktori di folder proyek.

AWS DevOps

Memulai proses migrasi.

Perintah berikut menginisialisasi CQLReplicator lingkungan. Inisialisasi melibatkan penyalinan artefak.jar, dan membuat konektor AWS Glue, bucket S3, pekerjaan AWS Glue, keyspace, dan tabel: migration 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

Skrip mencakup parameter berikut:

  • --sg— Grup keamanan yang mengizinkan akses ke cluster Cassandra dari AWS Glue dan menyertakan aturan masuk referensi mandiri untuk semua lalu lintas

  • --subnet— Subnet tempat cluster Cassandra berada

  • --az— Availability Zone dari subnet

  • --region— Wilayah AWS tempat cluster Cassandra digunakan

  • --glue-iam-roleIzin peran IAM yang dapat diasumsikan AWS Glue saat memanggil Amazon Keyspaces dan Amazon S3 atas nama Anda

  • --landing zone— Parameter opsional untuk menggunakan kembali bucket S3 (Jika Anda tidak memberikan nilai untuk --landing zone parameter, init proses akan mencoba membuat bucket baru untuk menyimpan file konfigurasi, artefak .jar, dan file perantara.)

AWS DevOps

Validasi penerapan.

Setelah Anda menjalankan perintah sebelumnya, akun AWS harus berisi yang berikut:

  • Pekerjaan CQLReplicator AWS Glue dan konektor AWS Glue di AWS Glue

  • Ember S3 yang menyimpan artefak

  • Ruang kunci target migration dan ledger tabel di Amazon Keyspaces

AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Mulai proses migrasi.

Untuk beroperasi CQLReplicator pada AWS Glue, Anda perlu menggunakan --state run perintah, diikuti oleh serangkaian parameter. Konfigurasi yang tepat dari parameter ini terutama ditentukan oleh persyaratan migrasi unik Anda. Misalnya, pengaturan ini mungkin berbeda jika Anda memilih untuk mereplikasi nilai dan pembaruan time to live (TTL), atau Anda membongkar objek melebihi 1 MB ke Amazon S3.

Untuk mereplikasi beban kerja dari cluster Cassandra ke Amazon Keyspaces, jalankan perintah berikut:

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

Ruang kunci dan tabel sumber Anda ada source_keyspace.source_table di cluster Cassandra. Ruang kunci dan tabel target Anda ada target_keyspace.target_table di Amazon Keyspaces. Parameter ini --inc-traffic membantu mencegah lalu lintas tambahan membebani cluster Cassandra dan Amazon Keyspaces dengan jumlah permintaan yang tinggi.

Untuk mereplikasi pembaruan, tambahkan --writetime-column regular_column_name ke baris perintah Anda. Kolom reguler akan digunakan sebagai sumber stempel waktu tulis.

AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Validasi baris Cassandra yang dimigrasi selama fase migrasi historis.

Untuk mendapatkan jumlah baris yang direplikasi selama fase penimbunan ulang, jalankan perintah berikut:

./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
TugasDeskripsiKeterampilan yang dibutuhkan

Gunakan cqlreplicator perintah atau konsol AWS Glue.

Untuk menghentikan proses migrasi dengan anggun, jalankan perintah berikut:

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

Untuk segera menghentikan proses migrasi, gunakan konsol AWS Glue.

AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Hapus sumber daya yang digunakan.

Perintah berikut akan menghapus tabel AWS Glue job, konektor, bucket S3, dan ledger Keyspaces:

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

Pemecahan Masalah

IsuSolusi

Pekerjaan AWS Glue gagal dan mengembalikan kesalahan Kehabisan Memori (OOM).

  1. Ubah jenis pekerja (naik skala). Misalnya, ubah G0.25X ke G.1X atau G.1X keG.2X. Atau, tingkatkan jumlah DPUs per pekerjaan AWS Glue (skala keluar) di CQLReplicator.

  2. Mulai proses migrasi dari titik di mana itu terputus. Untuk memulai ulang CQLReplicator pekerjaan yang gagal, jalankan kembali --state run perintah dengan parameter yang sama.

Sumber daya terkait

Informasi tambahan

Pertimbangan migrasi

Anda dapat menggunakan AWS Glue untuk memigrasikan beban kerja Cassandra Anda ke Amazon Keyspaces, sambil menjaga database sumber Cassandra Anda berfungsi sepenuhnya selama proses migrasi. Setelah replikasi selesai, Anda dapat memilih untuk memotong aplikasi Anda ke Amazon Keyspaces dengan jeda replikasi minimal (kurang dari menit) antara cluster Cassandra dan Amazon Keyspaces. Untuk menjaga konsistensi data, Anda juga dapat menggunakan pipeline serupa untuk mereplikasi data kembali ke cluster Cassandra dari Amazon Keyspaces.

Tulis perhitungan unit

Sebagai contoh, pertimbangkan bahwa Anda bermaksud menulis 500.000.000 dengan ukuran baris 1 KiB selama satu jam. Jumlah total unit tulis Amazon Keyspaces (WCUs) yang Anda butuhkan didasarkan pada perhitungan ini:

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

69.444 WCUs per detik adalah tarif untuk 1 jam, tetapi Anda dapat menambahkan beberapa bantal untuk overhead.  Misalnya, 69,444 * 1.10 = 76,388 WCUs memiliki overhead 10 persen.

Buat keyspace dengan menggunakan CQL

Untuk membuat keyspace dengan menggunakan CQL, jalankan perintah berikut:

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)