RIAK KV Kurulumu

Riak production ortamında en az 3 node, mümkünse 5 node çalışması önerilen dağıtık bir veritabanı sistemidir. Belli başlı özellikleri ve avantajları şu bağlantıdan okunabilir:

http://www.ulakbus.org/wiki/yazilim_tasarim_analizi_belgesi.html#riak

Bu dökümanda 5 node riak ve yük dengelemek için haproxy kurulum ve konfigürasyonu anlatılacaktır.

5 makinada üzerinde başka bir uygulama kurulmamış bulunan Ubuntu 14.10 (trusty) dağıtımının kurulu olduğu varsayılmıştır.

Kurulum için tavsiyemiz en az 2 CPU/VCPU ile 8 GB RAM bulunan sanal ya da gerçek sunucular kullanmanız yönündedir.

Bu kurulumu, geliştirme ortamınız için, 1 CPU ve 1 GB RAM ile 3 node olarak VirtualBox veya benzeri bir sanallaştırma ortamı üzerinde yapabilirsiniz.

Ön Hazırlıklar

Öncelikle her bir makinenin hostname ve IP adreslerinin düzgün şekilde ayarlandığından emin olalım. Bizim örneğimizde IP adresleri ve hostnamelerin şu şekilde olduğu kabul edilmiştir.

10.0.0.10    node1.example.org
10.0.0.11    node2.example.org
10.0.0.12    node3.example.org
10.0.0.13    node4.example.org
10.0.0.14    node5.example.org

Hostname ayarlamak için

# sudo hostnamectl set-hostname node1

komutunu kullanabilirsiniz.

Fully qualified domain name için de /etc/hosts dosyasına aşağıdaki gibi bir girdiyi eklememiz gerekmektedir.

# sudo vim /etc/hosts

...
10.0.0.10   node1.example.org   node1

İlgili değişikliği yaptıktan sonra

$ hostname -f

çıktısınının node1.example.org şeklinde alan adı ve hostname ile birlikte olduğundan emin oluyoruz.

Bu işlemleri yaptıktan sonra eğer sisteminizde yoksa bazı yardımcı paketlerin kurulması gereklidir:

apt-get install -y curl wget

Java Kurulumu

Riak Search için java gerekmektedir. Aşağıdaki komutlarla sistemimize Java kuruyoruz.

apt-get update -qq && apt-get install -y software-properties-common && \
     apt-add-repository ppa:webupd8team/java -y && apt-get update -qq && \
     echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections && \
     apt-get install -y oracle-java8-installer

Kurulumu aşağıdaki komut ile doğrulayabiliriz:

$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

Riak Kurulumu

Riak kurulumu birkaç yol ile yapılabilir. Kaynak kod derlemek bunlardan birisidir. Fakat bu pek pratik değildir. Biz kaynak koddan kendimiz derleyerek elde ettiğimiz deb paketlerini kullanacağız. Packagecloud.io da tuttuğumuz paketleri sisteminize yüklemek için

$ curl -s https://packagecloud.io/install/repositories/zetaops/riak/script.deb.sh | sudo bash
$ apt-get install -y riak

komutlarını kullanabilirsiniz.

Riak’ın düzgün çalışabilmesi için dosya limitlerini değiştirmemiz gerekmektedir. Bunu kalıcı şekilde yapmak için

echo '* soft nofile 65536' >>   /etc/security/limits.conf
echo '* hard nofile 65536' >>   /etc/security/limits.conf
echo "session required        pam_limits.so" >> /etc/pam.d/common-session-noninteractive
echo "session required        pam_limits.so" >> /etc/pam.d/common-session

komutlarını kullanabilirsiniz.

Riak kurulumunu

$ sudo riak-admin status
Node is not running!

komutuyla doğrulayabilirsiniz.

Paketlerin kurulumunun ardından riak servisi başlamayabilir. Bu durumda yukarıdaki gibi Node is not running! çıktısı alırsınız. Servisi başlatmak için

$ sudo service riak start

komutunu kullanabilirsiniz. Bu komut hiçbir çıktı üretmeyebilir. Servisin başladığından emin olmak için yeniden

$ riak-admin status
1-minute stats for 'riak@127.0.0.1'
-------------------------------------------
connected_nodes : []
consistent_get_objsize_100 : 0
consistent_get_objsize_95 : 0
consistent_get_objsize_99 : 0
consistent_get_objsize_mean : 0
consistent_get_objsize_median : 0
....

komutunu çalıştırabiliriz. Eğer riak çalıştıysa, konfigürasyonuyla ilgili oldukça uzun bir çıktı üretecektir.

Riak’ın üzerinde çalışacağı sistemin performansı ile ilgili daha birçok parametre vardır. Oldukça detaylı bu ayarlar ayrı bir belgede ele alınacaktır. Başlangıç için bu düzenlemeler yeterlidir ve Riak kararlı şekilde çalışabilir.

