การย้ายข้อมูลจาก Cassandra ไปยัง Bigtable ด้วยพร็อกซีการเขียนแบบคู่

การย้ายข้อมูลจาก Cassandra ไปยัง Bigtable ด้วยพร็อกซีการเขียนแบบคู่

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ เม.ย. 15, 2025
account_circleเขียนโดย Louis Cheynel

1 บทนำ

Bigtable คือบริการฐานข้อมูล NoSQL ที่มีประสิทธิภาพสูงและมีการจัดการครบวงจรซึ่งออกแบบมาสำหรับภาระงานด้านการวิเคราะห์และการดำเนินงานที่มีขนาดใหญ่ การย้ายข้อมูลจากฐานข้อมูลที่มีอยู่ เช่น Apache Cassandra ไปยัง Bigtable มักต้องมีการวางแผนอย่างรอบคอบเพื่อลดเวลาหยุดทำงานและผลกระทบต่อแอปพลิเคชัน

โค้ดแล็บนี้แสดงกลยุทธ์การย้ายข้อมูลจาก Cassandra ไปยัง Bigtable โดยใช้เครื่องมือพร็อกซีต่อไปนี้ร่วมกัน

  1. พร็อกซี Cassandra-Bigtable: อนุญาตให้ไคลเอ็นต์และเครื่องมือ Cassandra (เช่น cqlsh หรือไดรเวอร์) โต้ตอบกับ Bigtable โดยใช้โปรโตคอล Cassandra Query Language (CQL) โดยการแปลการค้นหา
  2. พร็อกซีการย้ายข้อมูลแบบไม่มีเวลาหยุดทำงานของ Datastax (ZDM): พร็อกซีแบบโอเพนซอร์สที่อยู่ระหว่างแอปพลิเคชันและบริการฐานข้อมูล (Cassandra ต้นทางและ Bigtable ปลายทางผ่านพร็อกซี Cassandra-Bigtable) โดยจะจัดการการเขียนแบบคู่และจัดการการกำหนดเส้นทางของการเข้าชม ซึ่งช่วยให้การย้ายข้อมูลเป็นไปโดยง่ายโดยมีการเปลี่ยนแปลงแอปพลิเคชันและช่วงพักการทำงานน้อยที่สุด
  3. Cassandra Data Migrator (CDM): เครื่องมือโอเพนซอร์สที่ใช้สำหรับการย้ายข้อมูลย้อนหลังจำนวนมากจากคลัสเตอร์ Cassandra ต้นทางไปยังอินสแตนซ์ Bigtable เป้าหมาย

สิ่งที่คุณจะได้เรียนรู้

  • วิธีตั้งค่าคลัสเตอร์ Cassandra พื้นฐานใน Compute Engine
  • วิธีสร้างอินสแตนซ์ Bigtable
  • วิธีทำให้ใช้งานได้และกำหนดค่าพร็อกซี Cassandra-Bigtable เพื่อแมปสคีมา Cassandra กับ Bigtable
  • วิธีติดตั้งใช้งานและกำหนดค่าพร็อกซี ZDM ของ Datastax สำหรับการเขียนแบบคู่
  • วิธีใช้เครื่องมือย้ายข้อมูล Cassandra เพื่อย้ายข้อมูลที่มีอยู่หลายรายการพร้อมกัน
  • เวิร์กโฟลว์โดยรวมสำหรับการย้ายข้อมูลจาก Cassandra ไปยัง Bigtable ที่ใช้พร็อกซี

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน ผู้ใช้ใหม่มีสิทธิ์ทดลองใช้ฟรี
  • ความคุ้นเคยเบื้องต้นเกี่ยวกับแนวคิดของ Google Cloud เช่น โปรเจ็กต์, Compute Engine, เครือข่าย VPC และกฎไฟร์วอลล์ ความรู้พื้นฐานเกี่ยวกับเครื่องมือบรรทัดคำสั่งของ Linux
  • เข้าถึงเครื่องที่ติดตั้งและกำหนดค่า gcloud CLI แล้ว หรือใช้ Google Cloud Shell

