একটি ডুয়াল-রাইট প্রক্সি সহ ক্যাসান্দ্রা থেকে বিগটেবলে স্থানান্তর

১. ভূমিকা

বিগটেবল হলো একটি সম্পূর্ণভাবে পরিচালিত, উচ্চ-কর্মক্ষমতাসম্পন্ন NoSQL ডেটাবেস পরিষেবা, যা বৃহৎ বিশ্লেষণাত্মক এবং পরিচালনমূলক কাজের জন্য ডিজাইন করা হয়েছে। অ্যাপাচি ক্যাসান্ড্রার মতো বিদ্যমান ডেটাবেস থেকে বিগটেবলে স্থানান্তরের জন্য প্রায়শই ডাউনটাইম এবং অ্যাপ্লিকেশনের উপর প্রভাব কমানোর লক্ষ্যে সতর্ক পরিকল্পনার প্রয়োজন হয়।

এই কোডল্যাবটি বিভিন্ন প্রক্সি টুলের সমন্বয়ে ক্যাসান্ড্রা থেকে বিগটেবলে মাইগ্রেশনের একটি কৌশল প্রদর্শন করে:

  1. ক্যাসান্ড্রা-বিগটেবল প্রক্সি: এটি ক্যাসান্ড্রা ক্লায়েন্ট এবং টুলসকে (যেমন cqlsh বা ড্রাইভার) কোয়েরি অনুবাদের মাধ্যমে ক্যাসান্ড্রা কোয়েরি ল্যাঙ্গুয়েজ (CQL) প্রোটোকল ব্যবহার করে বিগটেবলের সাথে যোগাযোগ করতে সক্ষম করে।
  2. ডেটাস্ট্যাক্স জিরো ডাউনটাইম মাইগ্রেশন (ZDM) প্রক্সি: এটি একটি ওপেন-সোর্স প্রক্সি যা আপনার অ্যাপ্লিকেশন এবং ডাটাবেস সার্ভিসের (অরিজিন ক্যাসান্ড্রা এবং ক্যাসান্ড্রা-বিগটেবল প্রক্সির মাধ্যমে টার্গেট বিগটেবল) মধ্যে সংযোগ স্থাপন করে। এটি ডুয়াল রাইট পরিচালনা করে এবং ট্র্যাফিক রাউটিং ব্যবস্থাপনা করে, যার ফলে অ্যাপ্লিকেশনে ন্যূনতম পরিবর্তন এবং ডাউনটাইমের মাধ্যমে মাইগ্রেশন সম্ভব হয়।
  3. ক্যাসান্ড্রা ডেটা মাইগ্রেটর (সিডিএম): একটি ওপেন-সোর্স টুল যা উৎস ক্যাসান্ড্রা ক্লাস্টার থেকে লক্ষ্য বিগটেবল ইনস্ট্যান্সে ঐতিহাসিক ডেটা একত্রে স্থানান্তরের জন্য ব্যবহৃত হয়।

আপনি যা শিখবেন

  • কম্পিউট ইঞ্জিনে কীভাবে একটি বেসিক ক্যাসান্ড্রা ক্লাস্টার সেট আপ করবেন।
  • কীভাবে একটি Bigtable ইনস্ট্যান্স তৈরি করবেন।
  • ক্যাসান্ড্রা স্কিমাকে বিগটেবলের সাথে ম্যাপ করার জন্য ক্যাসান্ড্রা-বিগটেবল প্রক্সি কীভাবে ডেপ্লয় এবং কনফিগার করতে হয়।
  • ডুয়াল রাইটের জন্য ডেটাস্ট্যাক্স জেডডিএম প্রক্সি কীভাবে স্থাপন ও কনফিগার করবেন।
  • বিদ্যমান ডেটা একযোগে স্থানান্তর করতে কীভাবে ক্যাসান্ড্রা ডেটা মাইগ্রেটর টুলটি ব্যবহার করবেন।
  • প্রক্সি-ভিত্তিক ক্যাসান্ড্রা থেকে বিগটেবল মাইগ্রেশনের সামগ্রিক কার্যপ্রবাহ।

