1. Giriş
Bigtable, büyük analitik ve operasyonel iş yükleri için tasarlanmış, tamamen yönetilen ve yüksek performanslı bir NoSQL veritabanı hizmetidir. Apache Cassandra gibi mevcut veritabanlarından Bigtable'a geçiş, kapalı kalma süresini ve uygulama etkisini en aza indirmek için genellikle dikkatli bir planlama gerektirir.
Bu codelab'de, proxy araçlarının bir kombinasyonunu kullanarak Cassandra'dan Bigtable'a geçiş stratejisi gösterilmektedir:
- Cassandra-Bigtable Proxy: Sorguları çevirerek Cassandra istemcilerinin ve araçlarının (ör.
cqlshveya sürücüler) Cassandra Sorgu Dili (CQL) protokolünü kullanarak Bigtable ile etkileşime geçmesine olanak tanır. - Datastax Zero Downtime Migration (ZDM) Proxy: Uygulamanız ile veritabanı hizmetleriniz (Cassandra-Bigtable Proxy aracılığıyla kaynak Cassandra ve hedef Bigtable) arasında yer alan açık kaynaklı bir proxy. Çift yazma işlemini düzenler ve trafik yönlendirmeyi yönetir. Böylece, uygulamada minimum değişiklik ve kapalı kalma süresiyle taşıma yapılabilir.
- Cassandra Data Migrator (CDM): Kaynak Cassandra kümesinden hedef Bigtable örneğine geçmiş verileri toplu olarak taşımak için kullanılan açık kaynaklı bir araçtır.
Neler öğreneceksiniz?
- Compute Engine'de temel bir Cassandra kümesi oluşturma
- Bigtable örneği oluşturma
- Cassandra şemasını Bigtable ile eşlemek için Cassandra-Bigtable Proxy'yi dağıtma ve yapılandırma
- Çift yazma için Datastax ZDM Proxy'yi dağıtma ve yapılandırma
- Mevcut verileri toplu olarak taşımak için Cassandra Data Migrator aracını kullanma
- Proxy tabanlı Cassandra'dan Bigtable'a taşıma için genel iş akışı.
İhtiyacınız olanlar
- Faturalandırmanın etkin olduğu bir Google Cloud projesi. Yeni kullanıcılar ücretsiz deneme sürümünden yararlanabilir.
- Projeler, Compute Engine, VPC ağları ve güvenlik duvarı kuralları gibi Google Cloud kavramları hakkında temel düzeyde bilgi sahibi olma Linux komut satırı araçlarına temel düzeyde aşina olmanız gerekir.
gcloudKSA'nın yüklü ve yapılandırılmış olduğu bir makineye erişin veya Google Cloud Shell'i kullanın.
Bu codelab'de, ağ oluşturmayı basitleştirmek için öncelikle aynı VPC ağı ve bölgedeki Compute Engine'de sanal makineler (VM'ler) kullanacağız. Dahili IP adreslerinin kullanılması önerilir.
2. Ortamınızı ayarlama
1. Google Cloud projesi seçme veya oluşturma
Google Cloud Console'a gidin ve mevcut bir projeyi seçin veya yeni bir proje oluşturun. Proje kimliğinizi not edin.
2. Bölge ve alt bölge seçme
Kaynaklarınız için bir bölge ve alt bölge seçin. Örnek olarak us-central1 ve us-central1-c bölgelerini kullanacağız. Kolaylık sağlamak için bunları ortam değişkenleri olarak tanımlayın:
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
3. Gerekli API'leri etkinleştirme
Projenizde Compute Engine API ve Bigtable API'nin etkinleştirildiğinden emin olun.
gcloud services enable compute.googleapis.com bigtable.googleapis.com bigtableadmin.googleapis.com
4. Güvenlik duvarı kurallarını yapılandırma
Varsayılan VPC ağındaki sanal makinelerimiz arasında çeşitli bağlantı noktalarında iletişime izin vermemiz gerekiyor:
- Cassandra/Proxies CQL Bağlantı Noktası: 9042
- ZDM Proxy Durum Denetimi Bağlantı Noktası: 14001
- SSH: 22
Bu bağlantı noktalarında dahili trafiğe izin vermek için bir güvenlik duvarı kuralı oluşturun. Bu kuralı ilgili sanal makinelere kolayca uygulamak için bir etiket cassandra-migration kullanacağız.
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
3. Cassandra kümesini dağıtma (Kaynak)
Bu codelab'de, Compute Engine'de basit bir tek düğümlü Cassandra kümesi oluşturacağız. Gerçek hayattaki bir senaryoda, mevcut kümenize bağlanırsınız.
1. Cassandra için GCE sanal makinesi oluşturma
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"
Cassandra örneğinize SSH uygulama
gcloud compute ssh --zone="$ZONE" "cassandra-origin"
2. Cassandra'yı yükleme
# 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
3. Cassandra'yı yapılandırma
Cassandra'yı özel ağda erişilebilir olacak şekilde yapılandırmamız gerekir.
Aşağıdaki komutu çalıştırarak cassandra-origin'in özel IP'sini alın:
hostname -I
Cassandra yapılandırmasını düzenleyin. Yeni yapılandırma satırları eklemeniz gerekmez. Yalnızca mevcut olanları güncelleyin:
sudo vim /etc/cassandra/cassandra.yaml
seed_provider.parameters.seedsöğesini"CASSANDRA_ORIGIN_PRIVATE_IP:7000"olarak ayarlayınrpc_addressöğesiniCASSANDRA_ORIGIN_PRIVATE_IPolarak ayarlayınlisten_addressöğesiniCASSANDRA_ORIGIN_PRIVATE_IPolarak ayarlayın
Dosyayı kaydedin.
Son olarak, yapılandırma değişikliklerini yüklemek için Cassandra'yı yeniden başlatın:
sudo systemctl restart cassandra
# (Optional) Verify Cassandra is running
sudo systemctl status cassandra
4. Anahtar alanı ve tablo oluşturma
Çalışan tablosu örneğini kullanıp "zdmbigtable" adlı bir anahtar alanı oluşturacağız.
Not: Cassandra'nın bağlantıları kabul etmeye başlaması bir dakika sürebilir.
# Start cqlsh
cqlsh $(hostname -I)
cqlsh içinde:
-- 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 oturumunu açık bırakın veya bu VM'nin IP adresini (hostname -I) not edin.
4. Bigtable'ı (hedef) ayarlama
Süre 0:01
Bigtable örneği oluşturun. Örnek olarak zdmbigtable örneğini kullanacağız.
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 tablosu daha sonra Cassandra-Bigtable Proxy kurulum komut dosyası tarafından oluşturulur.
5. Cassandra-Bigtable Proxy'yi ayarlama
1. Cassandra-Bigtable Proxy'si için Compute Engine sanal makinesi oluşturma
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'ye SSH üzerinden bağlanın:
gcloud compute ssh --zone="$ZONE" "bigtable-proxy-vm"
bigtable-proxy-vm'de şunu çalıştırın:
# 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/
2. Cassandra-Bigtable Proxy'sini başlatma
Proxy sunucusunu başlatın.
# 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)
Proxy başlatılır ve gelen CQL bağlantıları için 9042 numaralı bağlantı noktasını dinler. Bu terminal oturumunu çalıştırmaya devam edin. Bu sanal makinenin IP adresini (hostname -I) not edin.
3. CQL ile tablo oluşturma
CQLSH'yi Cassandra-Bigtable Proxy VM'nin IP adresine bağlayın. Aşağıdaki komutu yerel olarak çalıştırarak IP adresini bulabilirsiniz:
gcloud compute instances describe bigtable-proxy-vm --format='get(networkInterfaces[0].networkIP)'
Ayrı bir pencerede cassandra-origin sanal makinenize SSH ile bağlanın ve bigtable-proxy'ye bağlanmak için cqlsh'yi kullanın. Bigtable'ın temel tabloyu oluşturmak için yeterli zamana sahip olmasını sağlamak amacıyla varsayılan istek zaman aşımından daha uzun bir süre belirlediğimizi unutmayın. "Connected to cassandra-bigtable-proxy-v0.2.3" (cassandra-bigtable-proxy-v0.2.3'e bağlandı) veya benzer bir mesaj görmelisiniz. Bu mesaj, yerel Cassandra sunucusuna değil, Bigtable proxy'sine bağlandığınızı gösterir.
# 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'de aşağıdaki komutu çalıştırarak tablonuzun oluşturulduğunu doğrulayın:
DESC TABLE zdmbigtable.employee;
6. ZDM Proxy'yi ayarlama
Bu laboratuvar için ZDM Proxy'nin tek bir örneğini oluşturacağız ancak üretim taşıması için çok düğümlü bir kurulum yapmanız gerekir.
1. ZDM Proxy VM'sini oluşturma
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
Her iki sanal makinenin de IP adreslerini not edin.
2. ZDM Proxy'sini hazırlama
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}
7. Uygulamayı yapılandırma ve çift yazma işlemlerini başlatma
Süre 0:05
Gerçek bir taşıma işleminde bu aşamada, uygulamalarınızı ZDM Proxy VM'nin IP adresine (ör. :9042) yerine doğrudan Cassandra'ya bağlanır.
Uygulama ZDM Proxy'ye bağlandıktan sonra: Okumalar varsayılan olarak Kaynak'tan (Cassandra) sunulur. Yazma işlemleri hem kaynak (Cassandra) hem de hedef (Cassandra-Bigtable proxy'si aracılığıyla Bigtable) konumuna gönderilir. Bu sayede, yeni veriler her iki veritabanına da aynı anda yazılırken uygulamanızın normal şekilde çalışmaya devam etmesi sağlanır. ZDM Proxy'yi işaret eden cqlsh'yi kullanarak bağlantıyı test edebilirsiniz:
cqlsh $(gcloud compute instances describe zdm-proxy-vm --format='get(networkInterfaces[0].networkIP)')
Bazı veriler eklemeyi deneyin:
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;
Bu veriler hem Cassandra'ya hem de Bigtable'a yazılmalıdır. Bunu Bigtable'da Google Cloud Console'a gidip örneğiniz için Bigtable Query Editor'ı açarak doğrulayabilirsiniz. "SELECT * FROM employee" sorgusunu çalıştırın. Yakın zamanda eklenen veriler görünür olmalıdır.
8. Cassandra Data Migrator'ı kullanarak geçmiş verileri taşıma
Yeni veriler için çift yazma etkinleştirildiğinden, mevcut geçmiş verileri Cassandra'dan Bigtable'a kopyalamak için Cassandra Data Migrator (CDM) aracını kullanın.
1. CDM için Compute Engine sanal makinesi oluşturma
Bu sanal makinenin Spark için yeterli belleğe sahip olması gerekir.
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
2. Ön koşulları (Java 11, Spark) yükleyin.
cdm-migrator-vm'ye SSH üzerinden bağlanın:
gcloud compute ssh cdm-migrator-vm
Sanal makinenin içinde:
# 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 Data Migrator'ı indirme
Tarayıcınızda CDM Paketleri sayfasını açın ve Öğeler panelinden .jar bağlantısını kopyalayın. 5.4.0 sürümü kullanılamıyorsa bir sonraki en yakın sürümü seçin. Bağlantıyı aşağıdaki komuta yapıştırın ve URL'nin etrafındaki tek tırnakları koruyarak cdm-migrator-vm örneğinizde çalıştırın.
wget 'JAR_URL_GOES_HERE' -O cassandra-data-migrator.jar
jar aracıyla tarayarak jar dosyasının doğru şekilde indirildiğini doğrulayın: ".class" dosyalarının uzun bir listesini görmeniz gerekir.
jar tf cassandra-data-migrator.jar
4. Veri ekleme
Doğrudan cassandra-origin'e (zdm-proxy-vm'ye değil) yazarak taşımak için bazı veriler eklememiz gerekiyor.
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);
5. Taşıma işini çalıştırma
Taşıma işlemini spark-submit kullanarak yürütün. Bu komut, Spark'a özellikler dosyanızı kullanarak CDM jar'ını çalıştırmasını ve taşınacak anahtar alanını ve tabloyu belirtmesini söyler. Bellek ayarlarını (–driver-memory, –executor-memory) VM boyutunuza ve veri hacminize göre ayarlayın.
CDM jar ve özellikler dosyasını içeren dizinde olduğunuzdan emin olun.
İpucu: Cassandra ve proxy sanal makinelerinizin dahili IP'sini öğrenmek için yerel makinenizde şu komutları çalıştırabilirsiniz:
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
6. Veri taşımayı doğrulama
CDM işi başarıyla tamamlandıktan sonra geçmiş verilerin Bigtable'da bulunduğunu doğrulayın.
cqlsh <bigtable-proxy-vm-ip>
cqlsh içinde:
SELECT COUNT(*) FROM zdmbigtable.employee; -- Check row count matches origin
SELECT * FROM zdmbigtable.employee LIMIT 10; -- Check some sample data
9. Geçiş (kavramsal)
Cassandra ile Bigtable arasındaki veri tutarlılığını iyice doğruladıktan sonra son geçişe devam edebilirsiniz.
ZDM Proxy ile geçiş, öncelikle Origin (Cassandra) yerine hedef (Bigtable) üzerinden okuyacak şekilde yeniden yapılandırmayı içerir. Bu işlem genellikle ZDM Proxy'nin yapılandırılmasıyla yapılır ve uygulamanızın okuma trafiği etkili bir şekilde Bigtable'a yönlendirilir.
Bigtable'ın tüm trafiği doğru şekilde sunduğundan emin olduğunuzda şunları yapabilirsiniz:
- ZDM Proxy'yi yeniden yapılandırarak çift yazma işlemini durdurun.
- Orijinal Cassandra kümesini devre dışı bırakın.
- ZDM Proxy'yi kaldırın ve uygulamanın doğrudan Cassandra-Bigtable Proxy'ye bağlanmasını sağlayın veya Java için yerel Bigtable CQL istemcisini kullanın.
Geçiş için ZDM Proxy'nin yeniden yapılandırılmasıyla ilgili ayrıntılar bu temel codelab'in kapsamı dışındadır ancak Datastax ZDM belgelerinde ayrıntılı olarak açıklanmıştır.
10. Temizleme
Ücretlendirilmemek için bu codelab sırasında oluşturulan kaynakları silin.
1. Compute Engine sanal makinelerini silme
gcloud compute instances delete cassandra-origin zdm-proxy-vm bigtable-proxy-vm cdm-migrator-vm --zone=$ZONE --quiet
2. Bigtable örneğini silme
gcloud bigtable instances delete zdmbigtable
3. Güvenlik duvarı kurallarını silme
gcloud compute firewall-rules delete allow-migration-internal
4. Cassandra veritabanını silme (yerel olarak yüklenmişse veya kalıcı hale getirilmişse)
Cassandra'yı burada oluşturulan bir Compute Engine VM'sinin dışında yüklediyseniz verileri kaldırmak veya Cassandra'yı kaldırmak için uygun adımları uygulayın.
11. Tebrikler!
Apache Cassandra'dan Bigtable'a proxy tabanlı bir taşıma yolu oluşturma sürecini başarıyla tamamladınız.
Öğrendikleriniz:
Cassandra ve Bigtable'ı dağıtın.
- Cassandra-Bigtable Proxy'yi CQL uyumluluğu için yapılandırın.
- Çift yazma işlemlerini ve trafiği yönetmek için Datastax ZDM Proxy'yi dağıtın.
- Geçmiş verileri taşımak için Cassandra Data Migrator'ı kullanın.
Bu yaklaşım, proxy katmanından yararlanarak minimum kesinti süresiyle ve kod değişikliği olmadan taşımalara olanak tanır.
Sonraki adımlar
- Bigtable belgelerini keşfedin
- Gelişmiş yapılandırmalar ve geçiş prosedürleri için Datastax ZDM Proxy belgelerine bakın.
- Daha fazla bilgi için Cassandra-Bigtable Proxy deposunu inceleyin.
- Gelişmiş kullanım için Cassandra Data Migrator deposunu kontrol edin.
- Diğer Google Cloud Codelab'lerini deneyin