使用 AWS Glue 將阿帕奇卡桑德拉工作負載遷移到 Amazon Keyspaces - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 AWS Glue 將阿帕奇卡桑德拉工作負載遷移到 Amazon Keyspaces

創建者:尼古拉·科列斯尼科夫(AWS),卡思加普里亞·錢德蘭(AWS)和薩米爾·帕特爾(AWS)

環境:生產

來源:卡桑德拉

目標:Amazon Keyspaces

R 類型:不適用

工作負載:開放原始碼;所有其他

技術:分析;移轉;無伺服器;大數據

AWS 服務:AWS AWS Glue;Amazon Keyspaces;Amazon S3;AWS CloudShell

Summary

這種模式向您展示如何將現有的 Apache 卡桑德拉工作負載遷移到 Amazon Keyspaces(對於阿帕奇卡桑德拉)通過使用 AWS Glue CqlReplicator。您可以在 AWS Glue 上使用 CQlReplicator,將移轉工作負載的複寫延遲降到幾分鐘。您也會學到如何使用 Amazon Simple Storage Service (Amazon S3) 儲存貯體來存放遷移所需的資料,包括 Apache Parquet 檔案、組態檔案和指令碼。此模式假設您的 Cassandra 工作負載託管在虛擬私有雲 (VPC) 中的 Amazon 彈性運算雲端 (Amazon EC2) 執行個體上。

先決條件和限制

先決條件

  • 卡桑德拉群集與源表

  • Amazon Keyspaces 中的目標資料表以複寫工作負載

  • S3 儲存貯體,用於存放包含增量資料變更的中間 Parquet 檔案

  • S3 儲存貯體來存放任務組態檔案和指令碼

限制

  • AWS Glue 上的 CQLL 複製器需要一些時間來為卡桑德拉工作負載佈建資料處理單元 (DPU)。Cassandra 叢集與 Amazon 金鑰空間中的目標金鑰空間和表格之間的複寫延遲可能只持續幾分鐘。

架構

源, 技術, 堆棧

  • 阿帕奇·卡桑德拉

  • DataStax 伺服器

  • 南瓜属

目標技術堆疊

  • Amazon Keyspaces

移轉架構

下圖顯示了一個示例架構,其中 Cassandra 叢集託管在 EC2 執行個體上並分散在三個可用區域。該卡桑德拉節點託管在私有子網。

使用 AWS Glue 連接到節點 VPC 的自訂服務角色、亞馬遜 Keyspaces 和 Amazon S3。

該圖顯示以下工作流程:

  1. 自訂服務角色可讓您存取 Amazon Keyspaces 和 S3 儲存貯體。

  2. AWS Glue 任務會讀取 S3 儲存貯體中的任務組態和指令碼。

  3. AWS AWS Glue 任務透過連接埠 9042 連線,以讀取卡桑德拉叢集中的資料。

  4. AWS Glue 任務會透過連接埠 9142 連線,將資料寫入 Amazon Keyspaces。

工具

AWS 服務和工具

  • AWS Command Line Interface (AWS CLI) (AWS CLI) 是一種開放原始碼工具,可協助您透過命令列殼層中的命令與 AWS 服務互動。

  • AWS CloudShell 是以瀏覽器為基礎的殼層,您可以使用 AWS Command Line Interface (AWS CLI) (AWS CLI) 和一系列預先安裝的開發工具來管理 AWS 服務。

  • AWS Glue 是全受管的 ETL 服務,可協助您在資料存放區和資料串流之間可靠地分類、清理、豐富和移動資料。

  • Amazon Keyspaces(適用於 Apache Cassandra)是一種受管的資料庫服務,可協助您在 AWS 雲端中遷移、執行和擴展 Cassandra 工作負載。

Code

此模式的程式碼可在 GitHub CQL Replicator 存放庫中取得。

最佳實務

  • 若要判斷移轉所需的 AWS Glue 資源,請預估來源 Cassandra 資料表中的資料列數目。例如,每 0.25 個 DPU (2 個 vCPUs、4 GB 記憶體) 以及 84 GB 磁碟的每個資料列有 250 K 個資料列。

  • 在運行 CQL 複製器之前預熱 Amazon Keyspaces 表。例如,八個 CQL複製器圖塊 (AWS Glue 任務) 每秒最多可寫入 22 K WCU,因此目標應預先加熱至每秒 25-30 K 的 WCU。

  • 若要啟用 AWS Glue 元件之間的通訊,請對安全群組中的所有 TCP 連接埠使用自我參照的輸入規則。

  • 使用增量流量策略隨時間分配移轉工作負載。

史诗

任務描述所需技能

創建一個目標密鑰空間和表。

  1. 在 Amazon 密鑰空間中創建一個 Keyspaces 間和表

    有關寫入容量的詳細資訊,請參閱此模式的其他資訊一節中的寫入單位計算

    您也可以通過使用卡桑德拉查詢語言(C QL)創建一個密鑰空間。如需詳細資訊,請參閱此模式的其他資訊一節中的使用 CQL 建立金鑰空間

    注意:建立表格之後,請考慮將表格切換為隨需容量模式,以避免不必要的費用。

  2. 若要更新為輸送量模式,請執行下列指令碼:

    ALTER TABLE target_keyspace.target_table WITH CUSTOM_PROPERTIES = { 'capacity_mode':{ 'throughput_mode':'PAY_PER_REQUEST'} }
應用程式擁有者、AWS 管理員、DBA、應用程式開發人

配置卡桑德拉驅動程序連接到卡桑德拉。

使用下列組態指令碼:

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

注意:前面的腳本使用星火卡桑德拉連接器。有關更多信息,請參閱卡桑德拉的參考配置。

