Elasticsearch discovery, bootstrap, election

Daha önceki yazılarımda Elasticsearch kurulumundan ve önemli parametrelerden bahsetmiştim. Bu yazıda elasticsearh cluster konfigürasyonunu daha detaylı şekilde anlatmaya çalışacağım. Bir cluster’ı başlattığımız zaman gerçekleşen Elasticsearch Discovery, bootstrap ve election süreçlerinin nasıl işlediğinden bahsedeceğim.

Öncelikle bir Elasticsearch cluster kurulduktan sonra sahip olması gereken minimum konfigürasyonlar aşağıdaki gibidir. Bu konfigürasyonlar default olarak da tanımlanan ancak Prod ortamlarda değiştirilmesi tavsiye edilen değişikliklerdir. 

Elasticsearch konfigürasyon dosyaları $ES_HOME dizininde yer alır. Bu dosyalar şunlardır;

Elasticsearch.yml : Cluster ve node seviyesinde Elasticsearch konfigürasyonları
jvm.options : Java ile ilgili konfigürasyonlar 
log4j2.properties : log4j ile ilgili konfigürasyonlar 

1. Data ve Log directory konfigürasyonu

path: 
data: /var/data/elk
logs: /var/log/elk

Elasticsearch index datasını disk üzerinde path.data parametresi ile belirlenen dizinde depolar. Aynı şekilde Elasticsearch loglarını ise path.logs değişkeni ile belirlenen dizininde depolar. Production ortamlarda bu parametrelerin default değerlerinde bırakılmaması önerilir. Aynı şekilde bu parametrelerin $ES_HOME dizini dışında bir dizine ayarlanması da önemlidir. 

Multiple data paths özelliği ile de elasticsearch’ün birden çok dizini birden data dizini olarak kullanması sağlamaktadır. Ancak bu özellik 7.13.0 versiyonu ile kullanımdan kaldırılmıştır. Çünkü birden çok dizin data dizini olarak belirlendiği zaman, toplamda watermark değerlerine erişilmemiş olsa dahi, bir dizinin dolması bile sorun yaşanması için yeterliydi.

2. Cluster Name Settings

cluster.name: prod-cluster1

Bir node’un katılacağı cluster’ın adı bu konfigürasyon ile belirlenir. Default cluster name Elasticsearch olarak belirlenir. Aynı cluster name’in farklı ortamlarda olsa bile tekrar kullanılmaması gerekir. 

3. Node Name Settings

node.name: prod-node1

Her bir Elasticsearch instance’ı için belirlenen tanımlayıcı isimdir. Default olarak Elasticsearch instance’ın çalıştığı sunucunun hostname’i olarak ayarlanır.

4. Network Host Settings

network.hots: 192.168.1.50

Elasticsearch default olarak sadece loopback adresleri bind eder. Bu durum test amaçlı tek bir node üzerinde birden çok instance çalıştırırken kullanışlıdır. Fakat production ortamlarda bu değer değiştirilmeli ve Elasticsearch’ün hizmet vereceği IP’ler bind edilmelidir. Bu parametre değiştirildiği zaman Elasticsearch bu durumu production ortama geçiş olarak değerlendirir. Ve cluster başlarken sistem kontrollerini buna göre yapar.

5. Discovery and Cluster Formation settings

Production geçişi öncesinde ayarlanması gereken diğer önemli parametreler discovery.seed_host ve cluster.initial_master_node parametreleridir. Bu parametreler cluster node’larının birbirini görmesini ve master node seçimini gerçekleştirebilmelerini sağlar.

discovery.seed_hosts : [ “192.168.1.50”, “192.168.1.69” ]

Herhangi bir network konfigürasyonu yapılmadığı zaman Elasticsearch aynı sunucuda 9300 ve 9305 arasındaki portları tarayarak, aynı sunucuda çalışan diğer node’ları bulup otomatik clustering yapabilir. 

Farklı fiziksel sunuculardan bir cluster oluşturmak için bu parametre set edilmelidir. Bu parametre clusterda yer alacak diğer sunucuların bir listesini tutar. 

cluster.initial_master_node Parametresi ile de clusterda yer alan düğümlerden master olabilecek olanlar belirlenir. Bu parametre cluster’ın ilk bootstrap işlemi sırasında kullanılır.

Discovery işlemi nedir?

Discovery işlemi bir node başlatıldığında ve nodelardan birisi master node’un fail ettiğini düşündüğü durumlarda başlayan süreçtir. Bu süreç seed host listesi ve cluster’ın son durumunda kaydedilen master eligible nodeların bilgisi ile başlar. İlk olarak her düğüm seed adresleri keşfeder ve bu adreslerle bağlantı kurarak hangilerinin bağlı olduğunu ve master-eligible olup olmadığını kontrol eder. Eğer node başarılı olur ise cluster’ın bilinen son master eligible node bilgilerini bağlandığı remote node ile paylaşır. Ve remote node da kendi master listesini yanıt olarak gönderir. Daha sonra ilgili node keşfettiği tüm node’lar ile bu işlemi tekrarlar. Eğer node master-eligible değil ise discovery process seçilmiş bir master node bulana kadar devam eder. Eğer master elected node bulunamaz ise, node bir süre sonra tekrar dener. Default olarak discovery.find_peers_interval parametresinin değeri, yani 1 saniye sonra tekrar dener.