Riak Konfigürasyonu

Riak standart bir kurulumda /etc/riak dizini altındaki riak.conf dosyası ile konfigüre edilir. Bazı özellikler ise hala eski tip konfigürasyon dosyaları olan advanaced.config ve app.config dosyaları ile yapılır. Riak başlama esnasında bu dosyalara bakıp validasyon yapar ve tek bir nihayi konfigürasyon üretir. Dolayısı ile bu dosyalarda yapılacak her değişikliğin ardından riak servisi yeniden başlatılmalıdır.

sudo service riak restart

komutuyla Ubuntu üzerinde Riak servisini yeniden başlatabilirsiniz.

Konfigürasyon için ilk adım nodename değiştirmektir. riak.conf içindeki nodename = riak@127.0.0.1 değerini nodename = riak@10.0.0.10 şeklinde makine IP adresi ile değiştirmek gerekir. Bunu bir editör yardımı ile yapabilirsiniz. Ya da basitçe aşağıdaki komut ile de ilgili değişikliği yapabilirsiniz.

sed -i.bak "s/riak@127.0.0.1/riak@10.0.0.10/" /etc/riak/riak.conf

Riak servislerinin bağlandığı IP adreslerini de düzenlememiz gerekmektedir. Farklı bir hosttan haproxy ile erişeceğimiz bu servislerin bağlandığı IP adresleri host makinenin IP adresi 10.0.0.10 veya 0.0.0.0 şeklinde ayarlanabilir. Bu amaçla riak.conf dosyasındaki

listener.http.internal = 127.0.0.1:8098
listener.protobuf.internal = 0.0.0.0:8087

değerleri

listener.http.internal = 10.0.0.10:8098
listener.protobuf.internal = 10.0.0.10:8087

şeklinde değiştirilmelidir.

Riak Search için yine riak.conf dosyasındaki search = off değerini search=on şeklinde değiştirmemiz gereklidir.

Bu değişikliklerin ardından riak servisi yeniden başlatılmalıdır.

Buraya kadar yapılan işlemler 5 node için tekrar edilmelidir.

Cluster Oluşturma

5 node düzgün bir şekilde yapılandırıldıktan sonra Riak nodelar cluster olmak için hazırdır. Cluster oluşturmak için bir node seçilmeli ve diğer nodelardan bu node’a clustera katılma isteği gönderilmelidir.

Birinci node’u (10.0.0.10) seçtiğimizi varsayarsak diğer nodelarda sırayla

riak-admin cluster join riak@10.0.0.10

komutu çalıştırılır.

Diğer 4 node’da bu komut sırayla çalıştırılır. Cluster’a katılma talebi başarıyla gerçekleştiyse şöyle bir mesaj ile karşılaşırız:

Success: staged join request for 'riak@10.0.0.11' to 'riak@10.0.0.10'

Bütün nodlarda başarıyla cluster katılım talebini yaptıktan sonra, herhangi bir node’da sırasıyla şu komutlar çalıştırılarak yeni cluster değişiklikleri uygulanır:

riak-admin cluster plan
riak-admin cluster commit

Birinci komut cluster ile ilgili yeni değişiklikleri bize gösterir. Bu komutun çıktısı aşağıdaki gibidir:

=============================== Staged Changes ================================
Action         Nodes(s)
-------------------------------------------------------------------------------
join           'riak@10.0.0.10'
join           'riak@10.0.0.10'
join           'riak@10.0.0.10'
join           'riak@10.0.0.10'
-------------------------------------------------------------------------------


NOTE: Applying these changes will result in 1 cluster transition

###############################################################################
                         After cluster transition 1/1
###############################################################################

================================= Membership ==================================
Status     Ring    Pending    Node
-------------------------------------------------------------------------------
valid     100.0%     20.3%    'riak@10.0.0.10'
valid       0.0%     20.3%    'riak@10.0.0.11'
valid       0.0%     20.3%    'riak@10.0.0.12'
valid       0.0%     20.3%    'riak@10.0.0.13'
valid       0.0%     18.8%    'riak@10.0.0.14'
-------------------------------------------------------------------------------
Valid:5 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

Transfers resulting from cluster changes: 51
  12 transfers from 'riak@10.0.0.10' to 'riak@10.0.0.11'
  13 transfers from 'riak@10.0.0.10' to 'riak@10.0.0.12'
  13 transfers from 'riak@10.0.0.10' to 'riak@10.0.0.13'
  13 transfers from 'riak@10.0.0.10' to 'riak@10.0.0.14'

Bu tablolar bize cluster değişikliğinin ardından ring dağılımını ve clusterin yeni üyelerini gösterir.

Sonuncu commit komutuyla da bu değişikler aktif hale getirilir.