ในโค้ดแล็บนี้ เราจะใช้เครื่องเสมือน (VM) ใน Compute Engine ภายในเครือข่ายและภูมิภาค VPC เดียวกันเป็นหลักเพื่อให้การทํางานของเครือข่ายง่ายขึ้น เราขอแนะนำให้ใช้ที่อยู่ IP ภายใน

2 ตั้งค่าสภาพแวดล้อม

1. เลือกหรือสร้างโปรเจ็กต์ Google Cloud

ไปที่คอนโซล Google Cloud แล้วเลือกโปรเจ็กต์ที่มีอยู่หรือสร้างโปรเจ็กต์ใหม่ จดรหัสโปรเจ็กต์ไว้

2. เปิดใช้ API ที่จําเป็น

ตรวจสอบว่าได้เปิดใช้ Compute Engine API และ Bigtable API สำหรับโปรเจ็กต์ของคุณแล้ว

gcloud services enable compute.googleapis.com bigtable.googleapis.com bigtableadmin.googleapis.com --project=<your-project-id>

แทนที่ ด้วยรหัสโปรเจ็กต์จริง

3. เลือกภูมิภาคและโซน

เลือกภูมิภาคและโซนสำหรับทรัพยากร เราจะใช้ us-central1 และ us-central1-c เป็นตัวอย่าง กําหนดค่าเหล่านี้เป็นตัวแปรสภาพแวดล้อมเพื่อความสะดวก

export PROJECT_ID="<your-project-id>"
export REGION="us-central1"
export ZONE="us-central1-c"

gcloud config set project $PROJECT_ID
gcloud config set compute/region $REGION
gcloud config set compute/zone $ZONE

4. กำหนดค่ากฎไฟร์วอลล์

เราต้องอนุญาตให้การสื่อสารระหว่าง VM ภายในเครือข่าย VPC เริ่มต้นในพอร์ตต่างๆ ดังนี้

  • พอร์ต CQL ของ Cassandra/พร็อกซี: 9042
  • พอร์ตการตรวจสอบประสิทธิภาพของพร็อกซี ZDM: 14001
  • SSH: 22

สร้างกฎไฟร์วอลล์เพื่ออนุญาตการเข้าชมภายในในพอร์ตเหล่านี้ เราจะใช้แท็ก cassandra-migration เพื่อใช้กฎนี้กับ VM ที่เกี่ยวข้องได้อย่างง่ายดาย

gcloud compute firewall-rules create allow-migration-internal \
--network=default \
--action=ALLOW \
--rules=tcp:22,tcp:9042,tcp:14001 \
--source-ranges=10.128.0.0/9 # Adjust if using a custom VPC/IP range \
--target-tags=cassandra-migration

3 ติดตั้งใช้งานคลัสเตอร์ Cassandra (Origin)

ในโค้ดแล็บนี้ เราจะสร้างคลัสเตอร์ Cassandra แบบโหนดเดียวที่เรียบง่ายบน Compute Engine ในสถานการณ์จริง คุณจะเชื่อมต่อกับคลัสเตอร์ที่มีอยู่

1. สร้าง VM ใน GCE สําหรับ Cassandra

gcloud compute instances create cassandra-origin \
--machine-type=e2-medium \
--image-family=ubuntu-2004-lts \
--image-project=ubuntu-os-cloud \
--tags=cassandra-migration \
--boot-disk-size=20GB

2. ติดตั้ง Cassandra

# Install Java (Cassandra dependency)
sudo apt-get update
sudo apt-get install -y openjdk-11-jre-headless

# Add Cassandra repository
echo "deb [https://debian.cassandra.apache.org](https://debian.cassandra.apache.org) 41x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl [https://downloads.apache.org/cassandra/KEYS](https://downloads.apache.org/cassandra/KEYS) | sudo apt-key add -

# Install Cassandra
sudo apt-get update
sudo apt-get install -y cassandra

3. สร้างคีย์สเปซและตาราง

เราจะใช้ตัวอย่างตารางพนักงานและสร้างคีย์สเปซชื่อ "zdmbigtable"

cd ~/apache-cassandra
bin/cqlsh <your-localhost-ip? 9042  #starts the cql shell

ภายใน cqlsh

