Elasticsearch Kümesi Kurulumu ve Shard Optimizasyonu: Üretim Ortamları İçin Kapsamlı Rehber

 · 

Elasticsearch Kümesi Kurulumu ve Shard Optimizasyonu: Üretim Ortamları İçin Kapsamlı Rehber

Elasticsearch Kümesi Kurulumu ve Shard Optimizasyonu: Üretim Ortamları İçin Derinlemesine Bir Bakış

Dağıtık arama ve analitik motoru Elasticsearch, büyük veri setlerini işlemek ve hızlı sorgu yanıtları sunmak için güçlü bir altyapı sağlar. Bir Elasticsearch kümesinin performansı ve kararlılığı, doğru kurulum ve özellikle shard yönetimi stratejilerine bağlıdır.

Temel Küme Mimarisi ve Kurulum Adımları

Elasticsearch kümesi, çeşitli rollerde çalışan düğümlerden (node) oluşur. Tipik bir üretim ortamında, master, data ve ingest düğümleri bulunur. Master düğümler küme durumunu yönetir, data düğümleri veriyi depolar ve arama sorgularını işler, ingest düğümleri ise verinin indekslenmeden önce dönüştürülmesini sağlar. Koordinasyon görevleri için ayrı bir coordinating node veya tüm düğümlerin coordinating rolünü üstlenmesi söz konusu olabilir. Güvenilir bir kurulum için, en az üç master-eligible düğümün quorum sağlaması esastır.

# elasticsearch.yml dosyasından bir kesitcluster.name: my-production-clusternode.name: ${HOSTNAME}path.data: /var/lib/elasticsearchpath.logs: /var/log/elasticsearchnetwork.host: 0.0.0.0http.port: 9200transport.port: 9300discovery.seed_hosts: ["host1", "host2", "host3"] # Master-eligible düğümlerin listesicluster.initial_master_nodes: ["host1", "host2", "host3"] # İlk küme başlatıldığında master düğümlerinode.roles: [ data, master ] # Bu düğüm hem data hem de master-eligible rolüne sahip.xpack.security.enabled: truexpack.security.transport.ssl.enabled: true

Yukarıdaki konfigürasyon, bir küme adı tanımlar, düğüm adını dinamik olarak ayarlar ve veri ile log yollarını belirtir. network.host: 0.0.0.0 tüm arayüzlerden erişime izin verir; ancak üretimde belirli IP'lerle kısıtlamak güvenlik için daha iyidir. discovery.seed_hosts parametresi, düğümlerin birbirini bulması için kullanılan diğer düğümlerin listesidir. cluster.initial_master_nodes ise küme ilk kez başlatılırken master seçiminde kullanılacak düğümleri belirtir. node.roles ile düğümün işlevleri belirlenir. Yüksek trafikli ortamlar için, master ve data rollerinin ayrılması (dedicated master nodes) küme kararlılığını artırır.

Shard Yönetimi ve Dağıtım Stratejileri

Elasticsearch, veriyi indekslere böler ve her indeksi fiziksel olarak birden fazla sharda ayırır. Her shard, Lucene indeksidir. Shardlar, kümedeki data düğümlerine dağıtılarak veri paralelliği ve yatay ölçeklenebilirlik sağlar. Her bir primary shard'ın bir veya daha fazla replica shard'ı bulunabilir. Replica shard'lar hem veri yedekliliği sağlar hem de okuma (search) performansını artırır. Başarılı bir shard stratejisi, küme kaynaklarının verimli kullanımını, sorgu performansını ve veri dayanıklılığını optimize eder.

Shard sayısının belirlenmesi kritik bir karardır. Aşırı shard sayısı, düğümler üzerinde daha fazla dosya tanıtıcısı (file handle) ve hafıza yükü oluşturur, bu da koordinasyon overhead'ini artırır. Çok az shard ise, bir indeksteki verinin belirli düğümlere sıkışmasına ve kaynak kullanımında dengesizliğe yol açabilir. Geniş bir indeksi küçük shardlara bölmek yerine, daha büyük, ancak yönetilebilir sayıda shard kullanmak genellikle daha etkilidir. Örneğin, 100GB'lık bir indeks için 20-50GB boyutlarında shard'lar ideal olabilir.

Üretim Ortamında Shard Optimizasyonu ve Yeniden Dengeleme

Üretim senaryolarında, indeks büyüklükleri ve sorgu yükleri zamanla değişebilir. Bu durum, mevcut shard dağılımının optimal olmaktan çıkmasına neden olabilir. Örneğin, yeni bir kampanya ile log hacminde ani bir artış, belirli bir indeksin shardlarını aşırı yükleyebilir. Bu gibi durumlarda, manuel veya otomatik yeniden dengeleme (rebalancing) gerekebilir. İndeks oluştururken doğru shard sayısını ayarlamak, başlangıçta önemli bir adımdır.

PUT /my_new_index{  "settings": {    "index": {      "number_of_shards": 5,          "number_of_replicas": 1,         "refresh_interval": "30s"     }  }}

Bu örnek, "my_new_index" adında bir indeks oluşturur. Beş primary shard ve her primary shard için bir replica shard ayarlar. refresh_interval ise verinin arama için ne sıklıkta görünür olacağını belirler. Üretim ortamlarında, mevcut shard dağılımını izlemek için _cat/shards ve _cluster/allocation/explain API'leri kritik öneme sahiptir.

