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

[code language=”bash”]
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
[/code]

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.

[code language=”bash”]
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;
}
}
[/code]

Nginx auth ayari yapmak icin ise

[code language=”bash”]
sudo apt-get install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd kullaniciadi
[/code]

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

[code language=”bash”]
cluster.name: mustafanin_yeri
#kebapci acmiyoruz daha duzgun isim verin tabi : ))
[/code]

node’a bir isim veriyoruz

[code language=”bash”]node.name: "srv1" [/code]

ayar dosyamizin networking kismina iniyoruz

[code language=”bash”]network.bind_host: ["127.0.0.1","10.135.138.1","10.135.139.2"][/code]

makinenin kendi ip adresi

[code language=”bash”]network.publish_host: 10.135.138.1[/code]

ayar dosyamizin discovery bolumune iniyoruz

[code language=”bash”]
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["10.135.138.1", "10.135.139.2"]

[/code]

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.

[code language=”bash”]
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
[/code]

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 🙂

Yorum Gönderin

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir