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