Takip et

Ubuntu 14.04 Üzerinde Apache Cassandra ile Çok Düğümlü Küme Veritabanı Kurulumu ve Yönetimi

Ubuntu 14.04 Üzerinde Apache Cassandra ile Çok Düğümlü Küme Veritabanı Kurulumu ve Yönetimi Apache Cassandra, yüksek ölçeklenebilirlik, y

Ubuntu 14.04 Üzerinde Apache Cassandra ile Çok Düğümlü Küme Veritabanı Kurulumu ve Yönetimi

Apache Cassandra, yüksek ölçeklenebilirlik, yüksek erişilebilirlik ve hata toleransı sunan, açık kaynaklı, dağıtık bir NoSQL veritabanıdır. Büyük veri kümelerini birden fazla sunucuya yayarak, tek bir hata noktasından etkilenmeden sürekli çalışma yeteneğiyle öne çıkar. Bu makalede, özellikle Ubuntu 14.04 işletim sistemi üzerinde çok düğümlü bir Cassandra kümesinin nasıl kurulacağını, yapılandırılacağını ve temel düzeyde nasıl yönetileceğini ayrıntılı olarak inceleyeceğiz. Ubuntu 14.04 artık eski bir sürüm olsa da, mevcut altyapılar veya belirli gereksinimler nedeniyle hala bu platformu kullanan sistemler bulunabilir. Bu nedenle, bu platforma özel adımlara odaklanacağız.

Apache Cassandra’ya Giriş

Geleneksel ilişkisel veritabanları (RDBMS), belirli ölçek ve performans gereksinimlerinde zorlanmaya başladığında, NoSQL veritabanları önemli bir alternatif olarak ortaya çıkmıştır. Apache Cassandra, özellikle Facebook tarafından geliştirilen ve daha sonra açık kaynak haline getirilen bir NoSQL veritabanıdır. Temel olarak, Amazon’un DynamoDB’si ve Google’ın BigTable’ından esinlenerek tasarlanmıştır.

Cassandra’nın en belirgin özellikleri şunlardır:

* Dağıtık Mimari: Verileri otomatik olarak birden çok düğüme (sunucuya) dağıtır. Bu, veri kaybı riskini azaltır ve sistemin genel performansını artırır.
* Yatay Ölçeklenebilirlik: İhtiyaç duyulduğunda kümeye yeni düğümler ekleyerek kapasiteyi kolayca artırabilirsiniz. Performans, eklenen düğümlerle orantılı olarak artar.
* Yüksek Erişilebilirlik ve Hata Toleransı: Bir düğümün çevrimdışı olması durumunda bile, veriler diğer düğümler üzerinde kopyalandığı için hizmet kesintiye uğramaz.
* Esnek Veri Modeli: Şemasız veya esnek şemalı bir yapıya sahiptir. Bu, hızlı geliştirme ve değişen veri gereksinimlerine kolay adaptasyon sağlar.
* Ayarlanabilir Tutarlılık: Uygulamanızın ihtiyaçlarına göre veri tutarlılığı seviyesini ayarlayabilirsiniz. Bu, performans ve tutarlılık arasında bir denge kurmanıza olanak tanır.
* Master-Less (Lidersiz) Mimari: Kümede “ana” bir düğüm yoktur. Tüm düğümler eşittir ve bu da tek bir hata noktasını ortadan kaldırır.

Cassandra genellikle büyük ölçekli, yüksek yazma yoğunluklu uygulamalar, zaman serisi verileri, IoT verileri, mesajlaşma sistemleri ve kişiselleştirme motorları gibi senaryolarda tercih edilir.

Ön Koşullar ve Sistem Hazırlığı

Cassandra kümesini kurmaya başlamadan önce, her düğüm için belirli ön koşulların yerine getirilmesi ve sistemin doğru şekilde hazırlanması gerekmektedir.

Ubuntu 14.04 İşletim Sistemi

Bu makale, özellikle Ubuntu 14.04 LTS (Trusty Tahr) üzerinde kurulum adımlarını ele almaktadır. Unutulmamalıdır ki, Ubuntu 14.04 artık desteklenmeyen eski bir sürümdür. Yeni projeler için daha güncel Ubuntu veya diğer Linux dağıtımları tercih edilmelidir. Ancak, mevcut altyapıları yöneten veya belirli uyumluluk gereksinimleri olan kullanıcılar için bu rehber faydalı olacaktır.

