← Kursa Dön
📄 Text · 30 min

Elasticsearch Kurulumu — Linux, Docker, Cloud

Linux, Docker, Cloud — Adım Adım

Bir aracı kullanmadan önce onu eline alman, çalıştırman, sesini duyman lazım. Teoriyi bırak, pratik zamanı. Bu derste Elasticsearch'ü üç farklı yöntemle kuracağız: Docker (en hızlı), Linux (en öğretici) ve Cloud (en kolay production). Hangisini seçersen seç, ders sonunda çalışan bir Elasticsearch'ün olacak.

Benim tavsiyem: Docker ile başla. 5 dakikada hazır. Öğrenme aşamasında en az sürtünme ile başlamak önemli.


Yöntem 1: Docker ile Kurulum (Önerilen)

Ön Gereksinimler

  • Docker ve Docker Compose kurulu olmalı

  • Minimum 4GB RAM (Elasticsearch 2GB + Kibana 1GB + sistem)

Docker kurulu mu kontrol et:

docker --version
# Docker version 24.0.7, build afdd53b

docker compose version
# Docker Compose version v2.23.3

Tek Komutla Elasticsearch

En hızlı başlangıç:

# Elasticsearch'ü başlat (single-node, güvenlik kapalı)
docker run -d \
  --name elasticsearch \
  -p 9200:9200 \
  -e "discovery.type=single-node" \
  -e "xpack.security.enabled=false" \
  -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
  docker.elastic.co/elasticsearch/elasticsearch:8.17.0

30-60 saniye bekle, sonra test et:

curl http://localhost:9200

# Yanıt:
{
  "name" : "a1b2c3d4e5f6",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "abc123...",
  "version" : {
    "number" : "8.17.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "lucene_version" : "9.12.0",
    ...
  },
  "tagline" : "You Know, for Search"
}

"You Know, for Search" gördüysen tebrikler, Elasticsearch çalışıyor!

Docker Compose ile Elasticsearch + Kibana

Gerçekçi bir geliştirme ortamı için Elasticsearch ve Kibana'yı birlikte çalıştır:

# docker-compose.yml
version: "3.8"

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.17.0
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
      - es-data:/usr/share/elasticsearch/data
    networks:
      - elastic
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:9200/_cluster/health || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 10

  kibana:
    image: docker.elastic.co/kibana/kibana:8.17.0
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    ports:
      - "5601:5601"
    networks:
      - elastic
    depends_on:
      elasticsearch:
        condition: service_healthy

volumes:
  es-data:
    driver: local

networks:
  elastic:
    driver: bridge

Çalıştır:

# Başlat (arka planda)
docker compose up -d

# Logları izle
docker compose logs -f

# Durum kontrolü
docker compose ps

# Elasticsearch hazır mı?
curl http://localhost:9200/_cluster/health?pretty

# Kibana hazır mı? (1-2 dk sürebilir)
curl http://localhost:5601/api/status

Kibana hazır olduğunda tarayıcıda http://localhost:5601 adresine git. Dev Tools'u sol menüden bul — kurs boyunca en çok kullanacağın yer orası.

Docker Compose — Gelişmiş (3 Node Cluster)

Production'a yakın bir test ortamı istiyorsan:

# docker-compose-cluster.yml
version: "3.8"

services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.17.0
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ports:
      - "9200:9200"
    volumes:
      - es01-data:/usr/share/elasticsearch/data
    networks:
      - elastic

  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.17.0
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - es02-data:/usr/share/elasticsearch/data
    networks:
      - elastic

  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.17.0
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - es03-data:/usr/share/elasticsearch/data
    networks:
      - elastic

  kibana:
    image: docker.elastic.co/kibana/kibana:8.17.0
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://es01:9200
    ports:
      - "5601:5601"
    networks:
      - elastic
    depends_on:
      - es01
      - es02
      - es03

volumes:
  es01-data:
  es02-data:
  es03-data:

networks:
  elastic:
    driver: bridge
docker compose -f docker-compose-cluster.yml up -d

# Cluster durumunu kontrol et
curl http://localhost:9200/_cat/nodes?v

# Beklenen çıktı:
# ip          heap.percent ram.percent cpu load_1m node.name
# 172.18.0.2            35          78   2    0.15 es01
# 172.18.0.3            28          78   1    0.15 es02
# 172.18.0.4            31          78   1    0.15 es03

⚠️ Dikkat: 3 node cluster minimum 6GB RAM gerektirir. Geliştirme için single-node yeterli.