DBA

配置卡桑德拉驅動程序連接到 Amazon Keyspaces。

使用下列組態指令碼:

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

注意:前面的腳本使用星火卡桑德拉連接器。有關更多信息,請參閱卡桑德拉的參考配置。

DBA

為 AWS AWS Glue 任務建立 IAM 角色。

建立以 AWS Glue 命名glue-cassandra-migration的新 AWS 服務角色,做為受信任的實體。

注意:glue-cassandra-migration應該提供對 S3 存儲桶和 Amazon Keyspaces 的讀寫訪問權限。S3 存儲桶包含 .jar 文件,Amazon Keyspaces 和卡桑德拉的配置文件,以及中間實木複合地板文件。例如,它包含AWSGlueServiceRoleAmazonS3FullAccess、和AmazonKeyspacesFullAccess受管理的策略。

AWS DevOps

在 AWS 中下載 CQL 複製器。 CloudShell

執行下列命令,將專案下載到您的主資料夾:

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

修改參考組態檔案。

CassandraConnector.conf和複製KeyspacesConnector.conf到項../glue/conf目文件夾中的目錄中。

AWS DevOps

啟動遷移程序。

下列指令會初始化 CQLReplicator 環境。初始化涉及複製 .jar 成品,以及建立 AWS Glue 連接器、S3 儲存貯體、AWS Glue 任務、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

該指令碼包括下列參數:

  • --sg— 允許從 AWS Glue 存取 Cassandra 叢集的安全群組,並包含所有流量的自我參照入埠規則

  • --subnet— 子網到其中卡桑德拉集群所屬

  • --az— 子網路的可用區域

  • --region— 部署卡桑德拉叢集的 AWS 區域

  • --glue-iam-role— 代表您呼叫 Amazon Keyspaces 和 Amazon S3 時,AWS Glue 可以承擔的 IAM 角色許

  • --landing zone— 重複使用 S3 儲存貯體的選用參數 (如果您未提供--landing zone參數值,則init程序會嘗試建立新的儲存貯體來儲存組態檔、.jar 成品和中繼檔案。)

AWS DevOps

驗證部署。

執行上一個命令之後,AWS 帳戶應包含下列項目:

  • AWS AWS Glue 中的 CQL 複製器 AWS AWS Glue 任務和 AWS AWS Glue 連接器

  • 存放成品的 S3 儲存貯體

  • 目標密鑰空間migration和 Amazon Keyspaces 間中的ledger

AWS DevOps
任務描述所需技能

啟動移轉程序。

要在 AWS Glue 上操作 CQL 複製器,您需要使用--state run命令,然後是一系列參數。這些參數的精確組態主要由您獨特的移轉需求決定。例如,如果您選擇複寫存留時間 (TTL) 值和更新,或者將超過 1 MB 的物件卸載到 Amazon S3,則這些設定可能會有所不同。

若要將工作負載從 Cassandra 叢集複寫到 Amazon Keyspaces,請執行下列命令:

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

您的源密鑰空間和表source_keyspace.source_table在卡桑德拉集群中。您的目標密鑰空間和表位target_keyspace.target_table於 Amazon Keyspaces 間中。此參數--inc-traffic有助於防止增量流量因大量請求而使 Cassandra 叢集和 Amazon Keyspaces 超載。

若要複製更新,請新增--writetime-column regular_column_name至您的命令列。常規列將被用作寫入時間戳的源。

AWS DevOps
任務描述所需技能

在歷史遷移階段驗證遷移卡桑德拉行。

若要取得回填階段期間複製的資料列數目,請執行下列命令:

./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
任務描述所需技能

使用命cqlreplicator令或 AWS Glue 主控台。

若要正常停止移轉程序,請執行下列命令:

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

若要立即停止遷移程序,請使用 AWS Glue 主控台。

AWS DevOps
任務描述所需技能

刪除已部署的資源。

下列命令會刪除 AWS Glue 任務、連接器、S3 儲存貯體和 Keyspaces 表格ledger

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

故障診斷

問題解決方案

AWS Glue 任務失敗並傳回記憶體不足 (OOM) 錯誤。

  1. 變更 Worker 類型 (向上擴充)。例如,G0.25X將變更為G.1XG.1XG.2X。或者,在 CQL複製器中增加每個 AWS Glue 任務 (向外擴充) 的 DPU 數量。

  2. 從中斷移轉程序的位置啟動移轉程序。若要重新啟動失敗的 CQLReplicator 工作,請使用相同的參數重新執行--state run命令。

相關資源

其他資訊

移轉考量

您可以使用 AWS Glue 將您的 Cassandra 工作負載遷移到 Amazon Keyspaces 間,同時保持 Cassandra 來源資料庫在遷移過程中完全正常運作。複寫完成後,您可以選擇將應用程式切斷到 Amazon Keyspaces 間,而 Cassandra 叢集和 Amazon 金 Keyspaces 間之間的複寫延遲最小 (不到分鐘)。為了保持資料一致性,您也可以使用類似的管道將資料從 Amazon Keyspaces 複寫回 Cassandra 叢集。

寫入單位計算

舉個例子,假設您打算在一小時內寫入 500,000,000 的資料列大小為 1 KiB。您需要的 Amazon Keyspaces 寫入單位 (WCU) 總數是根據以下計算:

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

每秒 69,444 WCU 是 1 小時的速率,但您可以為開銷增加一些緩衝。 例如,69,444 * 1.10 = 76,388 WCUs有 10% 的額外負荷。

通過使用 CQL 創建密鑰空間

若要使用 CQL 建立金鑰空間,請執行下列命令:

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)