Java Geliştirme Kiti (JDK)

Cassandra, Java üzerinde çalıştığı için her düğümde uyumlu bir JDK sürümünün kurulu olması şarttır. Cassandra 3.x serisi için OpenJDK 8 veya Oracle JDK 8 önerilir. Ubuntu 14.04 üzerinde OpenJDK 7 veya 8 de kullanılabilir.

Sistem Kaynakları

Her Cassandra düğümü için önerilen minimum kaynaklar şunlardır:

* RAM: En az 8 GB, tercihen 16 GB veya daha fazla.
* CPU: En az 2 çekirdekli, tercihen 4 veya daha fazla çekirdek.
* Disk: Veriler için hızlı SSD’ler şiddetle tavsiye edilir. İşletim sistemi ve Cassandra’nın kendisi için ayrı diskler kullanmak performans açısından faydalı olabilir. Veri dizinleri için yeterli depolama alanı sağlanmalıdır.

Ağ Yapılandırması

Kümedeki her düğüm için statik bir IP adresi atanmalıdır. Dinamik IP adresleri, küme stabilitesi ve yönetimi açısından sorunlara yol açabilir. Düğümler arası iletişim için güvenlik duvarı kurallarının doğru şekilde yapılandırılması gerekir. Cassandra’nın kullandığı temel portlar şunlardır:

* 7000/tcp: Düğümler arası iletişim (inter-node communication)
* 7001/tcp: SSL ile düğümler arası iletişim
* 7199/tcp: JMX ile izleme
* 9042/tcp: CQL istemci bağlantıları (native protocol)
* 9160/tcp: Thrift istemci bağlantıları (eski protokol, genellikle kullanılmaz)

SSH Erişimi

Kümedeki tüm düğümlere SSH üzerinden erişimin sağlanması, kurulum ve yönetim süreçlerini kolaylaştıracaktır. Anahtar tabanlı kimlik doğrulama kullanılması güvenlik açısından daha iyidir.

Java Kurulumu (Ubuntu 14.04 Üzerinde)

Cassandra’yı kurmadan önce, gerekli Java sürümünü her düğüme kurmalıyız. Bu örnekte OpenJDK 8’i kuracağız, çünkü genellikle daha kolay kurulur ve lisans kısıtlamaları yoktur.

1. Sistem Paket Listesini Güncelleme:

sudo apt-get update
    sudo apt-get upgrade -y

2. OpenJDK 8 Kurulumu:
Ubuntu 14.04’ün varsayılan depolarında OpenJDK 8 bulunmayabilir. Bu nedenle, bir PPA (Personal Package Archive) eklememiz gerekebilir.

sudo apt-get install python-software-properties -y
    sudo add-apt-repository ppa:openjdk-r/ppa -y
    sudo apt-get update
    sudo apt-get install openjdk-8-jdk -y

Kurulum sırasında sizden onay istenebilir, Y tuşuna basıp Enter’a basın.

3. Varsayılan Java Sürümünü Ayarlama (Gerekirse):
Eğer sisteminizde birden fazla Java sürümü kuruluysa, OpenJDK 8’i varsayılan olarak ayarlamanız gerekebilir:

sudo update-alternatives --config java
    sudo update-alternatives --config javac

Listeden OpenJDK 8’e karşılık gelen numarayı seçin.

4. JAVA_HOME Ortam Değişkenini Ayarlama:
Cassandra’nın Java’yı bulabilmesi için JAVA_HOME ortam değişkenini ayarlamak iyi bir uygulamadır. /etc/environment dosyasına ekleyebiliriz:

echo "JAVA_HOME=\"/usr/lib/jvm/java-8-openjdk-amd64\"" | sudo tee -a /etc/environment
    source /etc/environment

Bu yolu, update-alternatives --config java komutunun çıktısındaki Java 8 yoluna göre doğrulayın.

5. Java Sürümünü Doğrulama:

java -version

Çıktıda “openjdk version “1.8.0_…” veya “java version “1.8.0_…” gibi bir şey görmelisiniz.

Apache Cassandra Kurulumu

