← Back to list

Building a Production-Ready Elasticsearch Cluster (Installation & Configuration)

Elasticsearch kurulumunda en büyük hata, cluster yapısını sadece “çalışıyor mu?” seviyesinde ele almaktır.

Murat Culum · 2026-04-21 12:30 · 1 claps · 8.5 min read
#nosql #elasticsearch #database-engineer #installation #configuration
Open on Medium ↗

Building a Production-Ready Elasticsearch Cluster (Installation & Configuration)

Elasticsearch kurulumunda en büyük hata, cluster yapısını sadece “çalışıyor mu?” seviyesinde ele almaktır.

Oysa production ortamında asıl kritik konu, bir node’un ayağa kalkması değil; cluster’ın güvenli, kararlı, ölçeklenebilir ve doğru tasarlanmış şekilde çalışmasıdır.

Bu dokümanda, sıfırdan secure ve production-ready bir Elasticsearch cluster nasıl kurulur, adım adım anlatıyorum.

Bu içerik basit bir kurulum rehberi değildir. Odak noktası doğrudan production yaklaşımıdır:

  • multi-node cluster mimarisi
  • secure by default yaklaşımı
  • TLS (HTTP + Transport)
  • authentication ve authorization
  • certificate-based trust
  • doğru node discovery ve cluster formation
  • sistem seviyesi hazırlıklar
  • doğrulama ve troubleshooting

En kritik nokta şudur:

Cluster doğru kurulmazsa, üstüne inşa edilen her şey yanlış olur.

Why Secure by Default?

Elasticsearch kurulumu teknik olarak birkaç komutla ayağa kaldırılabilir. Ama production ortamında “ayağa kalkması” yeterli değildir.

Aşağıdaki yapı production için kabul edilemez:

  • authentication olmadan erişim
  • TLS olmadan veri transferi
  • node’lar arası şifresiz iletişim
  • certificate doğrulaması olmadan cluster communication

Bu yüzden bu çalışma, secure cluster-first yaklaşımıyla tasarlanmıştır.

Yani security sonradan eklenen bir katman değil, cluster tasarımının doğrudan parçasıdır.

Production’da doğru yaklaşım şudur:

  • önce secure cluster kurulur
  • sonra index, ingestion, search ve analytics katmanları bunun üzerine inşa edilir

Architecture Overview

Bu çalışmada kullanılan yapı şu şekildedir:

  • 3 node Elasticsearch cluster
  • node’lar: es01, es02, es03
  • Docker-based deployment
  • certificate generation için ayrı bir setup container
  • HTTP layer’da TLS
  • transport layer’da TLS
  • authenticated access
  • node başına ayrı data volume

Bu yapı sayesinde aşağıdaki production beklentileri karşılanır:

  • distributed çalışma modeli
  • horizontal scalability
  • high availability
  • node-to-node secure communication
  • certificate-based trust model

Why 3 Nodes?

Production ortamında minimum önerilen Elasticsearch cluster yapısı 3 node’dur.

Bunun nedeni yalnızca “çok node olsun” yaklaşımı değildir. Asıl sebep, cluster davranışının güvenli ve dayanıklı hale gelmesidir.

3 node sayesinde:

  • primary shard’lar dağıtılabilir
  • replica shard’lar farklı node’lara yerleştirilebilir
  • query load node’lar arasında paylaşılabilir
  • tek node kaybında cluster tamamen servis dışı kalmaz
  • cluster formation ve master election daha sağlıklı yürür

Kısacası:

Single node Elasticsearch = risk Multi-node cluster = production gerekliliği

Özellikle secure ve gerçekçi bir demo ya da production benzeri test ortamı kurulacaksa, tek node yaklaşımı eksik kalır.

Environment Variables

Cluster konfigürasyonu için .env dosyası kullanıyoruz.