Docker — Sık Kullanılan Komutlar

# Elasticsearch loglarını gör
docker logs elasticsearch -f

# Container'a bağlan (debug için)
docker exec -it elasticsearch bash

# Elasticsearch'ü durdur
docker compose down

# Verileri de silerek durdur
docker compose down -v

# Tekrar başlat
docker compose up -d

# Sadece Elasticsearch'ü yeniden başlat
docker compose restart elasticsearch

Yöntem 2: Linux'a Doğrudan Kurulum

Docker kullanamıyorsan veya production ortamı kuruyorsan, doğrudan Linux'a kurulum yapabilirsin.

Ön Gereksinimler

  • Java: Elasticsearch 8.x kendi JDK'sını içerir — ayrıca Java kurmana gerek yok

  • RAM: Minimum 2GB, önerilen 4GB+

  • Disk: SSD önerilir (HDD ile çalışır ama yavaş olur)

  • OS: Ubuntu 20.04+, CentOS 7+, Debian 10+

Ubuntu/Debian Kurulumu

# 1. Elastic GPG key'ini ekle
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg

# 2. APT repository ekle
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

# 3. Paket listesini güncelle ve kur
sudo apt update
sudo apt install elasticsearch

# 4. İlk kurulumda güvenlik bilgileri görüntülenir — KAYDET!
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ✅ Elasticsearch security features are enabled
# ℹ️  Password for the elastic user: <PAROLA_BURADA>
# ℹ️  HTTP CA certificate SHA-256 fingerprint: <FINGERPRINT>
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

# 5. Servisi başlat
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

# 6. Test et (güvenlik açıksa)
curl -k -u elastic:<PAROLA> https://localhost:9200

# Güvenliği kapatmak istiyorsan (sadece geliştirme):
# sudo nano /etc/elasticsearch/elasticsearch.yml
# xpack.security.enabled: false
# sudo systemctl restart elasticsearch
# curl http://localhost:9200

CentOS/RHEL Kurulumu

# 1. RPM repository ekle
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-8.x]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

# 2. Kur
sudo yum install elasticsearch

# 3. Başlat
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

Kibana Kurulumu (Linux)

# Ubuntu/Debian
sudo apt install kibana

# CentOS/RHEL
sudo yum install kibana

# Ayarla
sudo nano /etc/kibana/kibana.yml
# server.port: 5601
# server.host: "0.0.0.0"
# elasticsearch.hosts: ["http://localhost:9200"]

# Başlat
sudo systemctl enable kibana
sudo systemctl start kibana

Önemli Dosya Konumları (Linux)

/etc/elasticsearch/          → Konfigürasyon dosyaları
  ├── elasticsearch.yml      → Ana ayar dosyası
  ├── jvm.options            → JVM (heap size) ayarları
  └── log4j2.properties      → Log ayarları