Java kurulduktan sonra, her düğüme Apache Cassandra’yı kurabiliriz.

1. Cassandra Depolarını Ekleme:
Cassandra’nın resmi depolarını sisteminize eklemeniz gerekir. Bu örnekte Cassandra 3.11 sürümünü hedefliyoruz.

echo "deb http://www.apache.org/dist/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.list

2. GPG Anahtarını Ekleme:
Deponun güvenilirliğini doğrulamak için Apache’nin GPG anahtarını eklemeliyiz:

wget -q -O - https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -

3. Sistem Paket Listesini Güncelleme:
Yeni depoları tanımak için paket listesini tekrar güncelleyin:

sudo apt-get update

4. Cassandra’yı Kurma:
Şimdi Cassandra paketini kurabiliriz:

sudo apt-get install cassandra -y

5. Cassandra Servis Durumunu Kontrol Etme:
Kurulumdan sonra Cassandra servisi otomatik olarak başlamalıdır. Durumunu kontrol edelim:

sudo service cassandra status

Çıktıda “Cassandra is running” veya benzeri bir mesaj görmelisiniz. Eğer çalışmıyorsa, sudo service cassandra start komutuyla başlatın.

Çok Düğümlü Küme Yapılandırması

Cassandra her düğüme kurulduktan sonra, her düğümü kümenin bir parçası olacak şekilde yapılandırmamız gerekir. Yapılandırma dosyası genellikle /etc/cassandra/cassandra.yaml konumundadır. Bu dosya üzerinde yapılan değişiklikler Cassandra servisi yeniden başlatılmadan etkin olmaz.

Her düğüm için aşağıdaki temel yapılandırma parametrelerini düzenleyeceğiz. Bu adımları kümedeki her düğüm için tekrarlayın.

1. cassandra.yaml Dosyasını Düzenleme:

sudo nano /etc/cassandra/cassandra.yaml

2. Temel Yapılandırma Parametreleri:

* cluster_name: Kümenizin adı. Tüm düğümlerde aynı olmalıdır.

cluster_name: 'MyCassandraCluster'

* num_tokens: Sanal düğüm sayısı. Varsayılan 256 genellikle iyi bir başlangıç noktasıdır.

num_tokens: 256

* listen_address: Düğümün diğer düğümlerle iletişim kurmak için kullanacağı IP adresi. Her düğüm için kendi IP adresini girin.

listen_address: 192.168.1.101 # Bu düğümün IP adresi

Eğer listen_address yorum satırı olarak kalırsa, Cassandra otomatik olarak sistemin varsayılan IP adresini kullanmaya çalışır. Ancak açıkça belirtmek daha güvenlidir.

* rpc_address: İstemcilerin bu düğüme bağlanmak için kullanacağı IP adresi. Genellikle listen_address ile aynıdır.

rpc_address: 192.168.1.101 # Bu düğümün IP adresi

Eğer rpc_address yorum satırı olarak kalırsa, Cassandra otomatik olarak listen_address değerini kullanır.

* seed_provider / seeds: Kümedeki ilk düğümlerin (çekirdek düğümler) IP adresleri. Tüm düğümler, kümedeki diğer düğümleri keşfetmek için bu seed düğümlerini kullanır. Genellikle kümedeki 2-3 düğüm seed olarak seçilir. Tüm düğümlerin seeds listesi aynı olmalıdır.
Örneğin, 192.168.1.101 ve 192.168.1.102 seed düğümleri ise:

- class_name: org.apache.cassandra.locator.SimpleSeedProvider
          parameters:
              - seeds: "192.168.1.101,192.168.1.102"

Kendi IP adresinizi de seed listesine ekleyebilirsiniz.

* data_file_directories, commitlog_directory, saved_caches_directory: Cassandra’nın verileri, commit logları ve önbellekleri depolayacağı dizinler. Performans için ayrı disklerde olmaları önerilir. Varsayılan yollar genellikle /var/lib/cassandra/data, /var/lib/cassandra/commitlog ve /var/lib/cassandra/saved_caches şeklindedir. İhtiyaçlarınıza göre değiştirebilirsiniz.