Bu yaklaşım şu nedenlerle önemlidir:

  • compose dosyasını sade tutar
  • versiyon ve cluster adı gibi değerleri dışarı alır
  • şifre gibi bilgilerin merkezi yönetimini kolaylaştırır
  • aynı yapının farklı ortamlarda tekrar kullanılmasını kolaylaştırır

.env dosyası:

cat > .env <<EOF
STACK_VERSION=8.12.0
CLUSTER_NAME=prod-secure-cluster
ELASTIC_PASSWORD=StrongPass123!
EOF

Buradaki değişkenlerin amacı:

  • STACK_VERSION: Elasticsearch image versiyonu
  • CLUSTER_NAME: cluster adı
  • ELASTIC_PASSWORD: built-in elastic kullanıcısının şifresi

System Preparation

Elasticsearch kurulmadan önce sistem tarafında iki kritik hazırlık yapılmalıdır:

  • vm.max_map_count
  • swap disable

Bu adımlar atlanırsa container çalışıyor görünse bile Elasticsearch node’ları sağlıklı başlamayabilir.

Kernel Parameter: vm.max_map_count

Elasticsearch, Lucene tabanlı yapısı nedeniyle yoğun memory mapping kullanır. Bu yüzden Linux tarafında vm.max_map_count değeri yeterli seviyede olmalıdır.

Geçici olarak ayarlamak için:

sudo sysctl -w vm.max_map_count=262144

Kontrol etmek için:

sysctl vm.max_map_count

Kalıcı hale getirmek için:

echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

Production ve test ortamlarında bu ayarın eksik olması en sık görülen startup problemlerinden biridir.

Swap Disable (Critical)

Elasticsearch için swap açık olması önerilmez.

Bunun temel nedenleri:

  • GC latency artar
  • response time bozulur
  • memory davranışı öngörülemez hale gelir
  • node stabilitesi olumsuz etkilenir

Swap kapatmak için:

sudo swapoff -a

Öncesinde kontrol etmek için:

swapon --show

Sonrasında tekrar kontrol edebilirsiniz:

swapon --show

Kalıcı hale getirmek için:

sudo sed -i '/\sswap\s/s/^/#/' /etc/fstab

Production’da swap açık Elasticsearch node’u, teoride çalışsa bile pratikte risk üretir.

Certificate Design

Secure Elasticsearch cluster kurulumunun temel taşı certificate yönetimidir.

Burada amaç yalnızca HTTPS açmak değildir. Asıl amaç:

  • her node’un kimliğini tanımlamak
  • node’lar arasında güven ilişkisi kurmak
  • transport layer communication’ı güvence altına almak
  • sahte veya yetkisiz node katılımını engellemek

Bu amaçla instances.yml dosyası kullanılır:

instances:
  - name: es01
    dns:
      - es01
      - localhost
    ip:
      - 127.0.0.1

  - name: es02
    dns:
      - es02
      - localhost
    ip:
      - 127.0.0.1

  - name: es03
    dns:
      - es03
      - localhost
    ip:
      - 127.0.0.1

Bu dosya sayesinde her node için certificate üretimi sırasında:

  • node name
  • DNS identity
  • IP bilgisi

tanımlanmış olur.

Bu da hem HTTP hem transport layer TLS tarafında doğru trust model kurulmasını sağlar.

Docker Compose Configuration

Aşağıdaki yapı, 3 node secure Elasticsearch cluster kurulumunu tanımlar.

Bu konfigürasyonda:

  • setup container ile CA ve node certificate üretimi yapılır
  • her node için HTTP TLS aktiftir
  • her node için transport TLS aktiftir
  • authentication aktiftir
  • her node ayrı volume kullanır
  • node’lar host üzerinden ayrı portlarla erişilebilir durumdadır