Eğer node master-eligible ise discovery process, master elected node’u keşfedene kadar yada yeterli sayıda masterless master-eligibile node keşfedene kadar devam eder. Eğer bunlardan biri yeterince hızlı gerçekleşmez ise 1 saniye sonra tekrar denenir. Bir master seçildiğinde genelde durdurulmadığı sürece master olarak kalmaya devam eder. Master olarak işaretlenmiş bir node durdurulduğunda discovery process tekrar başlar.

Quorum Based Decision Making

Quorum bir grup içinde alınması gereken oy sayısı, çoğunluk anlamına gelir. Bir kararın geçerli olması için quorum oranı sağlanmalıdır. Distributed mimarilerde master node belirlenirken çoğu uygulama bu yaklaşımı kullanır. Karar verme ve birlikte çalışılabilirliğin sağlanmasında önemli rol oynar.

Elasticsearchde Master node seçimi ve cluster durumunun değiştirilmesi master-eligible node’ların birlikte gerçekleştirdiği 2 temel görevdir. Bu işlemler clusterın tutarlı çalışması için önemlidir. Quorum dikkatlice seçilir ki clusterda split brain durumu yaşanmasın. Split brain durumu cluster’ın birbirinden ayrı iki parçaya bölünmesi ve her bir parçanın diğerinden bağımsız kararlar alarak tutarlılığın bozulması durumunu ifade eder.

Elasticsearch split brain
Split Brain Situation

Clsutera node ekleme veya çıkarma yapıldığı durumlarda cluster’ın voting konfigürasyonu da güncellenir. Voting konfigürasyonunda yer alan node sayısının yarısından fazlasının cevap vermesi durumunda karar alınır. Genelde voting konfigürasyonu master-eligible node listesi ile aynı olabilir ancak bazı durumlarda bu konfigürasyon değişiklik gösterebilir. 

Cluster’ın sağlıklı çalışmaya devam edebilmesi için voting configurationda yer alan nodeların yarısı veya daha fazlası aynı anda durdurulmamalıdır. Clusterda 5 master eligible node var ise bunların 2 tanesinin stop olması durumu tolere edilebilir. Ancak 2’den fazla node’un kesilmesi durumunda clusterda sorun yaşanır. Bu ihtimali azaltmak için election her node’da random olarak planlanır.

Master Election 

Election processi startup ve master node’un fail ettiği durumlarda yeni master’ın seçilmesi için çalışır. Herhangi bir master-eligible node election’ı başlatabilir. Ve genelde ilk election başarılı olur. Election farklı iki node’un aynı anda election’a başladığı durumlarda fail eder.

Özet Olarak ;

Elasticsearch Discovery ve master election adımları, quorum based making decision yapısı ile etkileşim halindedir. Bu süreçler, distributed Elasticsearch cluster nodelarının birbirini bulmasını, iletişim kurmasını ve uygun bir master seçmesini sağlar. Aynı zamanda quorum mekanızması sayesinde master-eligible nodeların bir yada birkaçı fail olsa dahi cluster’ın hizmete devam etmesi sağlanır. 

1. Discovery (Keşif) Süreci:

   – Başlangıçta, her Elasticsearch node’u seed listte verilen nodelar ile başlar. Seed adresleri, diğer nodeları keşfetmek için kullanılan başlangıç noktalarıdır.

   – Her node, seed adreslerine erişmeye çalışır ve diğer nodeları bulmaya çalışır.

   – Discovery işlemi sırasında, her node, quorum based decision making yapısını kullanır. Yani, yeterli sayıda node ile bağlantı kurmadan veya onlardan yanıt almadan işlemlere devam etmez.

2. Master Seçimi Süreci:

   – Discovery süreci, master election için önemli bir adımdır. Her node, diğer nodeları keşfettikten sonra master seçimine geçer.

   – Master seçimi sürecinde, nodelar quorum based decision making yapısını kullanır. Her node, yeterli sayıda node ile iletişim kurar ve master election seçimine katılır.

   – Quorum based decision making yapısı, master election sırasında bir çoğunluk kararı alınmasını sağlar. Yani, yeterli sayıda node master election sürecine katılır ve belirli bir çoğunluğun onayını gerektirir.

   – Master seçimi, nodelar arasında gerçekleşir ve her node kendi oylamasını yapar. Oy sayısı quorum oranını karşılamalıdır.