# Tüm shardların durumunu gösterirGET _cat/shards?v# Belirli bir shard'ın neden belirli bir düğüme atandığını veya atanmadığını açıklarGET _cluster/allocation/explain?pretty

Bu API'ler, shard'ların hangi düğümlerde bulunduğunu, durumlarını (INITIALIZING, STARTED, RELOCATING, UNASSIGNED) ve potansiyel atama sorunlarını anlamak için paha biçilmez bilgiler sunar. Özellikle _cluster/allocation/explain, kümenin rebalancing kararlarını anlamada derinlemesine içgörüler sağlar.

Shard Rebalancing ve Veri Yaşam Döngüsü Yönetimi (ILM)

Elasticsearch kümesi, düğümler eklendiğinde veya çıkarıldığında otomatik olarak shardları yeniden dağıtmaya çalışır. Ancak bu otomatik rebalancing her zaman en optimal çözümü sunmayabilir, özellikle indekslerin farklı performans ihtiyaçları olduğunda. Veri Yaşam Döngüsü Yönetimi (ILM - Index Lifecycle Management), verinin yaşına bağlı olarak otomatik olarak indeksleri yönetmek için güçlü bir araçtır. ILM, indeksleri sıcak (hot), ılık (warm), soğuk (cold) ve arşiv (frozen/delete) katmanlarına taşıyarak depolama maliyetlerini ve performansını optimize eder.

PUT /_ilm/policy/my_data_policy{  "policy": {    "phases": {      "hot": {        "actions": {          "rollover": {            "max_age": "7d",            "max_docs": 100000000,            "max_size": "50gb"          },          "set_priority": { "priority": 100 }        }      },      "warm": {        "min_age": "30d",        "actions": {          "forcemerge": {            "max_num_segments": 1          },          "shrink": {            "number_of_shards": 1          },          "set_priority": { "priority": 50 }        }      },      "cold": {        "min_age": "90d",        "actions": {          "freeze": {},          "set_priority": { "priority": 0 }        }      },      "delete": {        "min_age": "180d",        "actions": {          "delete": {}        }      }    }  }}

Bu ILM politikası, indeksleri 7 gün veya 100 milyon belge veya 50GB boyuta ulaştığında yeni bir indekse (rollover) taşıyarak hot faza başlar. 30 gün sonra warm faza geçerek shard sayısını azaltır (shrink) ve segmentleri birleştirir (forcemerge), bu da okuma performansını artırırken disk alanını optimize eder. 90 gün sonra cold faza geçerek indeksi dondurur (freeze), bu da bellek kullanımını düşürür. 180 gün sonra ise indeksi tamamen siler. Bu otomasyon, manuel müdahaleyi azaltır ve veri depolama maliyetlerini düşürür.

Gerçek Dünya Senaryosu: Yüksek Trafikli Bir E-ticaret Platformunda Elasticsearch Optimizasyonu

Bir e-ticaret platformunun, milyonlarca ürün kaydını ve günlük milyarlarca kullanıcı etkileşim logunu Elasticsearch üzerinde depoladığını varsayalım. Bu platformda, ürün arama sorguları düşük gecikme süresiyle yanıtlanmalı, aynı zamanda log verileri yüksek hacimle indekslenmelidir. Başlangıçta, tüm veriler tek tip bir küme üzerinde tutulmuş ve indeksleme ile arama performansı sorunları yaşanmıştır.

Bu senaryoda, ürün katalog verileri için optimize edilmiş, az sayıda ama yüksek performanslı primary sharda sahip, bol replika içeren indeksler tasarlanmıştır. Bu, sık yapılan okuma sorgularının yükünü dağıtır ve gecikmeyi düşürür. Log verileri için ise, günlük indeksler oluşturulmuş, yüksek number_of_shards ve daha az number_of_replicas ile indeksleme throughput'u artırılmıştır. Özellikle ILM kullanılarak, yeni (hot) log verileri SSD tabanlı düğümlerde tutulurken, eski (warm/cold) loglar HDD tabanlı veya daha ucuz depolama katmanlarına sahip düğümlere taşınmıştır. Bu yaklaşım, sıcak veriler için maksimum performans, soğuk veriler için minimum maliyet sağlamıştır. Ayrıca, belirli saatlerdeki yoğun trafik için, cluster.routing.allocation.enable ayarı ile rebalancing geçici olarak duraklatılarak, arama performansının ani düşüşleri engellenmiştir.

Sonuç

Elasticsearch küme kurulumu ve shard yönetimi, yalnızca temel konfigürasyon adımlarından ibaret değildir. Üretim ortamlarının dinamik ihtiyaçlarına göre sürekli gözlem, optimizasyon ve uyarlama gerektiren karmaşık bir süreçtir. Doğru shard stratejisi, ILM kullanımı ve sürekli izleme, Elasticsearch kümenizin hem performanslı hem de maliyet etkin bir şekilde çalışmasını sağlar. Bu detaylı yaklaşımlar, büyük veri ortamlarında kritik öneme sahiptir.

← Blog Listesine Dön