-- Create keyspace (adjust replication for production)
CREATE KEYSPACE zdmbigtable WITH replication = {'class':'SimpleStrategy', 'replication_factor':1};

-- Use the keyspace
USE zdmbigtable;

-- Create the employee table
CREATE TABLE employee (
    name text PRIMARY KEY,
    age bigint,
    code int,
    credited double,
    balance float,
    is_active boolean,
    birth_date timestamp
);

-- Exit cqlsh
EXIT;

ปล่อยเซสชัน SSH ไว้หรือจดที่อยู่ IP ของ VM นี้ (ชื่อโฮสต์ -I)

4 ตั้งค่า Bigtable (เป้าหมาย)

ระยะเวลา 0:01

สร้างอินสแตนซ์ Bigtable เราจะใช้ zdmbigtable เป็นรหัสอินสแตนซ์

gcloud bigtable instances create zdmbigtable \ 
--display-name="ZDM Bigtable Target" \ 
--cluster=bigtable-c1 \ 
--cluster-zone=$ZONE \ 
--cluster-num-nodes=1 # Use 1 node for dev/testing; scale as needed

สคริปต์การตั้งค่าพร็อกซี Cassandra-Bigtable จะสร้างตาราง Bigtable ในภายหลัง

5 ตั้งค่าพร็อกซี Cassandra-Bigtable

1. สร้าง VM ของ Compute Engine สําหรับพร็อกซี Cassandra-Bigtable

gcloud compute instances create bigtable-proxy-vm \ 
--machine-type=e2-medium \
--image-family=ubuntu-2004-lts \
--image-project=ubuntu-os-cloud \
--tags=cassandra-migration \
--boot-disk-size=20GB

SSH เข้าสู่ bigtable-proxy-vm

gcloud compute ssh bigtable-proxy-vm

ภายใน VM

# Install Git and Go
sudo apt-get update
sudo apt-get install -y git golang-go

# Clone the proxy repository
# Replace with the actual repository URL if different
git clone https://github.com/GoogleCloudPlatform/cloud-bigtable-ecosystem.git
cd cassandra-to-bigtable-proxy/

# Set Go environment variables
export GOPATH=$HOME/go
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin

2. กำหนดค่าพร็อกซี

nano config.yaml

อัปเดตตัวแปรต่อไปนี้ สําหรับการกําหนดค่าขั้นสูงเพิ่มเติม ให้ใช้ตัวอย่างนี้ที่ให้ไว้ใน GitHub

#!/bin/bash
cassandraToBigtableConfigs
:
  # Global default GCP Project ID
  projectId: <your-project-id>

listeners
:
- name: cluster1
  port: 9042
  bigtable:
    #If you want to use multiple instances then pass the instance names by comma seperated
    #Instance name should not contain any special characters except underscore(_)
    instanceIds: zdmbigtable

    # Number of grpc channels to be used for Bigtable session.
    Session:
      grpcChannels: 4

otel
:
  # Set enabled to true or false for OTEL metrics/traces/logs.
  enabled: False

  # Name of the collector service to be setup as a sidecar
  serviceName: cassandra-to-bigtable-otel-service

  healthcheck:
    # Enable the health check in this proxy application config only if the
    # "health_check" extension is added to the OTEL collector service configuration.
    #
    # Recommendation:
    # Enable the OTEL health check if you need to verify the collector's availability
    # at the start of the application. For development or testing environments, it can
    # be safely disabled to reduce complexity.

    # Enable/Disable Health Check for OTEL, Default 'False'.
    enabled: False
    # Health check endpoint for the OTEL collector service
    endpoint: localhost:13133
  metrics:
    # Collector service endpoint
    endpoint: localhost:4317

  traces:
    # Collector service endpoint
    endpoint: localhost:4317
    #Sampling ratio should be between 0 and 1. Here 0.05 means 5/100 Sampling ratio.
    samplingRatio: 1