আপনার যা যা লাগবে

  • বিলিং সুবিধাসহ একটি গুগল ক্লাউড প্রজেক্ট। নতুন ব্যবহারকারীরা বিনামূল্যে ট্রায়াল পাবেন।
  • গুগল ক্লাউডের প্রজেক্ট, কম্পিউট ইঞ্জিন, ভিপিসি নেটওয়ার্ক এবং ফায়ারওয়াল রুলসের মতো ধারণাগুলোর সাথে প্রাথমিক পরিচিতি। লিনাক্স কমান্ড-লাইন টুলগুলোর সাথে প্রাথমিক পরিচিতি।
  • যে মেশিনে gcloud CLI ইনস্টল ও কনফিগার করা আছে, সেটিতে অ্যাক্সেস করুন, অথবা গুগল ক্লাউড শেল ব্যবহার করুন।

এই কোডল্যাবের জন্য, নেটওয়ার্কিং সহজ করতে আমরা প্রধানত একই VPC নেটওয়ার্ক ও অঞ্চলের মধ্যে Compute Engine-এর ভার্চুয়াল মেশিন (VM) ব্যবহার করব। অভ্যন্তরীণ আইপি অ্যাড্রেস ব্যবহার করার পরামর্শ দেওয়া হচ্ছে।

২. আপনার পরিবেশ প্রস্তুত করুন

১. একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন

গুগল ক্লাউড কনসোলে যান এবং একটি বিদ্যমান প্রজেক্ট নির্বাচন করুন অথবা একটি নতুন প্রজেক্ট তৈরি করুন। আপনার প্রজেক্ট আইডিটি লিখে রাখুন।

২. একটি অঞ্চল ও জোন নির্বাচন করুন

আপনার রিসোর্সগুলির জন্য একটি অঞ্চল এবং জোন নির্বাচন করুন। আমরা উদাহরণ হিসেবে 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

৩. প্রয়োজনীয় এপিআইগুলো সক্রিয় করুন

আপনার প্রোজেক্টের জন্য Compute Engine API এবং Bigtable API সক্রিয় করা আছে কিনা তা নিশ্চিত করুন।

gcloud services enable compute.googleapis.com bigtable.googleapis.com bigtableadmin.googleapis.com

৪. ফায়ারওয়াল নিয়মাবলী কনফিগার করুন

আমাদের ডিফল্ট ভিপিসি নেটওয়ার্কের মধ্যে কয়েকটি পোর্টে ভিএমগুলোর মধ্যে যোগাযোগের অনুমতি দিতে হবে:

  • ক্যাসান্ড্রা/প্রক্সি সি কিউ এল পোর্ট: ৯০৪২
  • জেডডিএম প্রক্সি হেলথ চেক পোর্ট: ১৪০০১
  • এসএসএইচ: ২২

এই পোর্টগুলিতে অভ্যন্তরীণ ট্র্যাফিক অনুমোদনের জন্য একটি ফায়ারওয়াল নিয়ম তৈরি করুন। প্রাসঙ্গিক ভিএমগুলিতে এই নিয়মটি সহজে প্রয়োগ করার জন্য আমরা cassandra-migration ট্যাগটি ব্যবহার করব।

gcloud compute firewall-rules create allow-migration-internal \
--network=default \
--action=ALLOW \
--rules=tcp:22,tcp:9042,tcp:7000,tcp:14001 \
--source-ranges=10.0.0.0/8 \
--target-tags=cassandra-migration

৩. ক্যাসান্ড্রা ক্লাস্টার স্থাপন করুন (অরিজিন)

এই কোডল্যাবের জন্য, আমরা Compute Engine-এ একটি সাধারণ সিঙ্গেল-নোড ক্যাসান্ড্রা ক্লাস্টার সেট আপ করব। বাস্তব ক্ষেত্রে, আপনি আপনার বিদ্যমান ক্লাস্টারের সাথে সংযোগ স্থাপন করবেন।