* endpoint_snitch: Düğümlerin fiziksel konumları hakkında bilgi sağlayan bir mekanizma. Bu, okuma ve yazma işlemlerini optimize etmeye ve hata toleransını artırmaya yardımcı olur.
* SimpleSnitch: En basit olanıdır, konum farkındalığı yoktur.
* RackInferringSnitch: IP adreslerinden rack ve veri merkezi bilgilerini tahmin etmeye çalışır. Küçük kümeler için uygun olabilir.
* GossipingPropertyFileSnitch: En esnek olanıdır. /etc/cassandra/cassandra-rackdc.properties dosyasından veri merkezi ve rack bilgilerini okur. Büyük ve karmaşık kümeler için önerilir.

GossipingPropertyFileSnitch kullanıyorsanız, /etc/cassandra/cassandra-rackdc.properties dosyasını da düzenlemeniz gerekir:

sudo nano /etc/cassandra/cassandra-rackdc.properties

Her düğüm için kendi dc (data center) ve rack değerini belirtin:

dc=datacenter1
        rack=rack1

Farklı düğümler için farklı rack değerleri atayarak veri dağıtımını optimize edebilirsiniz.

* authenticator ve authorizer: Güvenlik ayarları. Varsayılan olarak AllowAllAuthenticator ve AllowAllAuthorizer kullanılır, bu da herhangi bir kimlik doğrulama veya yetkilendirme olmadığı anlamına gelir. Üretim ortamlarında mutlaka PasswordAuthenticator ve uygun bir yetkilendirici kullanmalısınız.

3. Güvenlik Duvarı Ayarları:
Her düğümde, Cassandra’nın ihtiyaç duyduğu portların açıldığından emin olun. Ubuntu 14.04’te ufw (Uncomplicated Firewall) kullanabilirsiniz.

sudo ufw allow 7000/tcp # Inter-node communication
    sudo ufw allow 7001/tcp # SSL Inter-node communication (if using SSL)
    sudo ufw allow 7199/tcp # JMX
    sudo ufw allow 9042/tcp # CQL native protocol
    sudo ufw allow 9160/tcp # Thrift (if needed)
    sudo ufw enable
    sudo ufw status

4. Cassandra Servisini Yeniden Başlatma:
Yapılandırma değişikliklerinin etkili olması için her düğümde Cassandra servisini yeniden başlatın:

sudo service cassandra restart

Kümenin Başlatılması ve Doğrulanması

Tüm düğümler yapılandırılıp yeniden başlatıldıktan sonra, kümenin doğru şekilde çalıştığını doğrulamamız gerekir.

1. İlk Seed Düğümünü Başlatma:
Eğer tüm düğümleri aynı anda yeniden başlattıysanız sorun olmaz. Ancak, küme ilk kez kuruluyorsa, önce seeds listesindeki düğümlerden birini veya birkaçını başlatmanız ve onların tamamen çevrimiçi olmasını beklemeniz önerilir.

2. Diğer Düğümleri Başlatma:
Seed düğümleri çalıştıktan sonra, diğer düğümleri başlatın. Her düğüm, seed düğümleri aracılığıyla kümedeki diğer düğümleri keşfedecek ve katılacaktır.

3. Küme Durumunu Kontrol Etme (nodetool status):
Herhangi bir düğümde nodetool status komutunu çalıştırarak kümenin genel durumunu kontrol edebilirsiniz:

nodetool status

Çıktı aşağıdaki gibi olacaktır:

Datacenter: datacenter1
    =======================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns (effective) Host ID                               Rack
    UN  192.168.1.101  100 KB     256     100.0%           abcdef01-....-....-....-............  rack1
    UN  192.168.1.102  100 KB     256     100.0%           abcdef02-....-....-....-............  rack1
    UN  192.168.1.103  100 KB     256     100.0%           abcdef03-....-....-....-............  rack2

* Status sütunu: U (Up) veya D (Down) gösterir.
* State sütunu: N (Normal) en yaygın olanıdır. J (Joining), L (Leaving) veya M (Moving) gibi durumlar da görebilirsiniz.
* Tüm düğümlerin UN (Up/Normal) durumunda olması, kümenizin sağlıklı bir şekilde çalıştığını gösterir.
* Owns sütunu, o düğümün kümedeki veri sorumluluğu yüzdesini gösterir. Yeni bir kümede veya eşit dağılımda bu değer yaklaşık olarak 100% / düğüm_sayısı olmalıdır.