loggerConfig
:
  # Specifies the type of output, here it is set to 'file' indicating logs will be written to a file.
  # Value of `outputType` should be `file` for file type or `stdout` for standard output.
  # Default value is `stdout`.
  outputType: stdout
  # Set this only if the outputType is set to `file`.
  # The path and name of the log file where logs will be stored. For example, output.log, Required Key.
  # Default `/var/log/cassandra-to-spanner-proxy/output.log`.
  fileName: output/output.log
  # Set this only if the outputType is set to `file`.
  # The maximum size of the log file in megabytes before it is rotated. For example, 500 for 500 MB.
  maxSize: 10
  # Set this only if the outputType is set to `file`.
  # The maximum number of backup log files to keep. Once this limit is reached, the oldest log file will be deleted.
  maxBackups: 2
  # Set this only if the outputType is set to `file`.
  # The maximum age in days for a log file to be retained. Logs older than this will be deleted. Required Key.
  # Default 3 days
  maxAge: 1

  # Set this only if the outputType is set to `file`.
  # Default value is set to 'False'. Change the value to 'True', if log files are required to be compressed.
  compress: True

บันทึกและปิดไฟล์ (ctrl+X ตามด้วย Y แล้วตามด้วย Enter ใน nano)

3. เริ่มพร็อกซี Cassandra-Bigtable

เริ่มพร็อกซีเซิร์ฟเวอร์

# At the root of the cassandra-to-bigtable-proxy directory
go run proxy.go

พร็อกซีจะเริ่มต้นและรอการเชื่อมต่อ CQL ที่เข้ามาที่พอร์ต 9042 เรียกใช้เซสชันเทอร์มินัลนี้ต่อไป จดที่อยู่ IP ของ VM นี้ (ชื่อโฮสต์ -I)

4. สร้างตารางผ่าน CQL

เชื่อมต่อ cqlsh กับที่อยู่ IP ของ VM พร็อกซี Cassandra-Bigtable

ใน cqlsh ให้เรียกใช้คำสั่งต่อไปนี้

-- Create the employee table
CREATE TABLE zdmbigtable.employee (
    name text PRIMARY KEY,
    age bigint,
    code int,
    credited double,
    balance float,
    is_active boolean,
    birth_date timestamp
);

ยืนยันใน Google Cloud Console ว่าตารางพนักงานและตารางข้อมูลเมตาอยู่ในอินสแตนซ์ Bigtable

6 ตั้งค่าพร็อกซี ZDM

ZDM Proxy ต้องใช้เครื่องอย่างน้อย 2 เครื่อง ได้แก่ โหนดพร็อกซีอย่างน้อย 1 โหนดที่จัดการการรับส่งข้อมูล และ "Jumphost" ที่ใช้สำหรับการติดตั้งใช้งานและการจัดเตรียมผ่าน Ansible

1. สร้าง VM ของ Compute Engine สําหรับพร็อกซี ZDM

เราต้องการ VM 2 เครื่อง ได้แก่ zdm-proxy-jumphost และ zdm-proxy-node-1

# Jumphost VM 
gcloud compute instances create zdm-jumphost \
--machine-type=e2-medium \
--image-family=ubuntu-2004-lts \
--image-project=ubuntu-os-cloud \
--tags=cassandra-migration \
--boot-disk-size=20GB

# Proxy Node VM 
gcloud compute instances create zdm-proxy-node-1 \
--machine-type=e2-standard-8 \
--image-family=ubuntu-2004-lts \
--image-project=ubuntu-os-cloud \
--tags=cassandra-migration \
--boot-disk-size=20GB

จดที่อยู่ IP ของ VM ทั้ง 2 เครื่อง

2. เตรียม Jumphost

SSH เข้าสู่ zdm-jumphost

gcloud compute ssh zdm-jumphost
# Install Git and Ansible

sudo apt
-get update
sudo apt
-get install -y git ansible

ภายใน Jumphost

git clone https:\/\/github.com/datastax/zdm-proxy-automation.git 

cd zdm
-proxy-automation/ansible/

แก้ไขไฟล์การกําหนดค่าหลัก vars/zdm_proxy_cluster_config.yml

อัปเดต origin_contact_points และ target_contact_points ด้วยที่อยู่ IP ภายในของ VM Cassandra และ VM พร็อกซี Cassandra-Bigtable ตามลำดับ ปล่อยการตรวจสอบสิทธิ์ไว้โดยไม่ได้ใส่ความคิดเห็น เนื่องจากเราไม่ได้ตั้งค่าไว้