version: "3.8"
services:
  setup:
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
    container_name: es_setup_secure
    user: "0"
    volumes:
      - ./certs:/usr/share/elasticsearch/config/certs
      - ./instances.yml:/usr/share/elasticsearch/config/instances.yml
    command: >
      bash -c '
        if [ ! -f config/certs/ca.zip ]; then
          bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip;
          unzip config/certs/ca.zip -d config/certs;
        fi;
        if [ ! -f config/certs/certs.zip ]; then
          bin/elasticsearch-certutil cert --silent --pem \
            --in config/instances.yml \
            --out config/certs/certs.zip \
            --ca-cert config/certs/ca/ca.crt \
            --ca-key config/certs/ca/ca.key;
          unzip config/certs/certs.zip -d config/certs;
        fi;
        chown -R 1000:0 config/certs;
        find config/certs -type d -exec chmod 750 {} \;
        find config/certs -type f -exec chmod 640 {} \;
      '
  es01:
    depends_on:
      - setup
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
    container_name: es01_secure
    environment:
      - node.name=es01
      - cluster.name=${CLUSTER_NAME}
      - discovery.seed_hosts=es01,es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=true
      - xpack.security.http.ssl.key=certs/es01/es01.key
      - xpack.security.http.ssl.certificate=certs/es01/es01.crt
      - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.security.transport.ssl.key=certs/es01/es01.key
      - xpack.security.transport.ssl.certificate=certs/es01/es01.crt
      - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
    volumes:
      - ./certs:/usr/share/elasticsearch/config/certs
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - "9201:9200"
      - "9301:9300"
    ulimits:
      memlock:
        soft: -1
        hard: -1
  es02:
    depends_on:
      - setup
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
    container_name: es02_secure
    environment:
      - node.name=es02
      - cluster.name=${CLUSTER_NAME}
      - discovery.seed_hosts=es01,es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=true
      - xpack.security.http.ssl.key=certs/es02/es02.key
      - xpack.security.http.ssl.certificate=certs/es02/es02.crt
      - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.security.transport.ssl.key=certs/es02/es02.key
      - xpack.security.transport.ssl.certificate=certs/es02/es02.crt
      - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
    volumes:
      - ./certs:/usr/share/elasticsearch/config/certs
      - esdata02:/usr/share/elasticsearch/data
    ports:
      - "9202:9200"
      - "9302:9300"
    ulimits:
      memlock:
        soft: -1
        hard: -1
  es03:
    depends_on:
      - setup
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
    container_name: es03_secure
    environment:
      - node.name=es03
      - cluster.name=${CLUSTER_NAME}
      - discovery.seed_hosts=es01,es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=true
      - xpack.security.http.ssl.key=certs/es03/es03.key
      - xpack.security.http.ssl.certificate=certs/es03/es03.crt
      - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.security.transport.ssl.key=certs/es03/es03.key
      - xpack.security.transport.ssl.certificate=certs/es03/es03.crt
      - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
    volumes:
      - ./certs:/usr/share/elasticsearch/config/certs
      - esdata03:/usr/share/elasticsearch/data
    ports:
      - "9203:9200"
      - "9303:9300"
    ulimits:
      memlock:
        soft: -1
        hard: -1
volumes:
  esdata01:
  esdata02:
  esdata03:

Networking Model

Bu yapıdaki node’lar Docker network üzerinden kendi aralarında haberleşir.

Ek olarak her node host üzerinde ayrı portlara açılmıştır:

  • 9201 / 9202 / 9203 → HTTP erişimi
  • 9301 / 9302 / 9303 → transport portları

Bu yaklaşım özellikle şu senaryolarda çok kullanışlıdır:

  • local test
  • node bazlı doğrulama
  • troubleshooting
  • TLS ve authentication testleri
  • her node’a ayrı erişimle davranış gözlemi

Burada önemli bir not var:

Production ortamında transport portları genellikle dışarı açılmaz.

Bu örnekte port exposure yapılmasının sebebi, doğrulama ve gözlem kolaylığıdır.

Step-by-Step Installation

