ElasticSearch nedir ve Mac M1 işletim sisteminde ElasticSearch cluster kurulumu nasıl yapılır?

Ertuğrul AKDAĞ
5 min readFeb 8, 2024

--

What is ElasticSearch and how to install ElasticSearch cluster on Mac M1 operating system?

Her geçen gün uygulama ve/veya web siteleri içinde arama en önemli özelliklerinden biri haline geldi. Birçok uygulamadaki arama özelliğini kullanır. Bu nedenle herkes kullanıcı deneyimini geliştirmek için aramalarını daha hızlı ve daha iyi hale getirmeye gayret gösteriyor.

ElasticSearch, java dili ile geliştirilmiş, “Lucene” altyapısı üzerine oturtulmuş open-source bir arama motorudur. ElasticSearch ile SQL’i kıyaslamak doğru olmaz ama aşina olmak adına baktığımızda database karşılığı index, table karşılığı type, column karşılığı field, row karşılığı document olarak düşünmeliyiz. ElasticSearch üzerinde 4 farklı HTTP Method ile veri depolama, veri çekme, indexleme gibi işlemleri yapabiliriz. Bu methodlar POST, DELETE, PUT ve GET’dir.

Bu makalemizde M1 işlemciye sahip MacOS için ElasticSearch kurulumu nasıl yapılır buna bakacağız. elastic.co/downloads/elasticsearch adresine gidelim, choose platform açarak listeden macOS aarch64 seçelim ve elasticsearch-X.XX.X-darwin-aarch64.tar.gz dosyası indirelim. Sıkıştırılmış halde indirilen dosyayı açalım ve terminal üzerinden ilgili dosya konumu içindeki bin klasörü içindeki elasticsearch dosyasını çalıştıralım.

cd /Users/ertugrul.akdag/Downloads/elasticsearch-8.12.1/
elasticsearch-8.12.1 ll
elasticsearch-8.12.1 ./bin/elasticsearch

Eğer terminal ekranınızda aşağıdaki gibi bir çıktı görüyorsanız başarılı bir şekilde ElasticSearch kurulmuş demektir.

ℹ️ Password for the elastic user kısmında varsayılan olarak kullanıcı adınız (elastic) ve şifreniz (S*u9XXX) yer almaktadır. Bu şifreyi not etmenizi öneririm. Şifrenizi yeniden oluşturmak isterseniz terminal aracılığı ile aşağıdaki kodları çalıştırabilirsiniz.

cd /Users/ertugrul.akdag/Downloads/elasticsearch-8.12.1/
elasticsearch-8.12.1 bin/elasticsearch-reset-password -u elastic

ElasticSearch’ündoğru kurulup kurulmadığından emin olmak için https://localhost:9200/ adresine giderek kullanıcı adı ve şifrenizi girmelisiniz.

Eğer https://localhost:9200/ adresine get isteği yaptığınızda aşağıdaki gibi json dosyası dönüyor ise tebrikler ElasticSearch kuruldu ve hizmete hazır demektir.

Artık dağıtık yapı yani cluster(küme) şeklinde 1 adet master(yönetici) 2 adette node (köle) şeklinde toplam 3 sunucudan oluşan yapı kuralım. Bunun için indirdiğimiz elasticsearch-8.12.2-darwin-aarch64.tar.gz dosyasını aşağıdaki dosya formatı gibi arşivden çıkaralım.

Her klasörün içinde config isminde klasör bulunmaktadır. Config içindeki elasticsearch.yml ismindeki elasticsearch configuration dosyasını açalım.Bu dosyanın ne işe yaradığından ve nasıl bir konfigürasyon yapacağımızdan bahsedelim.

elasticsearch.yml elasticsearch’ün yapılandırma dosyasıdır. İlk açılıştaki varsayılan olarak girilen bu konfigrasyonlar okunur ve açılan node açılışta neler yapması gerektiğini bu yapılandırma dosyasından öğrenir. Aşağıdaki örnekte master nod’un yml dosyasını baz aldım. Diğer 2 slave nodların yml dosyalarını dokümanın sonuna ekleyeceğim.

# Use a descriptive name for your cluster:
cluster.name: elk-master
# elasticsearch single node kursak bile bir cluster içinde node barındırır. Burada cluster ismi belirlenir.

# Use a descriptive name for the node:
node.name: node-master
# clusterda yer alan nodun ismi burada belirlenir. Cluster içinde bunlar tekil olarak verilmelir.

# Path to directory where to store the data (separate multiple locations by comma):
path.data: /path/to/data
# path.data: elasticsearch'ün datalarının nerede tutulacağını belirtir.
path.logs: /path/to/logs
# path.logs: elasticsearch'ün loglarını nerede tutulacağını belirtir.

# By default Elasticsearch listens for HTTP traffic on the first free port it
http.port: 9200
# elasticsearch'ün varsayılan port numarası 9200'dür. Ben master nodun portunu 9200 olarak kalmasını istediğimiz için dokunmadım.