##############################
#### ORIGIN CONFIGURATION ####
##############################
## Origin credentials (leave commented if no auth)
# origin_username: ...
# origin_password: ...

## Set the following two parameters only if Origin is a self-managed, non-Astra cluster
origin_contact_points
: <Your-Cassandra-VM-Internal-IP> # Replace!
origin_port
: 9042

##############################
#### TARGET CONFIGURATION ####
##############################
## Target credentials (leave commented if no auth)
# target_username: ...
# target_password: ...

## Set the following two parameters only if Target is a self-managed, non-Astra cluster
target_contact_points
: <Your-Bigtable-Proxy-VM-Internal-IP> # Replace!
target_port
: 9042

# --- Other ZDM Proxy settings can be configured below ---
# ... (keep defaults for this codelab)

บันทึกและปิดไฟล์นี้

3. ทำให้ ZDM Proxy ใช้งานได้โดยใช้ Ansible

เรียกใช้ Ansible Playbook จากไดเรกทอรี ansible ใน Jumphost โดยทำดังนี้

ansible-playbook deploy_zdm_proxy.yml -i zdm_ansible_inventory

คำสั่งนี้จะติดตั้งซอฟต์แวร์ที่จำเป็น (เช่น Docker) ในโหนดพร็อกซี (zdm-proxy-node-1), ดึงอิมเมจ Docker ของพร็อกซี ZDM และเริ่มคอนเทนเนอร์พร็อกซีด้วยการกำหนดค่าที่คุณระบุ

4. ตรวจสอบประสิทธิภาพของ ZDM Proxy

ตรวจสอบความพร้อมใช้งานของปลายทางพร็อกซี ZDM ที่ทำงานบน zdm-proxy-node-1 (พอร์ต 14001) จาก Jumphost ดังนี้

# Replace <zdm-proxy-node-1-internal-ip> with the actual internal IP.
curl
-G http://<zdm-proxy-node-1-internal-ip>:14001/health/readiness

คุณควรเห็นเอาต์พุตที่คล้ายกับนี้ ซึ่งระบุว่าทั้งต้นทาง (Cassandra) และปลายทาง (พร็อกซี Cassandra-Bigtable) ทำงานอยู่

{
 
"OriginStatus": {
   
"Addr": "<Your-Cassandra-VM-Internal-IP>:9042",
   
"CurrentFailureCount": 0,
   
"FailureCountThreshold": 1,
   
"Status": "UP"
 
},
 
"TargetStatus": {
   
"Addr": "<Your-Bigtable-Proxy-VM-Internal-IP>:9042",
   
"CurrentFailureCount": 0,
   
"FailureCountThreshold": 1,
   
"Status": "UP"
 
},
 
"Status": "UP"
}

7 กำหนดค่าแอปพลิเคชันและเริ่มการเขียนแบบคู่

ระยะเวลา 0:05

ในขั้นตอนนี้ของการย้ายข้อมูลจริง คุณจะต้องกำหนดค่าแอปพลิเคชันใหม่ให้ชี้ไปยังที่อยู่ IP ของโหนดพร็อกซี ZDM (เช่น :9042) แทนการเชื่อมต่อกับ Cassandra โดยตรง

เมื่อแอปพลิเคชันเชื่อมต่อกับ ZDM Proxy: การอ่านจะแสดงจากต้นทาง (Cassandra) โดยค่าเริ่มต้น ระบบจะส่งการเขียนไปยังทั้งต้นทาง (Cassandra) และปลายทาง (Bigtable ผ่านพร็อกซี Cassandra-Bigtable) ซึ่งจะช่วยให้แอปพลิเคชันทำงานต่อไปได้ตามปกติ ในขณะเดียวกันก็มีการเขียนข้อมูลใหม่ลงในทั้ง 2 ฐานข้อมูลพร้อมกัน คุณสามารถทดสอบการเชื่อมต่อโดยใช้ cqlsh ที่ชี้ไปยังพร็อกซี ZDM จาก Jumphost หรือ VM อื่นในเครือข่ายได้โดยทำดังนี้