/var/lib/elasticsearch/      → Veri dizini (index'ler burada)
/var/log/elasticsearch/      → Log dosyaları
/usr/share/elasticsearch/    → Binary ve plugin'ler

Temel Konfigürasyon (elasticsearch.yml)

# /etc/elasticsearch/elasticsearch.yml

# Cluster adı — aynı ağdaki aynı isimli node'lar otomatik cluster olur
cluster.name: my-cluster

# Node adı
node.name: node-1

# Veri dizini
path.data: /var/lib/elasticsearch

# Log dizini
path.logs: /var/log/elasticsearch

# Ağ ayarları
network.host: 0.0.0.0     # Tüm interface'lerden erişim (prod'da dikkatli ol!)
http.port: 9200            # REST API portu

# Cluster discovery
discovery.seed_hosts: ["host1", "host2"]
cluster.initial_master_nodes: ["node-1"]

# Tek node kurulum için:
discovery.type: single-node

JVM Heap Ayarı

# /etc/elasticsearch/jvm.options.d/heap.options
# (veya doğrudan jvm.options dosyasında)

# Heap boyutu — toplam RAM'in yarısı, max 32GB
-Xms4g
-Xmx4g

⚠️ Kritik Kural: -Xms ve -Xmx aynı olmalı! Farklı değerler performans sorunlarına yol açar.

💡 İpucu: Heap size toplam RAM'in yarısını geçmemeli. Kalan yarı, Lucene'in dosya sistemi cache'i için lazım. 64GB RAM varsa → 32GB heap, 32GB OS cache. Heap 32GB'ı geçerse JVM compressed oops devre dışı kalır ve performans düşer.

Linux Sistem Ayarları

Elasticsearch'ün düzgün çalışması için bazı sistem ayarları gerekir:

# 1. Virtual memory (mmap)
sudo sysctl -w vm.max_map_count=262144
# Kalıcı yapmak için:
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

# 2. File descriptors
# /etc/security/limits.conf
elasticsearch  -  nofile  65535

# 3. Processes
# /etc/security/limits.conf  
elasticsearch  -  nproc   4096

# 4. Swap'ı kapat (önerilen)
sudo swapoff -a
# veya elasticsearch.yml'de:
# bootstrap.memory_lock: true

Bu ayarları Docker kullanıyorsan host makinede yapman gerekir (container içinde değil):

# Docker host'ta vm.max_map_count ayarı
sudo sysctl -w vm.max_map_count=262144

Yöntem 3: Elastic Cloud (Yönetilen Servis)

En hızlı production yolu. Sunucu yönetimi yok, güncelleme yok, yedekleme otomatik.

Adım Adım Cloud Kurulum

1. https://cloud.elastic.co adresine git
2. Ücretsiz hesap oluştur (kredi kartı gerekebilir, deneme ücretsiz)
3. "Create deployment" tıkla
4. Deployment ismi ver: "my-first-cluster"
5. Cloud provider seç: AWS / Azure / GCP
6. Region seç: Sana yakın bir bölge (eu-west-1 gibi)
7. Hardware profile: "Storage Optimized" (genel amaç)
8. "Create deployment" tıkla
9. elastic kullanıcı parolasını KAYDET
10. 3-5 dakika bekle — hazır!

Cloud deployment'ından bir endpoint alırsın:

# Cloud endpoint'ine erişim
curl -u elastic:<PAROLA> https://my-deployment-abc123.es.europe-west1.gcp.cloud.es.io:9243

# Veya Kibana'ya tarayıcıdan:
# https://my-deployment-abc123.kb.europe-west1.gcp.cloud.es.io:9243

Cloud Avantajları

  • 5 dakikada hazır — sunucu kurma derdi yok

  • Otomatik yedekleme — snapshot'lar otomatik alınır

  • Otomatik güncelleme — tek tıkla versiyon yükselt

  • Monitoring — Stack Monitoring built-in

  • Güvenlik — TLS, kimlik doğrulama varsayılan açık

  • Ölçekleme — slider ile kaynak artır/azalt

Cloud Dezavantajları

  • Maliyet — self-hosted'dan pahalı

  • Vendor lock-in — Elastic Cloud'a bağımlılık

  • Sınırlı kontrol — JVM ayarları, plugin'ler sınırlı

  • Ağ gecikmesi — local development için ideal değil


Kurulum Doğrulama

Hangi yöntemle kurmuş olursan ol, şu kontrolleri yap:

1. Elasticsearch Çalışıyor mu?

# Temel bilgi
curl http://localhost:9200
# "tagline": "You Know, for Search" görmelisin

# Cluster sağlığı
curl http://localhost:9200/_cluster/health?pretty
# "status": "green" veya "yellow" (tek node'da yellow normaldir)

# Node bilgileri
curl http://localhost:9200/_cat/nodes?v
# Node listesini gösterir

2. Kibana Çalışıyor mu?

# Kibana durumu
curl http://localhost:5601/api/status
# "overall": {"level": "available"} görmelisin

Tarayıcıda http://localhost:5601 aç → Dev Tools'a git → Şunu yaz:

GET /

Ctrl+Enter (veya yeşil oynat butonu) ile çalıştır. Elasticsearch bilgilerini görmelisin.

3. İlk Veri Testi

Dev Tools'ta veya cURL ile:

// 1. Bir döküman ekle
POST /test-index/_doc
{
  "message": "Merhaba Elasticsearch!",
  "timestamp": "2025-01-15T10:00:00Z",
  "user": "öğrenci"
}

// 2. Ara
GET /test-index/_search
{
  "query": {
    "match": {
      "message": "merhaba"
    }
  }
}

// 3. Temizle
DELETE /test-index
# cURL versiyonu:
# 1. Döküman ekle
curl -X POST "localhost:9200/test-index/_doc" -H 'Content-Type: application/json' -d'
{
  "message": "Merhaba Elasticsearch!",
  "timestamp": "2025-01-15T10:00:00Z",
  "user": "öğrenci"
}'

# 2. Ara
curl -X GET "localhost:9200/test-index/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match": {
      "message": "merhaba"
    }
  }
}'

# 3. Temizle
curl -X DELETE "localhost:9200/test-index"

Güvenlik Ayarları