Veri Modellemeyi Anlamak

Cassandra, ilişkisel veritabanlarından farklı bir veri modelleme yaklaşımı gerektirir. Cassandra’da SQL yerine CQL (Cassandra Query Language) kullanılır, ancak sorgu yapısı RDBMS’ten farklıdır.

* KeySpace (Anahtar Alanı): İlişkisel veritabanlarındaki veritabanına benzer. Tabloların ve diğer nesnelerin mantıksal bir gruplandırmasıdır. Çoğaltma faktörü (Replication Factor) ve çoğaltma stratejisi (Replication Strategy) KeySpace seviyesinde tanımlanır.
* Table (Tablo): İlişkisel tablolara benzer, ancak yapıları ve indeksleme kuralları farklıdır.
* Primary Key (Birincil Anahtar): Cassandra’da birincil anahtar iki ana bölümden oluşur:
* Partition Key (Bölümleme Anahtarı): Verilerin küme genelinde nasıl dağıtılacağını belirler. Aynı bölümleme anahtarına sahip tüm veriler aynı düğümde veya aynı düğüm grubunda depolanır. İyi bir bölümleme anahtarı, verilerin küme genelinde eşit olarak dağılmasını sağlar.
* Clustering Key (Kümeleme Anahtarı): Aynı bölüm içindeki verilerin nasıl sıralanacağını belirler. Sorgularda aralık taramaları için kullanılır.
* Denormalizasyon: Cassandra’da genellikle sorgu odaklı veri modellemesi yapılır. Bu, aynı verinin farklı tablolarda farklı şekillerde depolanması anlamına gelebilir (denormalizasyon). Amaç, her sorgu için tek bir tabloya ihtiyaç duymaktır, bu da okuma performansını artırır.

Temel CQL İşlemleri

cqlsh aracı, Cassandra kümenize bağlanmak ve CQL sorguları çalıştırmak için kullanılır.

1. cqlsh ile Bağlanma:
Herhangi bir Cassandra düğümünden cqlsh ile bağlanabilirsiniz:

cqlsh 192.168.1.101 # Herhangi bir düğümün IP adresi

Eğer aynı düğümde çalıştırıyorsanız IP adresi belirtmenize gerek kalmaz: cqlsh.

2. KeySpace Oluşturma:

CREATE KEYSPACE mykeyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};

* SimpleStrategy: Tüm veri merkezlerinde kopyaları dağıtır. Küçük kümeler için uygundur.
* NetworkTopologyStrategy: Her veri merkezinde belirli sayıda kopyayı dağıtır. Üretim ortamlarında ve çoklu veri merkezli kümelerde önerilir.
* replication_factor: Verinin kaç kopyasının tutulacağını belirtir. Kümenizdeki düğüm sayısından küçük veya eşit olmalıdır.

3. KeySpace’i Kullanma:

USE mykeyspace;

4. Table Oluşturma:

CREATE TABLE users (
        user_id UUID PRIMARY KEY,
        first_name text,
        last_name text,
        email text,
        created_at timestamp
    );

Burada user_id hem bölümleme anahtarı hem de kümeleme anahtarı olarak tek başına birincil anahtarı oluşturur.

Daha karmaşık bir örnek (bileşik birincil anahtar):

CREATE TABLE user_posts (
        user_id UUID,
        post_id UUID,
        post_title text,
        post_content text,
        created_at timestamp,
        PRIMARY KEY ((user_id), post_id)
    );

Bu örnekte user_id bölümleme anahtarıdır, post_id ise kümeleme anahtarıdır. Aynı user_id‘ye sahip tüm gönderiler aynı bölümde saklanır ve post_id‘ye göre sıralanır.

5. Veri Ekleme:

INSERT INTO users (user_id, first_name, last_name, email, created_at)
    VALUES (uuid(), 'John', 'Doe', 'john.doe@example.com', toTimestamp(now()));

6. Veri Okuma:

SELECT * FROM users WHERE user_id = 81b61c94-08f3-4e4b-b0b3-1e7a3a0e1c9e;