Cqlsh <zdm-proxy-node-1-ip-address> 9042

ลองแทรกข้อมูลบางส่วน

INSERT INTO zdmbigtable.employee (name, age, is_active) VALUES ('Alice', 30, true); 
SELECT * FROM employee WHERE name = 'Alice';

ข้อมูลนี้ควรเขียนลงในทั้ง Cassandra และ Bigtable คุณสามารถยืนยันข้อมูลนี้ใน Bigtable ได้โดยไปที่ Google Cloud Console แล้วเปิดเครื่องมือแก้ไขการค้นหา Bigtable สําหรับอินสแตนซ์ เรียกใช้การค้นหา "SELECT * FROM employee" และคุณควรเห็นข้อมูลที่แทรกล่าสุด

8 ย้ายข้อมูลย้อนหลังโดยใช้เครื่องมือย้ายข้อมูล Cassandra

เมื่อการเขียนแบบคู่ทำงานกับข้อมูลใหม่แล้ว ให้ใช้เครื่องมือย้ายข้อมูล Cassandra (CDM) เพื่อคัดลอกข้อมูลประวัติที่มีอยู่จาก Cassandra ไปยัง Bigtable

1. สร้าง VM ของ Compute Engine สำหรับ CDM

VM นี้ต้องมีหน่วยความจําเพียงพอสําหรับ Spark

gcloud compute instances create cdm-migrator-vm \
--machine-type=e2-medium \
--image-family=ubuntu-2004-lts \
--image-project=ubuntu-os-cloud \
--tags=cassandra-migration \
--boot-disk-size=40GB

2. ติดตั้งข้อกําหนดเบื้องต้น (Java 11, Spark)

SSH เข้าสู่ cdm-migrator-vm โดยทำดังนี้

gcloud compute ssh cdm-migrator-vm

ใน VM

# Install Java 11 
sudo apt-get update
sudo apt-get install -y openjdk-11-jdk
 
# Verify Java installation
java -version

# Download and Extract Spark (Using version 3.5.3 as requested)
# Check the Apache Spark archives for the correct URL if needed

