Elasticsearch dayanıklılık: replica + snapshot + CCR
Belirti
Amaç: Elasticsearch için replica shard'lar, ayrılmış master/data düğümleri, snapshot yedekleri (SLM) ve cross-cluster replication (CCR) ile dayanıklılık kur.
1. Rolleri ayır: ayrılmış master ve data düğümleri
Küme kararlılığı için oy veren master-eligible düğümler (tercihen 3, tek çoğunluk) data yükünden ayrılır. elasticsearch.yml'de node.roles ile roller atanır ve discovery için seed host'lar tanımlanır. 3 master split-brain'i önler.
Elasticsearch
# master düğümlerde elasticsearch.yml:
# node.roles: [ master ]
# data düğümlerde:
# node.roles: [ data, ingest ]
# discovery.seed_hosts: [ m1, m2, m3 ]
# cluster.initial_master_nodes: [ m1, m2, m3 ]2. Index replica sayısını ayarla
number_of_replicas her primary shard için tutulacak kopya sayısıdır; en az 1 olmalı ki bir data düğümü kaybında veri erişilebilir kalsın. Çalışan index'te dinamik olarak değiştirilebilir; replica sayısı data düğüm sayısından az olmalıdır.
Elasticsearch
PUT /siparisler/_settings
{
"index": { "number_of_replicas": 1 }
}
# şablonla varsayılan (composable template; eski _template API'si legacy'dir):
# PUT _index_template/siparis-tpl { "index_patterns": ["siparis*"], "template": { "settings": { "number_of_replicas": 1 } } }3. Snapshot repository tanımla
Yedekler bir repository'ye alınır: paylaşımlı dosya sistemi (fs) veya S3/GCS/Azure eklentileri. Küme silinse bile veriyi geri getirebilmek için repository küme dışında kalıcı depolamada olmalıdır.
Elasticsearch
PUT /_snapshot/yedek_deposu
{
"type": "fs",
"settings": { "location": "/mnt/es_backups", "compress": true }
}4. SLM ile otomatik snapshot zamanla
Snapshot Lifecycle Management (SLM) düzenli snapshot alır ve saklama (retention) politikası uygular. Bir cron ifadesiyle sıklık, hangi index'lerin alınacağı ve kaç snapshot tutulacağı tanımlanır.
Elasticsearch
PUT /_slm/policy/gunluk_yedek
{
"schedule": "0 30 1 * * ?",
"name": "<gunluk-{now/d}>",
"repository": "yedek_deposu",
"config": { "indices": ["*"] },
"retention": { "expire_after": "30d", "min_count": 5, "max_count": 50 }
}5. Snapshot'ı ve geri yüklemeyi doğrula
SLM politikası elle tetiklenerek çalıştığı doğrulanır; snapshot durumu SUCCESS olmalı. Düzenli olarak bir geri yükleme testi yapılmalıdır çünkü test edilmemiş yedek yedek sayılmaz.
Elasticsearch
POST /_slm/policy/gunluk_yedek/_execute
GET /_snapshot/yedek_deposu/_all
# geri yükleme:
POST /_snapshot/yedek_deposu/<snapshot_adi>/_restore6. Cross-Cluster Replication (CCR) ile uzak DR kur
Bölgeler arası felaket kurtarma için ikinci bir küme (follower) uzak primary cluster'daki (leader) index'leri takip eder. Önce remote cluster tanımlanır, sonra follower index leader'a bağlanır; leader'daki değişiklikler otomatik akar. CCR bir platin (ticari) özelliktir.
Elasticsearch
# follower kümede uzak kümeyi tanımla:
PUT /_cluster/settings
{ "persistent": { "cluster": { "remote": { "birincil": { "seeds": ["leader1:9300"] } } } } }
# follower indeksi oluştur:
PUT /siparisler-follower/_ccr/follow
{ "remote_cluster": "birincil", "leader_index": "siparisler" }