১. ক্যাসান্ড্রার জন্য একটি GCE VM তৈরি করুন

gcloud compute instances create cassandra-origin \
--machine-type=e2-medium \
--image-family=ubuntu-2204-lts \
--image-project=ubuntu-os-cloud \
--tags=cassandra-migration \
--boot-disk-size=20GB \
--scopes=cloud-platform \
--zone="$ZONE"

আপনার ক্যাসান্ড্রা ইনস্ট্যান্সে SSH করুন

gcloud compute ssh --zone="$ZONE" "cassandra-origin"

২. ক্যাসান্ড্রা ইনস্টল করুন

# 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 41x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add -

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

# (Optional) Verify Cassandra is running
sudo systemctl status cassandra

৩. ক্যাসান্ড্রা কনফিগার করুন

প্রাইভেট নেটওয়ার্কের মধ্যে অ্যাক্সেসযোগ্য করার জন্য আমাদের ক্যাসান্ড্রা কনফিগার করতে হবে।

নিম্নলিখিত কমান্ডটি চালিয়ে ক্যাসান্ড্রা-অরিজিনের প্রাইভেট আইপি সংগ্রহ করুন:

hostname -I

ক্যাসান্ড্রা কনফিগটি এডিট করুন, আপনাকে কোনো নতুন কনফিগ লাইন যোগ করতে হবে না - শুধু আগে থেকে থাকা লাইনগুলো আপডেট করুন:

sudo vim /etc/cassandra/cassandra.yaml
  1. seed_provider.parameters.seeds কে "CASSANDRA_ORIGIN_PRIVATE_IP:7000" -এ সেট করুন।
  2. rpc_address CASSANDRA_ORIGIN_PRIVATE_IP তে সেট করুন
  3. listen_address CASSANDRA_ORIGIN_PRIVATE_IP তে সেট করুন

ফাইলটি সংরক্ষণ করুন।

অবশেষে, কনফিগারেশনের পরিবর্তনগুলো লোড করার জন্য ক্যাসান্ড্রা রিস্টার্ট করুন:

sudo systemctl restart cassandra

# (Optional) Verify Cassandra is running
sudo systemctl status cassandra

৪. একটি কীস্পেস এবং টেবিল তৈরি করুন

আমরা একটি এমপ্লয়ি টেবিলের উদাহরণ ব্যবহার করব এবং "zdmbigtable" নামে একটি কীস্পেস তৈরি করব।

দ্রষ্টব্য: ক্যাসান্ড্রা সংযোগ গ্রহণ করা শুরু করতে এক মিনিট সময় লাগতে পারে।

# Start cqlsh
cqlsh $(hostname -I)

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 সেশনটি খোলা রাখুন অথবা এই VM-এর IP অ্যাড্রেসটি নোট করুন (hostname -I)।

৪. বিগটেবিল (টার্গেট) সেট আপ করুন।

সময়কাল ০:০১

একটি 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

Bigtable টেবিলটি পরবর্তীতে Cassandra-Bigtable Proxy সেটআপ স্ক্রিপ্ট দ্বারা তৈরি করা হবে।

৫. ক্যাসান্ড্রা-বিগটেবল প্রক্সি সেট আপ করুন

১. ক্যাসান্ড্রা-বিগটেবল প্রক্সির জন্য কম্পিউট ইঞ্জিন ভিএম তৈরি করুন

gcloud iam service-accounts create bigtable-proxy-sa \
    --description="Service account for Bigtable Proxy access" \
    --display-name="Bigtable Proxy Access SA"

export BIGTABLE_PROXY_SA_EMAIL=$(gcloud iam service-accounts list --filter="displayName='Bigtable Proxy Access SA'" --format="value(email)")

