Налаштування Elasticsearch кластера для веб-застосунку

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування Elasticsearch кластера для веб-застосунку
Складна
~3-5 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування кластера Elasticsearch

Кластер Elasticsearch — кілька вузлів, що координують індексування та пошук. Один вузол — ризик: втрата даних при збої сервера, нема розподілу шардів. Мінімальний продакшен кластер: 3 вузли (master quorum = 2).

Docker Compose кластер

version: '3.8'
services:
  es-master-1:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
    environment:
      - cluster.name=prod-cluster
      - node.name=master-1
      - node.roles=master,data
      - discovery.seed_hosts=es-master-1,es-master-2,es-master-3
      - cluster.initial_master_nodes=master-1,master-2,master-3
      - xpack.security.enabled=false
      - ES_JAVA_OPTS=-Xms2g -Xmx2g
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - "9201:9200"
    healthcheck:
      test: curl -s http://localhost:9200/_cluster/health | grep status
      interval: 10s
      timeout: 5s
      retries: 5

  es-master-2:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
    environment:
      - cluster.name=prod-cluster
      - node.name=master-2
      - node.roles=master,data
      - discovery.seed_hosts=es-master-1,es-master-2,es-master-3
      - cluster.initial_master_nodes=master-1,master-2,master-3
      - xpack.security.enabled=false
      - ES_JAVA_OPTS=-Xms2g -Xmx2g
    volumes:
      - esdata2:/usr/share/elasticsearch/data
    ports:
      - "9202:9200"

  es-master-3:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
    environment:
      - cluster.name=prod-cluster
      - node.name=master-3
      - node.roles=master,data
      - discovery.seed_hosts=es-master-1,es-master-2,es-master-3
      - cluster.initial_master_nodes=master-1,master-2,master-3
      - xpack.security.enabled=false
      - ES_JAVA_OPTS=-Xms2g -Xmx2g
    volumes:
      - esdata3:/usr/share/elasticsearch/data
    ports:
      - "9203:9200"

  kibana:
    image: docker.elastic.co/kibana/kibana:8.11.0
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=http://es-master-1:9200

volumes:
  esdata1:
  esdata2:
  esdata3:

Перевірка здоров'я кластера

curl -s http://localhost:9200/_cluster/health | jq

# Вивід:
# {
#   "cluster_name": "prod-cluster",
#   "status": "green",           # green = всі шарди розподілені
#   "timed_out": false,
#   "number_of_nodes": 3,
#   "number_of_data_nodes": 3,
#   "active_primary_shards": 5,
#   "active_shards": 10
# }

Стратегія шардів

# Для індексу з 100 ГБ даних, 3 вузли:
# - 3 первинних шарди (по одному на вузол)
# - 2 реплики (всього 9 шардів)

curl -X PUT "localhost:9200/my_index" \
  -H 'Content-Type: application/json' \
  -d '{
    "settings": {
      "number_of_shards": 3,
      "number_of_replicas": 2,
      "index.refresh_interval": "30s"
    }
  }'

Ролі вузлів

# Вузол master (обирає лідерів)
node.roles: [ master ]

# Вузол data (зберігає шарди)
node.roles: [ data ]

# Вузол ingest (попередня обробка документів)
node.roles: [ ingest ]

# Комбінований (всі ролі)
node.roles: [ master, data, ingest ]