wget  [https://archive.apache.org/dist/spark/spark-3.5.3/spark-3.5.3-bin-hadoop3-scala2.13.tgz](https://archive.apache.org/dist/spark/spark-3.5.3/spark-3.5.3-bin-hadoop3-scala2.13.tgz) tar -xvzf spark-3.5.3-bin-hadoop3-scala2.13.tgz
 
export SPARK_HOME=$PWD/spark-3.5.3-bin-hadoop3-scala2.13
export PATH=$PATH:$SPARK_HOME/bin

3. ดาวน์โหลดเครื่องมือย้ายข้อมูล Cassandra

ดาวน์โหลดไฟล์ jar ของเครื่องมือ CDM ตรวจสอบหน้ารุ่น GitHub ของเครื่องมือย้ายข้อมูล Cassandra เพื่อดู URL ที่ถูกต้องของเวอร์ชันที่ต้องการ

# Example using version 5.2.2 - replace URL if needed
wget https://github.com/datastax/cassandra-data-migrator/releases/download/v5.2.2/cassandra-data-migrator-5.2.2.jar)

4. กำหนดค่า CDM

สร้างไฟล์พร็อพเพอร์ตี้ชื่อ cdm.properties

Nano cdm.properties

วางการกําหนดค่าต่อไปนี้โดยแทนที่ที่อยู่ IP และปิดใช้ฟีเจอร์ TTL/Writetime เนื่องจาก Bigtable ไม่รองรับฟีเจอร์เหล่านี้โดยตรงในลักษณะเดียวกัน ปล่อยการคอมเมนต์การตรวจสอบสิทธิ์ไว้

# Origin Cassandra Connection 
spark
.cdm.connect.origin.host <Your-Cassandra-VM-IP-Address> # Replace!
spark
.cdm.connect.origin.port 9042
spark
.cdm.connect.origin.username cassandra # Leave default, or set if auth is enabled #
spark
.cdm.connect.origin.password cassandra # Leave default, or set if auth is enabled #

# Target Bigtable (via Cassandra-Bigtable Proxy)
Connection spark.cdm.connect.target.host <Your-Bigtable-Proxy-VM-IP-Address> # Replace!
spark
.cdm.connect.target.port 9042
spark
.cdm.connect.target.username cassandra # Leave default, or set if auth is enabled #
spark
.cdm.connect.target.password cassandra # Leave default, or set if auth is enabled #

# Disable TTL/Writetime features (Important for Bigtable compatibility via Proxy)
spark
.cdm.feature.origin.ttl.automatic false
spark
.cdm.feature.origin.writetime.automatic false
spark
.cdm.feature.target.ttl.automatic false
spark
.cdm.feature.target.writetime.automatic false

บันทึกและปิดไฟล์

5. เรียกใช้งานการย้ายข้อมูล

ดำเนินการย้ายข้อมูลโดยใช้ spark-submit คำสั่งนี้จะบอกให้ Spark เรียกใช้ไฟล์ jar ของ CDM โดยใช้ไฟล์พร็อพเพอร์ตี้และระบุคีย์สเปซและตารางที่จะย้ายข้อมูล ปรับการตั้งค่าหน่วยความจำ (–driver-memory, –executor-memory) ตามขนาด VM และปริมาณข้อมูล

ตรวจสอบว่าคุณอยู่ในไดเรกทอรีที่มีไฟล์ jar และไฟล์พร็อพเพอร์ตี้ CDM แทนที่ "cassandra-data-migrator-5.2.2.jar" หากคุณดาวน์โหลดเวอร์ชันอื่น

./spark-3.5.3-bin-hadoop3-scala2.13/bin/spark-submit \ --properties-file cdm.properties \ --master "local[*]" \ --driver-memory 4G \ --executor-memory 4G \ --class com.datastax.cdm.job.Migrate \ cassandra-data-migrator-5.2.2.jar &> cdm_migration_$(date +%Y%m%d_%H%M).log

การย้ายข้อมูลจะทำงานอยู่เบื้องหลัง และระบบจะเขียนบันทึกลงใน cdm_migration_... .log ตรวจสอบไฟล์บันทึกเพื่อดูความคืบหน้าและข้อผิดพลาด

tail -f cdm_migration_*.log

6. ยืนยันการย้ายข้อมูล

เมื่องาน CDM เสร็จสมบูรณ์แล้ว ให้ตรวจสอบว่าข้อมูลย้อนหลังอยู่ใน Bigtable เนื่องจากพร็อกซี Cassandra-Bigtable อนุญาตให้อ่าน CQL คุณจึงใช้ cqlsh ที่เชื่อมต่อกับพร็อกซี ZDM (ซึ่งกำหนดเส้นทางการอ่านไปยังเป้าหมายหลังจากการย้ายข้อมูล หรือกำหนดค่าให้ทำเช่นนั้นได้) หรือพร็อกซี Cassandra-Bigtable โดยตรงเพื่อค้นหาข้อมูลอีกครั้งได้ เชื่อมต่อผ่านพร็อกซี ZDM

cqlsh <zdm-proxy-node-1-ip-address> 9042

ภายใน cqlsh

SELECT COUNT(*) FROM zdmbigtable.employee; -- Check row count matches origin 
SELECT * FROM employee LIMIT 10; -- Check some sample data

หรือจะใช้เครื่องมือ cbt (หากติดตั้งใน CDM VM หรือ Cloud Shell) เพื่อค้นหาข้อมูลใน Bigtable โดยตรงก็ได้ โดยทำดังนี้

# First, install cbt if needed
# gcloud components update
# gcloud components install cbt

# Then lookup a specific row (replace 'some_employee_name' with an actual primary key)
cbt
-project $PROJECT_ID -instance zdmbigtable lookup employee some_employee_name

9 Cutover (แนวคิด)

หลังจากยืนยันความสอดคล้องของข้อมูลระหว่าง Cassandra กับ Bigtable อย่างละเอียดแล้ว คุณสามารถดำเนินการเปลี่ยนผ่านครั้งสุดท้ายได้

เมื่อใช้ ZDM Proxy การเปลี่ยนไปใช้ระบบใหม่จะเกี่ยวข้องกับการกำหนดค่าใหม่ให้อ่านจากเป้าหมาย (Bigtable) เป็นหลักแทนที่จะเป็นต้นทาง (Cassandra) ซึ่งโดยปกติแล้วจะทำผ่านการกำหนดค่าของ ZDM Proxy ซึ่งจะเปลี่ยนการเข้าชมแบบอ่านของแอปพลิเคชันไปยัง Bigtable อย่างมีประสิทธิภาพ

เมื่อมั่นใจแล้วว่า Bigtable แสดงการเข้าชมทั้งหมดอย่างถูกต้องแล้ว คุณจะทำสิ่งต่อไปนี้ได้

  • หยุดการเขียนคู่โดยกำหนดค่าพร็อกซี ZDM ใหม่
  • เลิกใช้งานคลัสเตอร์ Cassandra เดิม
  • นำ ZDM Proxy ออกและให้แอปพลิเคชันเชื่อมต่อกับพร็อกซี Cassandra-Bigtable โดยตรง หรือใช้ไคลเอ็นต์ CQL ของ Bigtable โดยตรงสำหรับ Java

รายละเอียดของการกําหนดค่าพร็อกซี ZDM ใหม่สําหรับการเปลี่ยนผ่านอยู่นอกเหนือโค้ดแล็บพื้นฐานนี้ แต่มีรายละเอียดอยู่ในเอกสารประกอบของ Datastax ZDM

10 ล้างข้อมูล

โปรดลบทรัพยากรที่สร้างระหว่างโค้ดแล็บนี้เพื่อหลีกเลี่ยงการเรียกเก็บเงิน

1. ลบ VM ของ Compute Engine

gcloud compute instances delete cassandra-origin-vm zdm-proxy-jumphost zdm-proxy-node-1 bigtable-proxy-vm cdm-migrator-vm --zone=$ZONE --quiet

2. ลบอินสแตนซ์ Bigtable

gcloud bigtable instances delete zdmbigtable

3. ลบกฎไฟร์วอลล์

gcloud compute firewall-rules delete allow-migration-internal

4. ลบฐานข้อมูล Cassandra (หากติดตั้งในเครื่องหรือเก็บไว้ถาวร)

หากคุณติดตั้ง Cassandra นอก VM ของ Compute Engine ที่สร้างขึ้นที่นี่ ให้ทำตามขั้นตอนที่เหมาะสมเพื่อนำข้อมูลออกหรือถอนการติดตั้ง Cassandra

11 ยินดีด้วย

คุณได้ดำเนินการตามกระบวนการตั้งค่าเส้นทางการย้ายข้อมูลแบบพร็อกซีจาก Apache Cassandra ไปยัง Bigtable เรียบร้อยแล้ว

คุณได้เรียนรู้วิธีดำเนินการต่อไปนี้

ติดตั้งใช้งาน Cassandra และ Bigtable

  • กำหนดค่าพร็อกซี Cassandra-Bigtable เพื่อใช้งานร่วมกันได้กับ CQL
  • ติดตั้งใช้งาน Datastax ZDM Proxy เพื่อจัดการการเขียนแบบคู่และการเข้าชม
  • ใช้เครื่องมือย้ายข้อมูล Cassandra เพื่อย้ายข้อมูลย้อนหลัง

แนวทางนี้ช่วยให้ย้ายข้อมูลได้โดยไม่หยุดทำงานเป็นเวลานานและไม่ต้องเปลี่ยนแปลงโค้ดโดยใช้เลเยอร์พร็อกซี

ขั้นตอนถัดไป

  • สํารวจเอกสารประกอบของ Bigtable
  • โปรดดูเอกสารประกอบของ Datastax ZDM Proxy สําหรับการกําหนดค่าขั้นสูงและขั้นตอนการเปลี่ยน
  • ดูรายละเอียดเพิ่มเติมได้ในที่เก็บข้อมูลพร็อกซี Cassandra-Bigtable
  • ตรวจสอบที่เก็บข้อมูลเครื่องมือย้ายข้อมูล Cassandra เพื่อดูการใช้งานขั้นสูง
  • ลองใช้ Codelab อื่นๆ ของ Google Cloud