gcloud bigtable instances add-iam-policy-binding zdmbigtable \
  --member="serviceAccount:$BIGTABLE_PROXY_SA_EMAIL" \
  --role="roles/bigtable.admin"

gcloud compute instances create bigtable-proxy-vm \
--machine-type=e2-medium \
--image-family=ubuntu-2204-lts \
--image-project=ubuntu-os-cloud \
--tags=cassandra-migration \
--boot-disk-size=20GB \
--zone=$ZONE \
--scopes=cloud-platform \
--service-account="$BIGTABLE_PROXY_SA_EMAIL"

bigtable-proxy-vm-এ SSH করুন:

gcloud compute ssh --zone="$ZONE" "bigtable-proxy-vm"

bigtable-proxy-vm রান চলাকালীন:

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

wget https://go.dev/dl/go1.23.6.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.23.6.linux-amd64.tar.gz

echo 'export GOPATH=$HOME/go' >> ~/.profile
echo 'export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin' >> ~/.profile
source ~/.profile

# Clone the proxy repository
git clone https://github.com/GoogleCloudPlatform/cloud-bigtable-ecosystem.git
cd cloud-bigtable-ecosystem/cassandra-bigtable-migration-tools/cassandra-bigtable-proxy/

২. ক্যাসান্ড্রা-বিগটেবল প্রক্সি চালু করুন

প্রক্সি সার্ভারটি চালু করুন।

# At the root of the cassandra-to-bigtable-proxy directory
go run proxy.go --project-id="$(gcloud config get-value project)" --instance-id=zdmbigtable --keyspace-id=zdmbigtable --rpc-address=$(hostname -I)

প্রক্সিটি চালু হবে এবং আগত CQL সংযোগগুলির জন্য 9042 পোর্টে লিসেন করবে। এই টার্মিনাল সেশনটি চালু রাখুন। এই VM-এর IP অ্যাড্রেসটি নোট করুন (hostname -I)।

৩. CQL এর মাধ্যমে টেবিল তৈরি করুন

CQLSH ব্যবহার করে Cassandra-Bigtable Proxy VM-এর IP অ্যাড্রেসে সংযোগ করুন। আপনার লোকাল সিস্টেমে নিম্নলিখিত কমান্ডটি চালিয়ে আপনি IP অ্যাড্রেসটি খুঁজে নিতে পারেন:

gcloud compute instances describe bigtable-proxy-vm --format='get(networkInterfaces[0].networkIP)'

একটি আলাদা উইন্ডোতে আপনার ক্যাসান্ড্রা-অরিজিন ভিএম-এ SSH করুন এবং cqlsh ব্যবহার করে বিগটেবিল-প্রক্সিতে সংযোগ করুন। লক্ষ্য করুন যে, বিগটেবিল যাতে অন্তর্নিহিত টেবিলটি তৈরি করার জন্য যথেষ্ট সময় পায়, তা নিশ্চিত করতে আমরা ডিফল্টের চেয়ে দীর্ঘ একটি রিকোয়েস্ট টাইমআউট সেট করেছি। আপনি "Connected to cassandra-bigtable-proxy-v0.2.3" বা এই জাতীয় কোনো বার্তা দেখতে পাবেন, যা নির্দেশ করে যে আপনি বিগটেবিল প্রক্সির সাথে সংযুক্ত হয়েছেন, স্থানীয় ক্যাসান্ড্রা সার্ভারের সাথে নয়।

# Replace <your-bigtable-proxy-vm-ip> with the ip from the above command
export BIGTABLE_PROXY_IP=<your-bigtable-proxy-vm-ip>
cqlsh --request-timeout=60 $BIGTABLE_PROXY_IP
-- 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
);

CQLSH-এ, নিম্নলিখিত কমান্ডটি চালিয়ে আপনার টেবিলটি তৈরি হয়েছে কিনা তা যাচাই করুন:

DESC TABLE zdmbigtable.employee;

৬. জেডডিএম প্রক্সি সেট আপ করুন