Şimdi kurulum adımlarını sıfırdan, düzenli şekilde ele alalım.

1. Prerequisites

Makine üzerinde şunlar kurulu olmalı:

  • Docker
  • Docker Compose v2
  • curl
  • unzip
  • tercihen jq

Önce kontrol edelim:

docker --version
docker compose version
curl --version
unzip -v
jq --version

Eğer jq yoksa:

sudo apt update
sudo apt install -y jq

2. Create the Working Directory

mkdir -p ~/elasticsearch-secure-cluster
cd ~/elasticsearch-secure-cluster

Kontrol etmek için:

pwd
ls -la

3. Create the .env File

cat > .env <<'EOF'
STACK_VERSION=8.12.0
CLUSTER_NAME=prod-secure-cluster
ELASTIC_PASSWORD=StrongPass123!
EOF

Kontrol:

cat .env

Beklenen çıktı:

STACK_VERSION=8.12.0
CLUSTER_NAME=prod-secure-cluster
ELASTIC_PASSWORD=StrongPass123!

4. Create the instances.yml File

cat > instances.yml <<'EOF'
instances:
  - name: es01
    dns:
      - es01
      - localhost
    ip:
      - 127.0.0.1

  - name: es02
    dns:
      - es02
      - localhost
    ip:
      - 127.0.0.1

  - name: es03
    dns:
      - es03
      - localhost
    ip:
      - 127.0.0.1
EOF

Kontrol:

cat instances.yml

5. Create the docker-compose.yml File

cat > docker-compose.yml <<'EOF'
version: "3.8"
services:
  setup:
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
    container_name: es_setup_secure
    user: "0"
    volumes:
      - ./certs:/usr/share/elasticsearch/config/certs
      - ./instances.yml:/usr/share/elasticsearch/config/instances.yml
    command: >
      bash -c '
        if [ ! -f config/certs/ca.zip ]; then
          bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip;
          unzip config/certs/ca.zip -d config/certs;
        fi;
        if [ ! -f config/certs/certs.zip ]; then
          bin/elasticsearch-certutil cert --silent --pem --in config/instances.yml --out config/certs/certs.zip --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key;
          unzip config/certs/certs.zip -d config/certs;
        fi;
        chown -R 1000:0 config/certs;
        find config/certs -type d -exec chmod 750 {} \;
        find config/certs -type f -exec chmod 640 {} \;
      '
  es01:
    depends_on:
      - setup
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
    container_name: es01_secure
    environment:
      - node.name=es01
      - cluster.name=${CLUSTER_NAME}
      - discovery.seed_hosts=es01,es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=true
      - xpack.security.http.ssl.key=certs/es01/es01.key
      - xpack.security.http.ssl.certificate=certs/es01/es01.crt
      - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.security.transport.ssl.key=certs/es01/es01.key
      - xpack.security.transport.ssl.certificate=certs/es01/es01.crt
      - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
    volumes:
      - ./certs:/usr/share/elasticsearch/config/certs
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - "9201:9200"
      - "9301:9300"
    ulimits:
      memlock:
        soft: -1
        hard: -1
  es02:
    depends_on:
      - setup
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
    container_name: es02_secure
    environment:
      - node.name=es02
      - cluster.name=${CLUSTER_NAME}
      - discovery.seed_hosts=es01,es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=true
      - xpack.security.http.ssl.key=certs/es02/es02.key
      - xpack.security.http.ssl.certificate=certs/es02/es02.crt
      - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.security.transport.ssl.key=certs/es02/es02.key
      - xpack.security.transport.ssl.certificate=certs/es02/es02.crt
      - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
    volumes:
      - ./certs:/usr/share/elasticsearch/config/certs
      - esdata02:/usr/share/elasticsearch/data
    ports:
      - "9202:9200"
      - "9302:9300"
    ulimits:
      memlock:
        soft: -1
        hard: -1
  es03:
    depends_on:
      - setup
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
    container_name: es03_secure
    environment:
      - node.name=es03
      - cluster.name=${CLUSTER_NAME}
      - discovery.seed_hosts=es01,es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=true
      - xpack.security.http.ssl.key=certs/es03/es03.key
      - xpack.security.http.ssl.certificate=certs/es03/es03.crt
      - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.security.transport.ssl.key=certs/es03/es03.key
      - xpack.security.transport.ssl.certificate=certs/es03/es03.crt
      - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
    volumes:
      - ./certs:/usr/share/elasticsearch/config/certs
      - esdata03:/usr/share/elasticsearch/data
    ports:
      - "9203:9200"
      - "9303:9300"
    ulimits:
      memlock:
        soft: -1
        hard: -1