# Pass an initial list of hosts to perform discovery when this node is started:
discovery.seed_hosts: ["192.168.1.5:9200"]
# bir cluster'da yer alacak nodların tam listesini içeren parametredir. Biz 3 nodlu bir yapı kuracağımız için 2 nodun da ip adresi ve port numaraları yazılmalıdır.
# nodeların birbirini bulma sürecini yönetir. Bu parametre bir elasticsearch node'u restart olduğunda veya node'lardan biri master node'un fail olduğunu düşündüğünde master node ile iletişim kurulana yada yeni bir master node seçilene kadar çalışır.

# Bootstrap the cluster using an initial set of master-eligible nodes:
cluster.initial_master_nodes: ["elk-master"]
# cluster'da bu 3 node arasından hangisini master olarak verdiğimiz parametredir. Biz 1 master 2 slave yapacağımız için master nodun adını veriyoruz.

# Lock the memory on startup>Swapping’i kapatma
# JVM büyük bir çöp toplama işlemi gerçekleştirdiğinde yığının her sayfasına dokunur, bu sayfalardan herhangi biri diske değiştirilirse, tekrar belleğe değiştirilmeleri gerekecektir.
# Bu, Elasticsearch'ün isteklere hizmet vermek için kullanmayı tercih edeceği çok sayıda disk bozulmasına neden olur ve node’un stabilirliği için performansını kötü etkiler, maaliyete neden olur.Unix veya sanal Windows işletim sistemlerinde engellemek bir yöntemdir.
bootstrap.memory_lock: true

# elasticsearch JVM heapsize’ı default olarak otomatik yönetir. Ancak bu değer override edilebilir. /etc/elasticsearch/jvm.options dosyası içerisinde aşağıdaki gibi set edilerek heap size değiştirilebilir. Max Heap size 31gb olabilir.
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms31g
-Xmx31g
# Biz bu konfigürasyonu yapmayacağız çünkü otomatik olarak yönetilmesini istiyoruz.

# Elasticsearch, network.host veya transport.host özellikleri ayarladığızda da node’un, production modunda olduğunu düşünür.
# network.host veya transport.host ayarı node’un diğer sunucularla etkileşim kurması ve node’a erişebilmek için önemlidir.
transport.host: 0.0.0.0 #cluster yapıyı kuracağımız için bu ayarı açıyoruz.

# Elasticsearch, Dizin adlarında bazen birden fazla dizini sorgulamaya/silmeye yardımcı olan ancak aynı zamanda çok yıkıcı da olabilen joker karakter kalıplarını destekler. Örneğin aşağıdaki komutları kullanarak tüm indeksleri tek bir komutla silmek mümkündür:
# DELETE /*
# Bunu devre dışı bırakmak için elasticsearch.yml dosyasına aşağıdaki satırları ekleyebilirsiniz
action.destructive_requires_name: false

elasticsearch.yml dosyamız hazır, şimdi master node’da token oluşturacağız ilk nodun kurulduğundaki dokümanda token’ı ve token oluşturma kodunu görmüştük. Yine bu komutu kullanarak token üretebiliriz.

ℹ️  Configure other nodes to join this cluster:
• On this node:
⁃ Create an enrollment token with `bin/elasticsearch-create-enrollment-token -s node`.
⁃ Uncomment the transport.host setting at the end of config/elasticsearch.yml.
⁃ Restart Elasticsearch.
• On other nodes:
⁃ Start Elasticsearch with `bin/elasticsearch --enrollment-token <token>`, using the enrollment token that you generated.

Oluşturduğumuz token’ı alarak slave1 ve slave2 yani diğer node’lar için aşağıdaki çalıştıralım.

cd /Users/ertugrul.akdag/Downloads/elasticsearch-slave-1
/Users/ertugrul.akdag/Downloads/elasticsearch-slave-1/bin/elasticsearch --enrollment-token eyJ2ZXIiOiI4LjEyLjIiLCJhZHIiOlsiMTkyLjE2OC4xLjU6OTIwMCJdLCJmZ3IiOiI1NGY1YmI5NTE0MzMyYWU2NDBlZTg3NjA4NmE5ODA2NTU0NThlNDY0N2Y4MjNkNzI0MzAyZjNiYzVjOTUyNzVjIiwia2V5IjoiQXBXZDE0MEJzTWFYUFdFWW0zS286eWdmRUdORE1TZC13NHpLZ01pSF95USJ9

cd /Users/ertugrul.akdag/Downloads/elasticsearch-slave-2
/Users/ertugrul.akdag/Downloads/elasticsearch-slave-2/bin/elasticsearch --enrollment-token eyJ2ZXIiOiI4LjEyLjIiLCJhZHIiOlsiMTkyLjE2OC4xLjU6OTIwMCJdLCJmZ3IiOiI1NGY1YmI5NTE0MzMyYWU2NDBlZTg3NjA4NmE5ODA2NTU0NThlNDY0N2Y4MjNkNzI0MzAyZjNiYzVjOTUyNzVjIiwia2V5IjoiQXBXZDE0MEJzTWFYUFdFWW0zS286eWdmRUdORE1TZC13NHpLZ01pSF95USJ9

1 master 2 slave elasticsearch veritabanımız hazır.

Node bilgilerini görmek için https://localhost:9202/_cat/nodes sorgusunu kullanabilirsiniz.

Umarım faydalı olmuştur. Keyifli okumalar 😊

--

--