เกี่ยวกับ Codelab นี้
1 บทนำ
Bigtable คือบริการฐานข้อมูล NoSQL ที่มีประสิทธิภาพสูงและมีการจัดการครบวงจรซึ่งออกแบบมาสำหรับภาระงานด้านการวิเคราะห์และการดำเนินงานที่มีขนาดใหญ่ การย้ายข้อมูลจากฐานข้อมูลที่มีอยู่ เช่น Apache Cassandra ไปยัง Bigtable มักต้องมีการวางแผนอย่างรอบคอบเพื่อลดเวลาหยุดทำงานและผลกระทบต่อแอปพลิเคชัน
โค้ดแล็บนี้แสดงกลยุทธ์การย้ายข้อมูลจาก Cassandra ไปยัง Bigtable โดยใช้เครื่องมือพร็อกซีต่อไปนี้ร่วมกัน
- พร็อกซี Cassandra-Bigtable: อนุญาตให้ไคลเอ็นต์และเครื่องมือ Cassandra (เช่น
cqlsh
หรือไดรเวอร์) โต้ตอบกับ Bigtable โดยใช้โปรโตคอล Cassandra Query Language (CQL) โดยการแปลการค้นหา - พร็อกซีการย้ายข้อมูลแบบไม่มีเวลาหยุดทำงานของ Datastax (ZDM): พร็อกซีแบบโอเพนซอร์สที่อยู่ระหว่างแอปพลิเคชันและบริการฐานข้อมูล (Cassandra ต้นทางและ Bigtable ปลายทางผ่านพร็อกซี Cassandra-Bigtable) โดยจะจัดการการเขียนแบบคู่และจัดการการกำหนดเส้นทางของการเข้าชม ซึ่งช่วยให้การย้ายข้อมูลเป็นไปโดยง่ายโดยมีการเปลี่ยนแปลงแอปพลิเคชันและช่วงพักการทำงานน้อยที่สุด
- 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