++++++++++++++++ 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.