Cassandra da Multi-Node Cluster Database Oluşturma

Apache Cassandra, çok düğümlü cluster’lar üzerinde ölçeklenebilir ve mükemmel performans elde eden açık kaynak veritabanı sistemidir.

Bu yazıda Ubuntu 16.04 işletim sistemi yüklü 3 nodeli bir cluster üzerinde Cassandranın kurulumunu anlatacağım. 

Gereksinimler

Multi-node sistem üzerinde Cassandra çalıştırmak için öncelikle gereksinimleri belirlenmelidir. Cassandra kurulacak işletim sistemleri ve uygulama versiyonlarının aynı olmaları gerekmektedir. Aksi halinde senkronizasyon problemleri yaşanacaktır. Bu uygulama için sistemim aşağıdaki gibidir.

– Ubuntu 16.04 x64
– Python 2.7.12
– Cassandra 3.11.1
– Java 8

Python ve Java kesinlikle yüklü olmalıdır.

Kurulum

Kurulum işlemleri her node üzerinde aşağıdaki şekilde yapılmalıdır.

Cassandrayı kurmadan öncelikle Python kurulumunun yapılması gerekmektedir. Aksi halde cqlsh kullanılamayacaktır.

$ sudo apt-get install python

Apache repository’i sisteme tanıtmak için:

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

Apache repository keyi eklemek için:

$ curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -

Repository’i güncelleyip kurulum yapmak için:

$ sudo apt-get update
$ sudo apt-get install cassandra

Ayarlamalar

Tüm node’ler üzerinde cassandra kurduktan sonra birlikte çalışmaları için senkronizasyon ayarları yapılmalıdır. Benim clusterım içerisinde 3 node bulunuyor. Bu node’lerin ip adresleri aşağıdaki gibidir.

Node 1: 192.168.10.59
Node 2: 192.168.10.60
Node 3: 192.168.10.61

Konfigürasyon ayarlarını yapmadan önce cassandra servisi durdurulup ve default dataset silinmelidir.

$ sudo service cassandra stop
$ sudo rm -rf /var/lib/cassandra/data/system/*

Cassandranın konfigürasyon dosyası /etc/cassandra dizini altında cassandra.yaml dosyasıdır. Bu dosya içerisinde birçok ayarlamalar mevcut, anlaşılır ve değiştirmesi çok kolaydır. Parametrelerle ilgili detaylı bilgileri buradan bulabilirsiniz.

Cassandrada çok node’li cludter’i oluşturmak aşağıdaki parametrelerin değiştirmek yeterli olacaktır.

cluster_name: Clustera verilecek isimdir.
-seeds: Clusterdaki her nodenin ip adresinin virgülle ayrılmış listesidir.
listen_address: Cluster içerisindeki nodelerin birbirleri ile haberleşmesi için kullanılacak ip adresidir. İstenirse private bir network kurulup nodelerin kendi aralarında private ip ler ile haberleşmesi sağlanabilir.
rpc_address: Uygulamalarınızın cassandra ile haberleşeceği ip adresidir.
endpoint_snitch: Cassandra içindeki nodelerin nasıl bir yöntemle haberleşeceğinin belirlendiği parametredir.

cassandra.yaml dosyasının içeriği aşağıdaki gibidir.

## /etc/cassandra/cassandra.yaml dosyası
..
..
cluster_name: 'MyCluster'
..
..
seed_provider:
  - class_name: org.apache.cassandra.locator.SimpleSeedProvider
    parameters:
      - seeds: "192.168.10.59,192.168.10.60,192.168.10.61"
..
..
listen_address: sunucu_ip_adresi
..
..
rpc_address: sunucu_ip_adresi
..
..
endpoint_snich: RackInferringSnitch
..
..

Tüm nodeler üzerinde ayarlamaları tamamladıktan sonra her node üzerindeki cassandra servisini başlatmak için:

$ sudo service cassandra start

Nodelerin durumunu görmek için:

$ nodetool status
Datacenter: 168
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address        Load       Tokens       Owns (effective)   Host ID    Rack
UN  192.168.10.59  398.02 KiB  256          100.0%            781f40ff   10
UN  192.168.10.60  357.96 KiB  256          100.0%            c32ec1ec   10
UN  192.168.10.61  516.73 KiB  256          100.0%            e5a5d4e0   10

cqlsh terminali ile clustera bağlanmak için:

$ cqlsh 192.168.10.x
Connected to MyCluster at 192.168.10.59:9042. 
[cqlsh 5.0.1 | Cassandra 3.11.1 | CQL spec 3.4.4 | Native protocol v4] 
Use HELP for help. 
cqlsh>