volumes:
  esdata01:
  esdata02:
  esdata03:
EOF

YAML doğrulaması için:

docker compose config

Bu komut hata vermiyorsa compose dosyası doğru parse edilmiştir.

6. Apply System Settings

6.1 Set vm.max_map_count

sudo sysctl -w vm.max_map_count=262144

Kontrol:

sysctl vm.max_map_count

Beklenen:

vm.max_map_count = 262144

Kalıcı hale getirmek için:

echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

6.2 Disable Swap

Önce kontrol edin:

swapon --show

Sonra kapatın:

sudo swapoff -a

Tekrar kontrol edin:

swapon --show

Kalıcı hale getirmek için:

sudo sed -i '/\sswap\s/s/^/#/' /etc/fstab

7. Start the Cluster

docker compose up -d

Container durumlarını kontrol edin:

docker compose ps

Beklenen olarak şu container’lar görünmelidir:

8. Check the Logs

İlk kurulumda en kritik kontrollerden biri log’lardır.

Setup container log:

docker logs es_setup_secure

Elasticsearch node log’ları:

docker logs es01_secure
docker logs es02_secure
docker logs es03_secure

Canlı izlemek için:

docker logs -f es01_secure

Burada özellikle şu noktaları kontrol edin:

  • fatal error olmaması
  • SSL/certificate kaynaklı hata olmaması
  • node started mesajları
  • cluster formation sürecinin normal tamamlanması

9. Verify the Generated Certificates

find certs -type f | sort

Beklenen olarak benzer dosyalar oluşmalıdır:

certs/ca/ca.crt
certs/ca/ca.key
certs/es01/es01.crt
certs/es01/es01.key
certs/es02/es02.crt
certs/es02/es02.key
certs/es03/es03.crt
certs/es03/es03.key

10. Test Anonymous Access

İlk güvenlik doğrulaması anonymous access testidir.

curl -k https://localhost:9201

Beklenen sonuç:

  • HTTP 401
  • security_exception
  • missing authentication credentials

Bu hatayı görmek iyidir. Bu, security katmanının aktif olduğunu gösterir.

11. Test Authenticated Access

Önce .env dosyasını shell’e alalım:

source .env

Cluster health

curl --cacert certs/ca/ca.crt -u elastic:${ELASTIC_PASSWORD} \
https://localhost:9201/_cluster/health?pretty

Beklenen:

  • status: "green"
  • kısa süreli yellow görülmesi ilk startup anında normal olabilir
  • number_of_nodes: 3

Node listesi

curl --cacert certs/ca/ca.crt -u elastic:${ELASTIC_PASSWORD} \
https://localhost:9201/_cat/nodes?v

Burada 3 node görünmelidir:

  • es01
  • es02
  • es03

Her node’a tek tek erişim testi

curl --cacert certs/ca/ca.crt -u elastic:${ELASTIC_PASSWORD} https://localhost:9201
curl --cacert certs/ca/ca.crt -u elastic:${ELASTIC_PASSWORD} https://localhost:9202
curl --cacert certs/ca/ca.crt -u elastic:${ELASTIC_PASSWORD} https://localhost:9203