Önemli: Cassandra’da WHERE koşulunda mutlaka bölümleme anahtarını (veya bölümleme anahtarının bir kısmını) belirtmeniz gerekir. Bölümleme anahtarı olmadan SELECT sorgusu yapmak performans sorunlarına yol açabilir veya yasaklanabilir (ALLOW FILTERING kullanmak önerilmez).

7. Veri Güncelleme:

UPDATE users SET email = 'johndoe@example.com' WHERE user_id = 81b61c94-08f3-4e4b-b0b3-1e7a3a0e1c9e;

8. Veri Silme:

DELETE FROM users WHERE user_id = 81b61c94-08f3-4e4b-b0b3-1e7a3a0e1c9e;

Küme Yönetimi ve İzleme

Cassandra kümesini verimli bir şekilde yönetmek ve izlemek için nodetool komutu ve log dosyaları kritik öneme sahiptir.

nodetool Komutu

nodetool, Cassandra kümesindeki düğümlerin durumunu, performansını ve diğer operasyonel yönlerini yönetmek için kullanılan bir komut satırı aracıdır.

* nodetool status: Kümedeki düğümlerin genel durumunu gösterir (yukarıda açıklandı).
* nodetool ring: Kümenin token dağılımını gösterir. Her düğümün hangi token aralıklarından sorumlu olduğunu görebilirsiniz.
* nodetool info: Belirli bir düğüm hakkında detaylı bilgi verir (yük, çalışma süresi, heap kullanımı vb.).
* nodetool repair: Veri tutarlılığını sağlamak için replikalar arasında tutarsızlıkları düzeltir. Düzenli olarak çalıştırılması önemlidir.

nodetool repair -pr # Tüm düğümler arasında onarım yapar

* nodetool cleanup: Düğümün artık sorumlu olmadığı verileri (token aralıkları değiştiğinde veya düğümler kümeden çıkarıldığında) temizler.
* nodetool drain: Düğümü çevrimdışı moda almadan önce tüm bellekteki commit loglarını diske yazar. Bakım işlemleri öncesinde önemlidir.
* nodetool decommission: Bir düğümü kümeden güvenli bir şekilde çıkarır, verilerini diğer düğümlere taşır.
* nodetool disableautocompaction / enableautocompaction: Veri sıkıştırma işlemini kontrol eder.
* nodetool compactionstats: Sıkıştırma istatistiklerini gösterir.

Log Dosyaları

Cassandra’nın log dosyaları, sorun giderme ve küme sağlığını izleme için hayati öneme sahiptir.
* system.log: Ana log dosyasıdır (/var/log/cassandra/system.log). Cassandra’nın başlangıç, çalışma zamanı hataları, uyarılar ve genel durum bilgileri burada bulunur.
* debug.log: Daha detaylı hata ayıklama bilgileri içerir (varsayılan olarak etkin değildir).

JMX ile İzleme

Cassandra, JMX (Java Management Extensions) aracılığıyla birçok metrik sunar. Bu metrikler, JConsole, VisualVM veya Prometheus/Grafana gibi izleme araçları kullanılarak izlenebilir. cassandra.yaml dosyasında JMX portu (varsayılan 7199) ve kimlik doğrulama ayarları bulunur.

Yüksek Erişilebilirlik ve Felaket Kurtarma

Cassandra’nın temel gücü, yüksek erişilebilirlik ve felaket kurtarma yeteneklerinden gelir.

Çoğaltma Faktörü (Replication Factor – RF) ve Tutarlılık Seviyeleri (Consistency Levels – CL)

* Çoğaltma Faktörü (RF): Bir verinin kümede kaç kopyasının tutulacağını belirler. Örneğin, RF=3 ise, her veri parçası kümedeki üç farklı düğümde saklanır. Bu, bir veya iki düğümün arızalanması durumunda bile verilerin erişilebilir kalmasını sağlar.
* Tutarlılık Seviyeleri (CL): Bir okuma veya yazma işleminin başarılı sayılması için kaç düğümün yanıt vermesi gerektiğini belirler.
* ONE: Bir düğümün yanıt vermesi yeterlidir (en az tutarlı, en hızlı).
* QUORUM: Çoğunluğun (RF / 2 + 1) yanıt vermesi gerekir (daha dengeli).
* ALL: Tüm düğümlerin yanıt vermesi gerekir (en tutarlı, en yavaş, en az erişilebilir).
* LOCAL_QUORUM: Sadece yerel veri merkezindeki çoğunluğun yanıt vermesi gerekir (çoklu veri merkezli ortamlarda kullanılır).
* Uygulama gereksinimlerinize göre doğru RF ve CL kombinasyonunu seçmek, performans ve veri tutarlılığı arasında kritik bir denge sağlar. Genellikle RF=3 ve QUORUM veya LOCAL_QUORUM kombinasyonu iyi bir başlangıç noktasıdır.