Elasticsearch 8.x'te güvenlik varsayılan olarak açık gelir. Öğrenme aşamasında kapatabilirsin, ama production'da kesinlikle açık olmalı.

Güvenliği Kapatma (Sadece Development)

# elasticsearch.yml
xpack.security.enabled: false

Güvenliği Açık Tutarak Çalışma

# Parola sıfırlama
docker exec -it elasticsearch bin/elasticsearch-reset-password -u elastic -i

# Token oluştur (Kibana enrollment için)
docker exec -it elasticsearch bin/elasticsearch-create-enrollment-token -s kibana

# HTTPS ile erişim
curl -k -u elastic:changeme https://localhost:9200

Docker'da Güvenlikli Kurulum

# docker-compose-secure.yml
version: "3.8"
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.17.0
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - ELASTIC_PASSWORD=MySecurePassword123
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=false  # HTTP SSL kapalı (dev için)
    ports:
      - "9200:9200"
    volumes:
      - es-data:/usr/share/elasticsearch/data
    networks:
      - elastic

  kibana:
    image: docker.elastic.co/kibana/kibana:8.17.0
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=kibana_system
      - ELASTICSEARCH_PASSWORD=MySecurePassword123
    ports:
      - "5601:5601"
    networks:
      - elastic
    depends_on:
      - elasticsearch

volumes:
  es-data:

networks:
  elastic:
# kibana_system kullanıcısının parolasını ayarla
curl -u elastic:MySecurePassword123 -X POST "localhost:9200/_security/user/kibana_system/_password" -H 'Content-Type: application/json' -d'
{
  "password": "MySecurePassword123"
}'

Sık Karşılaşılan Kurulum Sorunları

Sorun 1: "max virtual memory areas vm.max_map_count [65530] is too low"

# Çözüm (Linux/macOS):
sudo sysctl -w vm.max_map_count=262144

# Kalıcı çözüm:
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# Docker Desktop (Windows/Mac):
# Docker Desktop → Settings → Resources → Advanced
# veya WSL2'de: wsl -d docker-desktop sysctl -w vm.max_map_count=262144

Sorun 2: "Java heap space" / OutOfMemoryError

# Heap size'ı artır
# Docker'da:
docker run ... -e "ES_JAVA_OPTS=-Xms2g -Xmx2g" ...

# Linux'ta:
# /etc/elasticsearch/jvm.options.d/heap.options
-Xms2g
-Xmx2g

Sorun 3: Elasticsearch başlamıyor — "disk watermark exceeded"

Disk %85'ten fazla doluysa Elasticsearch yeni shard allocate etmez, %90'da readonly moda geçer.

# Disk durumunu kontrol et
df -h

# Watermark'ları değiştir (geçici çözüm)
curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster.routing.allocation.disk.watermark.low": "90%",
    "cluster.routing.allocation.disk.watermark.high": "95%",
    "cluster.routing.allocation.disk.watermark.flood_stage": "97%"
  }
}'

# Gerçek çözüm: Disk alanı temizle!

Sorun 4: Kibana "Kibana server is not ready yet"

# Elasticsearch'ün tamamen başlamasını bekle
curl http://localhost:9200/_cluster/health?wait_for_status=yellow&timeout=60s

# Kibana'yı yeniden başlat
docker restart kibana

# Kibana loglarını kontrol et
docker logs kibana -f

Sorun 5: Docker'da "Exited (137)" — Container kill ediliyor

Bu genellikle yetersiz RAM demektir. Container, OOM Killer tarafından öldürülüyor.

# Docker Desktop'ta RAM limitini artır
# Docker Desktop → Settings → Resources → Memory → 4GB+

# Veya Elasticsearch heap'i düşür
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"

Sorun 6: Port çakışması

# 9200 portu zaten kullanılıyorsa
# Linux:
sudo lsof -i :9200
# macOS:
lsof -i :9200

# Farklı port kullan
docker run ... -p 9201:9200 ...
# Artık localhost:9201 üzerinden erişeceksin

Geliştirme Ortamı Tavsiyeleri

Benim Önerim: Bu Kurs İçin

# docker-compose.yml — Kurs boyunca kullanacağın setup
version: "3.8"

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.17.0
    container_name: es
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ports:
      - "9200:9200"
    volumes:
      - es-data:/usr/share/elasticsearch/data

  kibana:
    image: docker.elastic.co/kibana/kibana:8.17.0
    container_name: kb
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch

volumes:
  es-data:

