Elasticsearch Cluster Kurulumu


elas_0203
Bu yazimda sifirdan bir elasticsearch cluster’i nasil kuracagimizdan ve bunu HA (high availability) seklinde nasil konfigure edecegimizden bahsedecegim.

Environment

  • Isletim sistemi ubuntu 14.04
  • Elasticsearch versiyonu 1.7.4 (2.1.1 cikti ancak cogu eklenti 1.x surumuyle uygun oldugundan 1.7.4 kullaniyorum)
  • 2 farkli makine

Orneklerde kullanilan iki farkli makine var

srv1: 10.135.138.1

srv2: 10.135.139.2

ip adresini kullaniyor.

1) Elasticsearch’u kuralim

sudo apt-get update
sudo apt-get install openjdk-7-jre
java -version ## versiyonu kontrol edelim
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list
## 1.7 serisi icin stabil repoyu ekledik
sudo apt-get install elasticsearch
update-rc.d elasticsearch defaults 95 10

kurulum islemi bu kadar basit. Elasticsearch’u iki sunucuda da kurduktan sonra gecelim diger adima.

2) Nginx kurulumu

Bir zorunluluk degil tabii ama ben elasticsearch sunucularinin onunde auth kismini halletmesi icin nginx kullaniyorum.  Standart bir nginx kurulumunda yapmaniz gereken nginx’e gelen istekleri elasticsearch’e aynen iletmek.

server {
listen       80;
server_name  localhost;
location / {
# Pass requests to ElasticSearch
proxy_pass http://localhost:9200;
proxy_redirect off;
proxy_set_header  X-Real-IP  $remote_addr;
proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header  Host $http_host;
# Authorize access
auth_basic           "Ooops!";
#auth_basic_user_file passwords;
auth_basic_user_file /etc/nginx/.htpasswd;
# Route all requests to the root index
rewrite ^(.*)$ $1 break;
rewrite_log on;
return 403;
}
}

Nginx auth ayari yapmak icin ise

sudo apt-get install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd kullaniciadi

bu adımdan sonra sifrenizi gireceksiniz, hepsi bu.

3) Node Ayarlamaca

Elasticsearch’un bi’ guzel tarafi olcekleme ve HA ayari yapmak cogu sisteme gore kolay. Ancak benim gibi yeni baslayan birisi iseniz, https://www.elastic.co/guide/en/elasticsearch/guide/current/_add_failover.html bunu okuyunca anlamamaniz mumkun. O yuzden config dosyasini okusam daha cok anlarim diyip sevdigimiz bir editorle /etc/elasticsearch/elasticsearch.yml dosyasini aciyoruz.

Karsimiza gelen ilk ayar cluster.name varsayilan olarak “elasticsearch” tur eger icerde data varsa ve cluster setupuna mevcut bir duzenden tasiyacaksaniz degistirmeyin o degeri, degistirince data dizini icerisinde cluster icin yeni bir dizin aciliyor.

Neyse uzun lafin kisasi, cluster ismi veriyoruz iste ornegin

cluster.name: mustafanin_yeri
#kebapci acmiyoruz daha duzgun isim verin tabi : ))

node’a bir isim veriyoruz

node.name: "srv1" 

ayar dosyamizin networking kismina iniyoruz

network.bind_host: ["127.0.0.1","10.135.138.1","10.135.139.2"]

makinenin kendi ip adresi

network.publish_host: 10.135.138.1

ayar dosyamizin discovery bolumune iniyoruz

discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["10.135.138.1", "10.135.139.2"]

discovery ayarlari sayesinde makineler bir birlerini gorebiliyor. Iki sunucuyuda bu ayarlarla konfigure ediyoruz, node.name ve publish_host parametreleri sunucuya ozgu olacak tabii.

NOT: IP adresleri ornek olarak yazilmistir, private network icindeyseniz onlari kullanabilirsiniz, oyle bir secenek yoksa public ip adresini de kullanabilirsiniz.

Bu sekilde konfigure ettikten sonra elasticsearch servisini baslatin, makinelerin bir birini gordugunu ve cluster durumunun yesil oldugunu goreceksiniz. Hepsi bu 🙂

 

4 ) Güvenlik

Data senkronu saglamak icin bu makineler bir biriyle iletisime gecebilmeli ancak onun disinda elasticsearch portlarina herhangi bir istek gelmemeli. Bu yuzden iptables kurali ekliyoruz.

sudo iptables -I INPUT 1 -p tcp --dport 9200:9400 -s 127.0.0.1,10.135.138.1,10.135.139.2 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 9200:9400 -j DROP

bu iki makinenin bir biriyle iletisime gecmesine izin verdik.

5) Eklentiler

Head (elasticsearch kurup bu eklentiyi kurmadigim olmadi galiba, cok faydali) – https://github.com/mobz/elasticsearch-head

Kopf (ozellikle cluster yapisinda cok is gorur) – https://github.com/lmenezes/elasticsearch-kopf

Cok etkin kullanmiyorum  ancak bigdesk‘te guzel bilgiler sunuyor – https://github.com/lukas-vlcek/bigdesk

Marvel – parali olmasina karsin test edip deneyebilirsiniz, ben denedim guzel – https://www.elastic.co/products/marvel ancak su anda test etmek icin dahi min elasticsearch 2.1.1 kurmaniz gerekiyor.

Bu eklentiler cluster yonetiminde faydali olacaktir.

 

Ozetle; bu yazinin en onemli adimi 3.cu adimdir, zaten orda da hepi topu 3-5 parametre ayarliyoruz.Makinenin biri kapandiginda digeri yine cevap vermeye devam edecek ancak cluster durumu yesilden sariya donecektir.

Anlamadiginiz bir yer varsa, yorum yazabilirsiniz. Baska bir yazida cluster snapshot almak ve loadbalancing gibi konulara deginmek istiyorum.

Umarim faydali olmustur 🙂

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s