Veri Merkezi ve Rack Farkındalığı

NetworkTopologyStrategy ve GossipingPropertyFileSnitch kullanarak, Cassandra’nın verileri farklı veri merkezleri ve rack’ler arasında dağıtmasını sağlayabilirsiniz. Bu, bir veri merkezinin veya rack’in tamamen çökmesi durumunda bile kümenin çalışmaya devam etmesini sağlar.

Yedekleme ve Geri Yükleme

* Snapshot (Anlık Görüntü): nodetool snapshot komutu, belirli bir KeySpace veya tablonun anlık görüntüsünü alır. Bu, veritabanının belirli bir zamandaki durumunu kaydeder.
* SSTableLoader: Yedeklenen SSTable dosyalarını (Cassandra’nın diskteki veri dosyaları) yeni bir kümeye veya düğüme yüklemek için kullanılır.
* Commit Log Yedekleme: Değişikliklerin kaydedildiği commit logları da yedeklenmelidir.

Performans Optimizasyonu İpuçları

Cassandra’dan en iyi performansı almak için bazı optimizasyonlar yapılabilir:

* Disk Seçimi: SSD’ler, geleneksel HDD’lere göre çok daha iyi okuma/yazma performansı sunar ve Cassandra için şiddetle önerilir.
* JVM Ayarları: cassandra-env.sh dosyasında JVM heap boyutu (örneğin, MAX_HEAP_SIZE), çöp toplama (garbage collection) algoritması gibi ayarlar optimize edilebilir. Genellikle G1GC önerilir.
* Sıkıştırma Algoritmaları: Tablo oluştururken sıkıştırma algoritmaları (LZ4, Snappy) belirterek disk alanı kullanımını azaltabilir ve okuma performansını artırabilirsiniz.
* Önbellek Ayarları: cassandra.yaml dosyasındaki key_cache_size_in_mb ve row_cache_size_in_mb gibi önbellek ayarları, sık erişilen verilere ulaşım hızını artırabilir.
* Veri Modelleme: En önemli optimizasyonlardan biri doğru veri modellemesidir. Sorgularınızı önceden düşünerek ve denormalizasyon kullanarak gereksiz okuma işlemlerini minimize edin.
* Sanal Düğüm Sayısı (num_tokens): Varsayılan 256 genellikle iyi olsa da, çok büyük kümelerde veya özel durumlarda bu değer ayarlanabilir.

Sonuç

Apache Cassandra, dağıtık sistemlerin karmaşıklığını basitleştiren ve büyük ölçekli veri ihtiyaçlarını karşılamak için güçlü bir çözüm sunan, yatay olarak ölçeklenebilir bir NoSQL veritabanıdır. Ubuntu 14.04 gibi daha eski bir platformda bile, bu makalede özetlenen adımları izleyerek çok düğümlü bir Cassandra kümesini başarıyla kurabilir ve çalıştırabilirsiniz.

Kurulum ve temel yapılandırma adımları, bir Cassandra kümesinin temellerini atmanızı sağlar. Ancak, üretim ortamlarında Cassandra’yı verimli bir şekilde yönetmek için veri modelleme, izleme, düzenli onarım işlemleri, güvenlik ve felaket kurtarma stratejileri gibi konulara derinlemesine hakim olmak önemlidir. Doğru planlama, yapılandırma ve sürekli yönetim ile Cassandra, yüksek performanslı ve dayanıklı uygulamalarınız için sağlam bir omurga sağlayabilir. Ubuntu 14.04’ün yaşam döngüsünün sona erdiğini unutmamakla birlikte, bu bilgiler mevcut sistemlerin bakımı veya öğrenme amaçlı kullanımlar için değerli bir kaynak teşkil etmektedir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.