এই ল্যাবের জন্য আমরা ZDM প্রক্সির একটি একক ইনস্ট্যান্স তৈরি করব, কিন্তু প্রোডাকশন মাইগ্রেশনের জন্য আপনার একটি মাল্টি-নোড সেটআপ প্রয়োজন হবে।

১. ZDM প্রক্সি ভিএম তৈরি করুন

gcloud compute instances create zdm-proxy-vm \
--machine-type=e2-medium \
--image-family=ubuntu-2204-lts \
--image-project=ubuntu-os-cloud \
--tags=cassandra-migration \
--boot-disk-size=20GB \
--scopes=cloud-platform \
--zone=$ZONE

উভয় ভিএম-এর আইপি অ্যাড্রেসগুলো নোট করুন।

২. জেডডিএম প্রক্সি প্রস্তুত করুন।

gcloud compute ssh --zone="$ZONE" zdm-proxy-vm
export ZDM_VERSION="2.3.4"
wget "https://github.com/datastax/zdm-proxy/releases/download/v$ZDM_VERSION/zdm-proxy-linux-amd64-v$ZDM_VERSION.tgz"
tar -xvzf "zdm-proxy-linux-amd64-v$ZDM_VERSION.tgz"

# replace YOUR_ZONE
gcloud config set compute/zone "YOUR_ZONE"
export ZDM_ORIGIN_CONTACT_POINTS=$(gcloud compute instances describe cassandra-origin --format='get(networkInterfaces[0].networkIP)') 
export ZDM_TARGET_CONTACT_POINTS=$(gcloud compute instances describe bigtable-proxy-vm --format='get(networkInterfaces[0].networkIP)')
export ZDM_ORIGIN_USERNAME=""
export ZDM_ORIGIN_PASSWORD=""
export ZDM_TARGET_USERNAME=""
export ZDM_TARGET_PASSWORD=""
export ZDM_PROXY_LISTEN_ADDRESS=0.0.0.0
export ZDM_PROXY_LISTEN_PORT=9042
./zdm-proxy-v${ZDM_VERSION}

৭. অ্যাপ্লিকেশন কনফিগার করুন এবং দ্বৈত লেখা শুরু করুন

সময়কাল ০:০৫

একটি প্রকৃত মাইগ্রেশনের এই পর্যায়ে, আপনি সরাসরি ক্যাসান্ড্রার সাথে সংযোগ করার পরিবর্তে আপনার অ্যাপ্লিকেশন(গুলি)কে ZDM প্রক্সি ভিএম-এর আইপি অ্যাড্রেস (যেমন, :9042) নির্দেশ করার জন্য পুনরায় কনফিগার করবেন।

অ্যাপ্লিকেশনটি ZDM প্রক্সির সাথে সংযুক্ত হয়ে গেলে: ডিফল্টরূপে, রিড অপারেশনগুলো অরিজিন (ক্যাসান্ড্রা) থেকে সম্পন্ন হয়। রাইট অপারেশনগুলো অরিজিন (ক্যাসান্ড্রা) এবং টার্গেট (বিগটেবল, ক্যাসান্ড্রা-বিগটেবল প্রক্সির মাধ্যমে) উভয় স্থানেই পাঠানো হয়। এটি আপনার অ্যাপ্লিকেশনকে স্বাভাবিকভাবে কাজ চালিয়ে যেতে সক্ষম করে এবং একই সাথে উভয় ডাটাবেসে নতুন ডেটা লেখা নিশ্চিত করে। আপনি ZDM প্রক্সিকে নির্দেশ করে cqlsh ব্যবহার করে সংযোগটি পরীক্ষা করতে পারেন:

cqlsh $(gcloud compute instances describe zdm-proxy-vm --format='get(networkInterfaces[0].networkIP)')

কিছু ডেটা প্রবেশ করানোর চেষ্টা করুন:

INSERT INTO zdmbigtable.employee (name, age, is_active) VALUES ('Alice', 30, true); 
INSERT INTO zdmbigtable.employee (name, age, is_active) VALUES ('Anna', 45, true); 
INSERT INTO zdmbigtable.employee (name, age, is_active) VALUES ('Albert', 50, false); 
SELECT * FROM zdmbigtable.employee;

এই ডেটা ক্যাসান্ড্রা এবং বিগটেবল উভয়টিতেই লেখা উচিত। আপনি গুগল ক্লাউড কনসোলে গিয়ে আপনার ইনস্ট্যান্সের জন্য বিগটেবল কোয়েরি এডিটর খুলে বিগটেবলে এটি নিশ্চিত করতে পারেন। একটি "SELECT * FROM employee" কোয়েরি চালান, এবং সম্প্রতি ইনসার্ট করা ডেটা দৃশ্যমান হওয়া উচিত।

8. ক্যাসান্দ্রা ডেটা মাইগ্রেটর ব্যবহার করে ঐতিহাসিক ডেটা স্থানান্তর করুন

এখন যেহেতু নতুন ডেটার জন্য ডুয়াল রাইট সক্রিয় আছে, ক্যাসান্ড্রা থেকে বিগটেবলে বিদ্যমান হিস্টোরিক্যাল ডেটা কপি করতে ক্যাসান্ড্রা ডেটা মাইগ্রেটর (CDM) টুলটি ব্যবহার করুন।

১. সিডিএম-এর জন্য কম্পিউট ইঞ্জিন ভিএম তৈরি করুন

এই ভিএম-টির স্পার্কের জন্য পর্যাপ্ত মেমরি প্রয়োজন।

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

২. পূর্বশর্তগুলো ইনস্টল করুন (জাভা ১১, স্পার্ক)

cdm-migrator-vm-এ SSH করুন:

gcloud compute ssh cdm-migrator-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
tar -xvzf spark-3.5.3-bin-hadoop3-scala2.13.tgz

echo 'export SPARK_HOME=$PWD/spark-3.5.3-bin-hadoop3-scala2.13' >> ~/.profile
echo 'export PATH=$PATH:$SPARK_HOME/bin' >> ~/.profile
source ~/.profile

3. Cassandra ডেটা মাইগ্রেটর ডাউনলোড করুন

আপনার ব্রাউজারে, CDM Packages পৃষ্ঠাটি খুলুন এবং Assets প্যানেল থেকে .jar লিঙ্কটি কপি করুন। যদি 5.4.0 উপলব্ধ না থাকে, তবে এর নিকটতম পরবর্তী সংস্করণটি বেছে নিন। লিঙ্কটি নিচের কমান্ডে পেস্ট করুন এবং আপনার cdm-migrator-vm ইনস্ট্যান্সে এটি চালান, url-এর চারপাশে একক উদ্ধৃতি চিহ্ন (single quotes) বজায় রাখবেন।

wget 'JAR_URL_GOES_HERE' -O cassandra-data-migrator.jar

jar টুল দিয়ে ফাইলটি স্ক্যান করে যাচাই করুন যে এটি সঠিকভাবে ডাউনলোড হয়েছে কিনা: আপনি ".class" ফাইলগুলির একটি দীর্ঘ তালিকা দেখতে পাবেন।

jar tf cassandra-data-migrator.jar 

৪. কিছু ডেটা যোগ করুন

মাইগ্রেট করার জন্য আমাদের সরাসরি ক্যাসান্ড্রা-অরিজিনে (zdm-proxy-vm-এ নয়) লিখে কিছু ডেটা যোগ করতে হবে।

INSERT INTO zdmbigtable.employee (name, age, is_active) VALUES ('Alfred', 67, true); 
INSERT INTO zdmbigtable.employee (name, age, is_active) VALUES ('Bobby', 12, false); 
INSERT INTO zdmbigtable.employee (name, age, is_active) VALUES ('Carol', 29, true); 

৫. মাইগ্রেশন জবটি চালান।

