Elasticsearch Kurulumu ve Temel Bilgi (Ubuntu)

22/11/2017wutlu

ElasticSearch, büyük veriler ile çalışan yazılımlarda içerik arama, veri analizi, soruglamalar ve öneriler gibi işlemlerde özellikle performans kabiliyetlerinin güçlü ve esnek olmasın dan dolayı tercih edilen bir arama motorudur. Elasticsearch java ile geliştirilmiş, “Lucene” altyapısı üzerine oturtulmuş open-source bir arama motorudur.

Bu yazıda Elasticsearch temel düzeyde kurulum ve ilk izlenim için gerekli bilgileri paylaşacağım.

1) Elasticsearch 6.0.0 kurulumu

wget –no-check-certificate https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.deb

sudo dpkg -i elasticsearch-6.0.0.deb

2) Yapılandırma

/etc/elasticsearch/elasticsearch.yml

Dosyasının içerisinde bulunan bazı alanları inceleyelim.

cluster.name: “WutluWorld”

Elasticsearch çalıştırırken 1 veya daha fazla sunucu farketmeksizin bir küme yapısı kullanacaksınız. Buna cluster deniyor. Cluster’ın altında node‘lar bulunur. Bunlar da bir nevi alt kümelerdir. Şimdi, mevcut kurulumunuzla 1 adet cluster, 1 adet de node oluşturmuş olacaksınız.

node.name: “Node-1”

Şu yapı ile ne yaptığımızı açıklayacak olursak, WutluWorld adında bir ana kümemiz oldu. Bu kümenin içerisinde Node-1 adında bir alt kümemiz oldu. Yazının devamında kümeler hakkında daha detaylı açıklama yapacağım.

path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch

Verilerin ve logların yazılacağı klasör.

network.host: 192.168.0.1
http.port: 9200

network.host ve network.port varsayılan olarak yukarıdaki gibidir. Hiçbir şey girmezseniz varsayılan bu kalacaktır. Lakin farklı ip ve portta yayın yapabilirsiniz. Küme yapısında ve yoğun trafikte bu çok işinize yarayacaktır.

discovery.zen.ping.unicast.hosts: ["host1", "host2"]
discovery.zen.minimum_master_nodes: 3

discovery.zen.ping.unicast.host parametresini birbiri ile bağlantı kuracak kümelerde kullanacağız. discovery.zen.minimum_master_nodes ise “En az kaç ana alt küme ayakta kalmalıdır?” Sorusunun cevabı olacaktır. Yazının devamında bu konuyu daha da açacağız.

gateway.recover_after_nodes: 3

gateway.recover_after_nodes ile veri kaybı durumunda kaç küme bir araya gelip verileri tam hale getirsin?

action.destructive_requires_name: true

Elasticsearch de Regex kütüphanesini sık sık kullanacağız. Ve bir veritabanı (indices) silmek o kadar basit ki. Milyarlarca veriyi tek bir tuşla yanlışlıkla silebilirsiniz. Misal [VeriDeposu-1, VeriDeposu-2, VeriAlani-1, VeriDunyasi-1] şeklinde 4 farklı indicesımız olsun.

curl -XDELETE 'localhost:9200/Veri*'

Yukarıdaki komutu yolladığımızda Veri ile başlayan tüm indiceslarımız silinecektir. Bunu engellemek için bu alanı kullanacağız.

Genel Tanım

Yazının başlarında Elasticsearch’ün küme yapısı olduğundan bahsetmiştik. Kısaca küme yapısı nedir ondan bahsedelim. Küme yapısı; örneğin Facebook’u ele alalım. Bugün siz Facebook’a üye olduğunuzda veya bir paylaşım yaptığınızda, çok hızlı bir şekilde milyarlarca kayıt içerisinden işlem yapıyorsunuz değil mi? İşte bunu bukadar hızlı yapabilmenizdeki temel faktörlerden birisi budur. Facebook, X, Y ve Z şehirlerinde 3 farklı veri merkezi kurmuş diyelim. X, Y ve Z birer alt küme diyecek olursak, ana küme adımız da Facebook olur. Siz Facebook’a girdiğinizde size en yakın şehirdeki veri merkezine bağlanırsınız. Siz sitede takılırken alt kümeler girdiğiniz verileri arkaplanda birbirleri ile paylaşır. Böylece sizin hesap bilgileriniz ve paylaşımlarınız, Facebook’un tüm veri merkezlerinde birer kopya halinde saklanır. Bu durumda Y veri merkezini havaya uçurduğunuzda; merkez tekrar inşa edilirse, sistem diğerlerinden senkronize olarak Y merkezini otomatikmen tekrar ayağa kaldıracaktır.

Küme Örneği

3 farklı serverımız olsun. Bu 3 server’ın ip adresleri [192.168.1.2, 192.168.1.3, 192.168.1.4] olsun. Her birine yazının en başındaki gibi standart kurulum yapıyoruz.

192.168.1.2 için elasticsearch.yml dosyası.

cluster.name: "Facebook"
node.name: "VeriDeposu-1"
network.host: 192.168.1.2
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.1.2", "192.168.1.3", "192.168.1.4"]
discovery.zen.minimum_master_nodes: 2
gateway.recover_after_nodes: 2

192.168.1.3 için elasticsearch.yml dosyası.

cluster.name: "Facebook"
node.name: "VeriDeposu-2"
network.host: 192.168.1.3
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.1.2", "192.168.1.3", "192.168.1.4"]
discovery.zen.minimum_master_nodes: 2
gateway.recover_after_nodes: 2

192.168.1.4 için elasticsearch.yml dosyası.

cluster.name: "Facebook"
node.name: "VeriDeposu-3"
network.host: 192.168.1.4
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.1.2", "192.168.1.3", "192.168.1.4"]
discovery.zen.minimum_master_nodes: 2
gateway.recover_after_nodes: 2

Bu 3 server birbiri ile kısmen aynı veriyi taşıyacaktır. Hepsini Facebook kümesine dahil olsun diye belirttik. Ve her biri için bir alt küme adı verdik. Aynı şekilde farklı IP adresi belirledik. Ve birbirleri ile letişim halinde olsun dedik. Burada kilit nokta discovery.zen.minimum_master_nodes: 2 ve gateway.recover_after_nodes: 2 parametreleridir. Nodlar verinin bir aslını, bir de kopyasını taşırlar. Biz burada discovery.zen.minimum_master_nodes: 2 derken en az 2 asıl verinin olduğu küme olsun dedik. Yani toplamda 3 sunucumuz var. Oldu ya birisi kapandı diyelim. Biz bunlara en az 2 sunucuda ana veriyi tut demiştik. Veri zaten en az 2 sunucuda olduğundan korkmamıza gerek yok. Bu esnada diğer sunucuyu onarmaya başlayabiliriz. Tam burada gateway.recover_after_nodes: 2 çok işimize yarayacak. Eğer 2 den az sunucu ayaktaysa sistem kapanır. Çünkü bizim asıl verimiz 2 asıl sunucuda saklı. Ama 1 sunucu açık ? Doğal olarak verilerin bir kısmına tam manasıyla ulaşılamaz. Bu en az 2 sunucu aktif olana dek sistem kapalı kalacaktır.

Kurulumla ilgili anlatabildiklerim bu kadar. Zamanla Elasticsearch sorgularından bahsedeceğim.

Bilgi: Sunucunuzda Java yüklü değilse;

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Leave a comment

Your email address will not be published. Required fields are marked *

Prev Post Next Post