swetrix
cassandra-cluster

Cassandra Cluster Kurulumu – Ubuntu 22.04

Apache Cassandra nedir?

Basit bir şekilde anlatmak gerekirse Apache Cassandra, bir NoSQL veritabanıdır. Esnek bir yapıya sahiptir ve big data işleri için uygundur. Tek bir hata noktası bile olmadan (no single point of failure) yüksek kullanılabilirlik sağlar (high availability). Yazımda size 3 nodelu bir cassandra cluster basitçe nasıl kurulur bunu anlatacağım.

Gerekli Kaynaklar:

  • 3 tane Ubuntu 22.04 server.
  • Cassandra versiyonuna göre java sürümü, benim örneğimde cassandra 4.1 versiyonu olduğu için OpenJDK 8 / OpenJDK 11 latest versiyonları uygun olacaktır. Java kurmak ve versiyonu check etmek için aşağıdaki commandleri kullanabilirsiniz.
sudo apt-get install openjdk-11-jdk

java -version
  • cqlsh, yani cassandra command line toolu için python versiyon 3.6+ veya 2.7 olması yeterli olacaktır. Pythonı kurmak ve versiyonu check etmek için aşağıdaki commandleri kullanabilirsiniz.
sudo add-apt-repository ppa:deadsnakes/ppa

sudo apt-get update

sudo apt-get install python3.6

python --version
  • Cassandra nodeları birbirleriyle haberleşebilmeli, cassandranın default portu 9042 olduğundan, Serverların birbirlerine 9042 portu üzerinden network trafiğinin açık olması gerekli.

Cassandra Kurulumu

Cassandra her 3 server’a cluster haline getirilmeden önce single node olarak kurulmalı. Debian package installation ile aşağıdaki gibi cassandra kurabilirsiniz.

İlk önce repoyu aşağıdaki gibi cassandra.sources.list’e eklemelisiniz:

echo "deb https://debian.cassandra.apache.org 41x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
deb https://debian.cassandra.apache.org 41x main

Daha sonra apache repository keylerini serverınızdaki trusted key listesine eklemelisiniz.

curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add -

Daha sonra package indexi güncelleyip cassandra kurulumunu başlatabilirisiniz.

sudo apt-get update
sudo apt-get install cassandra

Tebrikler! Cassandra single node kurdunuz bile. Cassandra statüsünü kontrol etmek için aşağıdaki commandi kullanabilirsiniz. Bu command sizin cassandra instance durumunuzu gösterecektir.

nodetool status
Datacenter: 168
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address          Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.159.129

Not: Korkmayın, UN statüsü, Up/Normal anlamına gelmekte, unavailable değil yani 🙂 .

Ayrıca bununla beraber cqlsh tool yüklendiğinden, direk database’e localhost exception olduğundan bağlanabilirsiniz, sadece command line’a cqlsh yazmanız yeterli.

mertyavuz@ubuntuserver1:~$ cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
cqlsh>exit;
mertyavuz@ubuntuserver1:~$

Not: Örnek cassandra connection string (cassandra endpoint with basic authentication with default master cassandra user)

cqlsh 10.90.214.187 9042 -u cassandra -p cassandra

Cassandra node specific ve cluster specific config’e girmeden önce, diğer 2 serverda da aynı şekilde cassandraların kurulması gerekli.

Cassandra Standalone Nodeların Cluster Haline Getirilmesi

Daha sonra cassandra.yaml’da (/etc/cassandra/cassandra.yaml) cluster kurulumu için minimum olarak aşağıdaki configürasyonların değiştirilmesi gerek.

İlk olarak seed_provider kısmında seeds valuelarına, bütün cassandra server iplerini girmeniz gerek (her bir node’da)


seed_provider:
    # Addresses of hosts that are deemed contact points.
    # Cassandra nodes use this list of hosts to find each other and learn
    # the topology of the ring.  You must change this if you are running
    # multiple nodes!
    - class_name: org.apache.cassandra.locator.SimpleSeedProvider
      parameters:
          # seeds is actually a comma-delimited list of addresses.
          # Ex: "<ip1>,<ip2>,<ip3>"
          - seeds: "192.168.159.129,192.168.159.130,192.168.159.131"

Listen address valuesu spesifik olarak server IPsi olmalı.

listen_address: 192.168.159.129

Endpoint snitch aşağıdaki gibi olmalı.

endpoint_snitch: RackInferringSnitch

Bu parametleri cassandra.yaml’da değiştirdikten sonra, her bir node da cassandra servisleri restart edilmeli.

service cassandra restart

Daha sonra cassandra servisleri GossipProtocol üzerinden haberleşmeye başlayacaktır. Bunu yine nodetool status commandiyle kontrol edebilirsiniz:

image

Şimdi sizlerle Replication test etme senaryosu yapalım, aşağıdaki gibi herhangi bir node’a cqlsh ile bağlanıp keyspace oluşturun ve ardından tablo oluşturup buna insert yapın.

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

use foo;
create TABLE test (sno int PRIMARY KEY, pname text);

INSERT INTO test (sno , pname ) VALUES (1,'mert');
INSERT INTO test (sno , pname ) VALUES (2,'mert');

select * from test;
 sno | pname
-----+-------
   1 |  mert
   2 |  mert

daha sonra db den çıkıp bu kayıtların hangi nodelara ulaştığını aşağıdaki command ile bulabirsiniz:

mertyavuz@ubuntuserver1:~$ nodetool -h localhost getendpoints foo test 1
192.168.159.131
192.168.159.129
192.168.159.130

3 nodelu Cassandra cluster kurulumu bu şekilde tamamlanıyor.

Ekstra Değinilmesi Gerekenler

Consistency level, Cassandra tutarlılık düzeyidir, işlemin başarılı (örneğin; CRUD işlemleri) sayılabilmesi için onaylaması gereken minimum Cassandra node sayısı olarak tanımlanır. Örneğin; consistency quorum level yapıldığında (n/2 +1) formülü uyganır. Default olarak bu 1’dir.

cqlsh> consistency quorum;
Consistency level set to QUORUM.

Consistency için ekstra bilgiye aşağıdaki linkten ulaşılabilir:

https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html


Eğer cassandra servis başlatmasında “cannot start node if snitch’s data center differs from previous data center” hatası alınıyorsa, cassandra-env.sh file da aşağıdaki commandler eklenmeli:

vim /etc/cassandra/cassandra-env.sh
VM_OPTS="$JVM_OPTS -Dcassandra.ignore_dc=true"
JVM_OPTS="$JVM_OPTS -Dcassandra.ignore_rack=true"

Yazım ile ilgili feedback vermek istiyorsanız ya da bir sorun yaşıyorsanız lütfen bana ulaşın.

Bir yanıt yazın

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

Önceki Yazı
systemd

Linux’da systemd servisi nasıl oluşturulur ?

Sonraki Yazı
mongodb_standalone

MongoDb Kurulumu – Ubuntu 20.04

Benzer Yazılar