spark-submit ব্যবহার করে মাইগ্রেশনটি সম্পন্ন করুন। এই কমান্ডটি আপনার প্রোপার্টিজ ফাইল ব্যবহার করে এবং মাইগ্রেট করার জন্য কীস্পেস ও টেবিল নির্দিষ্ট করে দিয়ে স্পার্ককে সিডিএম জার (CDM jar) রান করতে নির্দেশ দেয়। আপনার ভিএম-এর আকার এবং ডেটার পরিমাণের উপর ভিত্তি করে মেমরি সেটিংস (–driver-memory, –executor-memory) সমন্বয় করুন।

নিশ্চিত করুন যে আপনি সেই ডিরেক্টরিতে আছেন যেখানে CDM jar এবং properties ফাইলটি রয়েছে।

পরামর্শ: আপনার লোকাল মেশিন থেকে এই কমান্ডগুলো চালিয়ে আপনি আপনার ক্যাসান্ড্রা এবং প্রক্সি ভিএম-গুলোর ইন্টারনাল আইপি পেতে পারেন:

gcloud compute instances describe cassandra-origin --format='get(networkInterfaces[0].networkIP)'
gcloud compute instances describe bigtable-proxy-vm --format='get(networkInterfaces[0].networkIP)'
export ORIGIN_HOST="<your-cassandra-origin-ip>"
export TARGET_HOST="<your-bigtable-proxy-vm-ip>"
export KEYSPACE_TABLE="zdmbigtable.employee"
spark-submit --verbose --master "local[*]" \
--driver-memory 3G --executor-memory 3G \
--conf spark.cdm.schema.origin.keyspaceTable="$KEYSPACE_TABLE" \
--conf spark.cdm.connect.origin.host="$ORIGIN_HOST" \
--conf spark.cdm.connect.origin.port=9042 \
--conf spark.cdm.connect.target.host="$TARGET_HOST" \
--conf spark.cdm.connect.target.port=9042 \
--conf spark.cdm.feature.origin.ttl.automatic=false \
--conf spark.cdm.feature.origin.writetime.automatic=false \
--conf spark.cdm.feature.target.ttl.automatic=false \
--conf spark.cdm.feature.target.writetime.automatic=false \
--conf spark.cdm.schema.origin.column.ttl.automatic=false \
--conf spark.cdm.schema.ttlwritetime.calc.useCollections=false \
--class com.datastax.cdm.job.Migrate cassandra-data-migrator.jar

৬. ডেটা মাইগ্রেশন যাচাই করুন

সিডিএম কাজটি সফলভাবে সম্পন্ন হলে, বিগটেবিলে ঐতিহাসিক ডেটা আছে কিনা তা যাচাই করুন।

cqlsh <bigtable-proxy-vm-ip>

cqlsh এর ভিতরে:

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

৯. কাটওভার (ধারণাগত)

ক্যাসান্ড্রা এবং বিগটেবলের মধ্যে ডেটার সামঞ্জস্য পুঙ্খানুপুঙ্খভাবে যাচাই করার পর, আপনি চূড়ান্ত কাটওভারের দিকে অগ্রসর হতে পারেন।

ZDM প্রক্সির ক্ষেত্রে, এই পরিবর্তনের জন্য এটিকে অরিজিন (ক্যাসান্ড্রা)-এর পরিবর্তে প্রধানত টার্গেট (বিগটেবল) থেকে ডেটা পড়ার জন্য পুনরায় কনফিগার করতে হয়। এটি সাধারণত ZDM প্রক্সির কনফিগারেশনের মাধ্যমে করা হয়, যা কার্যকরভাবে আপনার অ্যাপ্লিকেশনের রিড ট্র্যাফিককে বিগটেবলে স্থানান্তরিত করে।