Bu setup:

  • Güvenlik kapalı (geliştirme için)

  • Tek node (yeterli)

  • 1GB heap (normal iş yükleri için yeterli)

  • Volume ile veri kalıcı (container silinse bile veri korunur)

Günlük İş Akışı

# Sabah: Ortamı başlat
docker compose up -d

# Çalış...
# Kibana Dev Tools: http://localhost:5601/app/dev_tools

# Akşam: Ortamı durdur (veri korunur)
docker compose down

# Sıfırdan başlamak istersen (veriyi sil):
docker compose down -v

Elasticsearch'e Programatik Erişim

Java Client Bağlantısı

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;

class Main {
    public static void main(String[] args) throws Exception {
        // Bağlantı kur
        RestClient restClient = RestClient.builder(
            new HttpHost("localhost", 9200, "http")
        ).build();

        ElasticsearchClient client = new ElasticsearchClient(
            new RestClientTransport(restClient, new JacksonJsonpMapper())
        );

        // Bağlantıyı test et
        boolean ping = client.ping().value();
        System.out.println("Elasticsearch bağlantısı: " + (ping ? "✅ Başarılı" : "❌ Başarısız"));

        // Cluster bilgisi
        var info = client.info();
        System.out.println("Cluster: " + info.clusterName());
        System.out.println("Version: " + info.version().number());

        restClient.close();
    }
}

Maven Bağımlılıkları

<!-- pom.xml -->
<dependencies>
    <dependency>
        <groupId>co.elastic.clients</groupId>
        <artifactId>elasticsearch-java</artifactId>
        <version>8.17.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.17.0</version>
    </dependency>
</dependencies>

Python ile Hızlı Test

# pip install elasticsearch
from elasticsearch import Elasticsearch

es = Elasticsearch("http://localhost:9200")

# Bağlantı testi
print(es.info())

# Döküman ekle
es.index(index="test", document={"message": "Merhaba!", "lang": "tr"})

# Ara
result = es.search(index="test", query={"match": {"message": "merhaba"}})
print(result["hits"]["hits"])

Best Practices

Docker ile başla — En az sürtünme, en hızlı başlangıç

Versiyon sabitleelasticsearch:latest yerine elasticsearch:8.17.0 kullan

Volume kullan — Verinin container silindiğinde kaybolmaması için Docker volume

Heap size ayarla — Varsayılan 1GB genelde yeterli, ama bilinçli ol

vm.max_map_count ayarla — Linux/Docker'da bu ayarı unutma

Güvenliği production'da aç — Development'ta kapatabilirsin ama production'da kesinlikle açık olmalı


Yaygın Hatalar

❌ "Docker volume kullanmadım, container'ı sildim, verim gitti"

Volume (-v es-data:/usr/share/elasticsearch/data) her zaman kullan. Docker volume olmadan container silinince veri de gider.

❌ "Heap size'ı çok yüksek ayarladım"

Toplam RAM'in yarısından fazla heap verme. Kalan yarı, Lucene file system cache için gerekli. 8GB RAM → max 4GB heap.

❌ "Production'da single-node kullanıyorum"

Tek node'da replica oluşturulamaz. Node çökerse veri kaybı riski var. Production'da minimum 3 node.

❌ "Swap açık bıraktım"

Elasticsearch ve swap iyi anlaşmaz. JVM garbage collection sırasında swap kullanılırsa performans felaket olur. swapoff -a veya bootstrap.memory_lock: true kullan.

❌ "latest tag kullanıyorum"

latest tag'i her pull'da farklı versiyon getirebilir. Versiyon uyumsuzluğu, konfigürasyon farkları derken kabus başlar. Her zaman spesifik versiyon belirt.


Özet

  • Docker ile kurulum en hızlı ve en az sorunlu yöntemdir — docker compose up -d ile 2 dakikada hazır

  • Linux kurulumu daha fazla kontrol sağlar ama sistem ayarları (vm.max_map_count, heap, swap) gerektirir

  • Elastic Cloud production için en kolay yoldur — sunucu yönetimi gerektirmez

  • Elasticsearch 8.x'te güvenlik varsayılan açık — development'ta kapatabilirsin

  • JVM heap toplam RAM'in yarısını geçmemeli, -Xms ve -Xmx aynı olmalı

  • Kurulumu doğrulamak için curl localhost:9200 ve _cluster/health endpoint'lerini kullan

Bir sonraki derste Elasticsearch ile ilk adımlarımızı atacağız — REST API'yi, cURL kullanımını ve Kibana Dev Tools'u öğreneceğiz!