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>