একবার আপনি নিশ্চিত হয়ে গেলে যে Bigtable সমস্ত ট্র্যাফিক সঠিকভাবে পরিবেশন করছে, আপনি অবশেষে যা করতে পারবেন:

  • ZDM প্রক্সি পুনঃকনফিগার করে দ্বৈত রাইট বন্ধ করুন।
  • মূল ক্যাসান্ড্রা ক্লাস্টারটি নিষ্ক্রিয় করুন।
  • ZDM প্রক্সিটি সরিয়ে দিন এবং অ্যাপ্লিকেশনটিকে সরাসরি ক্যাসান্ড্রা-বিগটেবল প্রক্সির সাথে সংযুক্ত করুন অথবা জাভার জন্য নেটিভ বিগটেবল CQL ক্লায়েন্ট ব্যবহার করুন।

কাটওভারের জন্য ZDM প্রক্সি পুনঃকনফিগারেশনের খুঁটিনাটি এই সাধারণ কোডল্যাবের আওতার বাইরে, তবে ডেটাস্ট্যাক্স ZDM ডকুমেন্টেশনে তা বিশদভাবে বর্ণনা করা আছে।

১০. পরিষ্কার করুন

চার্জ এড়ানোর জন্য, এই কোডল্যাব চলাকালীন তৈরি করা রিসোর্সগুলো মুছে ফেলুন।

১. Compute Engine VM গুলি মুছে ফেলুন

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

২. Bigtable ইনস্ট্যান্সটি মুছে ফেলুন

gcloud bigtable instances delete zdmbigtable

৩. ফায়ারওয়াল নিয়মগুলি মুছে ফেলুন

gcloud compute firewall-rules delete allow-migration-internal

৪. ক্যাসান্ড্রা ডাটাবেস মুছে ফেলুন (যদি স্থানীয়ভাবে ইনস্টল করা থাকে বা সংরক্ষিত থাকে)

আপনি যদি এখানে তৈরি করা Compute Engine VM-এর বাইরে Cassandra ইনস্টল করে থাকেন, তাহলে ডেটা মুছে ফেলতে বা Cassandra আনইনস্টল করতে উপযুক্ত পদক্ষেপগুলি অনুসরণ করুন।

১১. অভিনন্দন!

আপনি সফলভাবে অ্যাপাচি ক্যাসান্ড্রা থেকে বিগটেবলে একটি প্রক্সি-ভিত্তিক মাইগ্রেশন পথ সেট আপ করার প্রক্রিয়াটি সম্পন্ন করেছেন!

আপনি শিখেছেন কীভাবে:

ক্যাসান্ড্রা এবং বিগটেবল স্থাপন করুন।

  • CQL সামঞ্জস্যের জন্য Cassandra-Bigtable প্রক্সিটি কনফিগার করুন।
  • দ্বৈত রাইট ও ট্র্যাফিক ব্যবস্থাপনার জন্য ডেটাস্ট্যাক্স জেডডিএম প্রক্সি স্থাপন করুন।
  • ঐতিহাসিক ডেটা স্থানান্তর করতে ক্যাসান্ড্রা ডেটা মাইগ্রেটর ব্যবহার করুন।

এই পদ্ধতিটি প্রক্সি লেয়ারকে কাজে লাগানোর মাধ্যমে ন্যূনতম ডাউনটাইম এবং কোনো কোড পরিবর্তন ছাড়াই মাইগ্রেশনের সুযোগ করে দেয়।

পরবর্তী পদক্ষেপ

  • বিগটেবল ডকুমেন্টেশন অন্বেষণ করুন
  • উন্নত কনফিগারেশন এবং কাটওভার পদ্ধতির জন্য ডেটাস্ট্যাক্স জেডডিএম প্রক্সি ডকুমেন্টেশন দেখুন।
  • আরও বিস্তারিত তথ্যের জন্য Cassandra-Bigtable Proxy রিপোজিটরিটি পর্যালোচনা করুন।
  • উন্নত ব্যবহারের জন্য ক্যাসান্ড্রা ডেটা মাইগ্রেটর রিপোজিটরি দেখুন।
  • অন্যান্য গুগল ক্লাউড কোডল্যাব চেষ্টা করুন