node1:

node2:

Üçü de cevap veriyorsa node bazlı doğrulama tamamdır.

12. Final Verification

Aşağıdaki üç komut temiz çalışıyorsa cluster kurulumu başarılıdır:

curl --cacert certs/ca/ca.crt -u elastic:${ELASTIC_PASSWORD} \
https://localhost:9201/_cluster/health?pretty

curl --cacert certs/ca/ca.crt -u elastic:${ELASTIC_PASSWORD} \
https://localhost:9201/_cat/nodes?v

curl --cacert certs/ca/ca.crt -u elastic:${ELASTIC_PASSWORD} \
https://localhost:9201/_cat/indices?v

İlk aşamada _cat/indices çıktısı boş olabilir. Bu normaldir. Henüz index oluşturulmamıştır.

Common Issues You Will Most Likely See

1. vm.max_map_count too low

Belirti:

  • container çalışır gibi görünür
  • Elasticsearch node ayağa kalkmaz

Kontrol:

sysctl vm.max_map_count

2. Swap is enabled

Belirti:

  • performans kararsızlığı
  • uyarılar
  • öngörülemeyen davranışlar

Kontrol:

swapon --show

3. Certificate permission problem

Belirti:

  • SSL key/certificate okunamıyor
  • startup sırasında TLS hataları

Kontrol:

docker logs es01_secure

4. YAML parse error

Belirti:

  • compose başlamaz

Kontrol:

docker compose config

5. Port conflict

Belirti:

  • 9201, 9202, 9203, 9301, 9302, 9303 portları kullanımda olabilir

Kontrol:

ss -lntp | egrep '9201|9202|9203|9301|9302|9303'

Clean Reset

Her şeyi silip temizden başlamak gerekirse:

docker compose down -v
rm -rf certs
docker volume ls | grep esdata

Sonra yeniden başlatın:

docker compose up -d

Bu işlem:

  • cert dosyalarını sıfırlar
  • data volume’leri kaldırır
  • cluster’ı temiz kurulum noktasına getirir

Key Takeaways

Bu kurulumdan çıkarılması gereken ana sonuçlar şunlardır:

  • secure cluster başlangıç noktasıdır
  • TLS hem HTTP hem transport layer’da aktif olmalıdır
  • certificate management cluster tasarımının bir parçasıdır
  • 3 node minimum production standardıdır
  • swap ve sistem ayarları kritik önemdedir
  • authentication olmadan Elasticsearch production’da kullanılmamalıdır

Conclusion

Bu bölümde production’a uygun bir Elasticsearch cluster yapısını sıfırdan kurduk.

Bu süreçte:

  • secure cluster yapısı oluşturuldu
  • TLS hem HTTP hem transport layer’da aktif edildi
  • authesntication etkinleştirildi
  • certificate-based trust modeli kuruldu
  • node discovery ve cluster formation doğru yapılandırıldı
  • temel doğrulama ve troubleshooting adımları tamamlandı

Bu noktadan sonra cluster artık şu katmanlar için sağlam bir temel sunar:

  • index design
  • ingestion
  • search
  • aggregations
  • analytics
  • monitoring
  • failover testing
  • role-based access control

Başka bir deyişle, artık sadece çalışan değil, üzerine güvenle inşa edilebilecek bir Elasticsearch cluster elde edilmiş oldu.


메타데이터
post_id
d9fa5a12ddad
slug
building-a-production-ready-elasticsearch-cluster-installation-configuration-d9fa5a12ddad
url
https://medium.com/@muratculum/building-a-production-ready-elasticsearch-cluster-installation-configuration-d9fa5a12ddad
canonical_url
https://medium.com/@muratculum/building-a-production-ready-elasticsearch-cluster-installation-configuration-d9fa5a12ddad
author_url
https://medium.com/@muratculum
status
ok
fetched_at
2026-06-09 15:37:30