Quorum based decision making yapısı, Elasticsearch clusterda güvenilir ve tutarlı bir master seçimini sağlar. Discovery süreciyle birlikte, nodelar arasında doğru bir iletişim ve koordinasyon kurulur ve clusterın sağlıklı bir şekilde çalışması sağlanır. Master electionı, yeterli sayıda düğümün onayıyla gerçekleşir, böylece clusterda veri bütünlüğü ve güvenilirlik sağlanır.

Not: Quorum oranı ve ayarlamaları Elasticsearch konfigürasyonlarında belirlenebilir ve kümenin ihtiyaçlarına göre değişebilir.

Voting Configurations

Master node seçiminde rol oynacak, oylamaya katılacak nodelar voting configuration’ı oluşturur. Voting konfigürasyonunda yer alan nodeların yarısından fazlasının erişilebilir olması master election işlemi için önemlidir.

Voting configuration aşağıdaki gibi kibanadan sorgulanabilir.

GET /_cluster/state?filter_path=metadata.cluster_coordination.last_committed_config

Master eligible node sayısının tek sayı olması gerekir. Ancak çift sayıda master-eligible node verilse dahi Elasticsearch tek sayıda oy sayısını sağlamak için bu node’lardan bir tanesini voting konfigürasyonu dışında tutar.

Elasticsearch clusterı ilk defa başlatıldığı sırada ilk master node’un seçiminde master-eligible nodelardan oylamaya katılacak olanların bir listesi elasticsearch’e verilmelidir.(Bootstrap configuration) . Bu master eligible nodeların listesi cluster.initial_master_nodes ayarı ile clustera verilir. Bu parametrede her master-eligible node için node-name yer almalıdır. Cluster ilk kez başarılı şekilde start edildikten sonra cluster.initial_master_node parametresi konfigürasyondan kaldırılmalıdır. 

Eğer bu parametre cluster oluşturulduktan sonra konfigürasyonda yer almaya devam eder ise, cluster’ın ilerde startup veya fail durumlarında yeniden başlatılırken yeni bir cluster gibi davranmasına ve recover edilememesine sebep olabilir. Ayrıca ilgili konfigürasyon tüm node’larda aynı değere ayarlanmalıdır.

Cluster initial master node listesinde verilen isimler node.name parametreleri ile eşleşmek zorundadır. Aksi taktirde cluster başlarken sorun yaşanır.

Publishing Cluster Status

Cluster statüsünde değişiklikleri sadece master node yapabilir. Master node cluster statüsü bildiren bir paketi tüm cluster’a yayımlar ve diğer node’lar güncellemeyi aldığına dair cevap olarak bir ack mesajı döner. Ancak status bu anda güncellenmez. Master node yeterli sayıda master eligible node’dan cevap aldıktan sonra node’lara cluster statusunun artık güncellenebileceği mesajını gönderir ve her nodeda cluster status güncellenir daha sonra master node’a güncelleme işleminin tamamlandığına dair bir mesaj gönderilir.

Fault Detection

Master node clusterda yer alan her node’un durumunu düzenli olarak kontrol ettiği gibi node’lar da master node’un durumunu kontrol eder ve erişilebilir olduğu bilgisini düzenli olarak alır. Zaman zaman bu kontrolün belirli aralıklarla başarısız olması durumunda herhangi bir aksiyon alınmaz, ancak ardı ardına başarısız olma durumunda Elasticsearch aksiyon alır. Deafult olarak 3 deneme yada 10 saniye gibi bir süre bu durum devam ederse node başarısız olduğunu varsayar. Bu faul detection parametreleri cluster.fault_detection.* parametreleri ile ayarlanabilir.

Troubleshooting An Unstable Cluster 

Bir node clusterdan beklenmedik şekilde ayrıldığı zaman bunun farklı sebepleri olabilir. Ve bu sebebi adreslemek cluster’ın geri kalanı için önemlidir.

Cluster durumu yellow veya red olabilir.
Shard allocation sırasında sorun yaşanmış olabilir.
Search,indexing ve monitoring işlemleri fail etmiş olabilir.
.security index unavailable durumda olabilir ve clustera erişimi bloklayabilir.
Master node cluster durumunu güncelleme işlemini gerçekleştiremiyor olabilir.

Cluster böyle bir durumda iken ilk tespit edilmesi gereken şey clusterın başarılı şekilde çalışan bir master node’a sahip olup olmadığıdır. Sonrasında ise clusterdan ayrılan node üzerinde incelemeler yapılır. Detaylı troubleshouting adımlarına ise ayrı bir yazıda değineceğim.

Elasticsearch konusunda diğer yazılarıma burdan erişebilir, video dersleri YouTube kanalımdan izleyebilirsiniz.

Veysel YUKSEL
Latest posts by Veysel YUKSEL (see all)

Veysel YUKSEL

RDBMS ve NoSQL veri tabanı yönetimi ve Big Data teknolojileri.

You may also like...

Bir cevap yazın

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