← Назад к вопросам

Какие знаешь сущности ElasticSearch?

2.0 Middle🔥 211 комментариев
#Мониторинг и логирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные сущности ElasticSearch

В ElasticSearch существует несколько ключевых сущностей (концепций), которые образуют иерархическую модель данных и определяют работу кластера. Понимание этих сущностей критически важно для эффективного проектирования, развертывания и эксплуатации ElasticSearch в DevOps-среде.

1. Кластер (Cluster)

Кластер — это совокупность одного или нескольких узлов (серверов), которые совместно хранят ваши данные и обеспечивают возможности совместного поиска и индексирования. Это высший уровень организации в Elasticsearch.

  • Каждый кластер идентифицируется уникальным именем (по умолчанию "elasticsearch"). Имя важно для обнаружения узлов.
  • Основная задача: объединять вычислительные ресурсы и данные всех узлов для выполнения операций (индексирование, поиск, агрегации).
# Пример настройки имени кластера в elasticsearch.yml
cluster.name: my-production-logging-cluster

2. Узел (Node)

Узел — это отдельный сервер, который является частью кластера, хранит данные и участвует в кластеризации, индексировании и поиске. В зависимости от роли, узел может быть разных типов:

  • Master-eligible node: Может быть избран мастер-узлом, который управляет кластером (создание/удаление индексов, отслеживание состояния узлов).
  • Data node: Хранит данные (шарды) и выполняет операции, связанные с данными (CRUD, поиск, агрегации).
  • Ingest node: Выполняет pipeline-обработку документов перед индексированием.
  • Coordinating node (только по запросу): Перенаправляет запросы, распределяет результаты поиска. Все узлы по умолчанию являются координирующими.
# Пример конфигурации узла как чистого мастер-узла в elasticsearch.yml
node.name: "master-node-01"
node.roles: [ master ]
node.data: false

3. Индекс (Index)

Индекс — это коллекция документов, имеющих схожие характеристики. Это логический неймспейс, который указывает на один или несколько физических шардов. Аналог базы данных в RDBMS.

  • Имя индекса должно быть в нижнем регистре.
  • Жизненным циклом индексов (rollover, shrink, ILM — Index Lifecycle Management) активно управляют в DevOps для оптимизации хранения и производительности.
# Создание индекса через REST API
curl -X PUT "localhost:9200/my-app-logs-2024.05" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": { ... }
}'

4. Тип документов (Type) — УСТАРЕЛ

В версиях до 7.x Type был логической категорией/разделением внутри индекса (аналог таблицы в RDBMS). Начиная с версии 8.x, концепция удалена. Теперь один индекс хранит документы только одного типа. Это упростило архитектуру.

5. Документ (Document)

Документ — это базовая единица информации, которую можно индексировать. Это JSON-объект, хранящийся в Elasticsearch.

  • Каждый документ принадлежит индексу.
  • Каждый документ имеет уникальный ID (может быть сгенерирован автоматически) и версию для управления конфликтами.
  • Документ состоит из набора полей (fields), которые по умолчанию динамически типизируются.
// Пример документа (лог приложения)
{
  "@timestamp": "2024-05-27T12:00:00Z",
  "message": "User login successful",
  "log.level": "INFO",
  "service.name": "auth-service",
  "host.ip": "10.0.1.15",
  "user.id": "user_12345"
}

6. Шард (Shard) и Реплика (Replica)

Это ключевые сущности для масштабирования и отказоустойчивости.

  • Шард (Shard) — это низкоуровневая рабочая единица, индекс Люси. Каждый шард является полностью функциональным и самостоятельным "индексом". Когда создается индекс, определяется количество первичных шардов (primary shards), которое нельзя изменить позже.
  • Реплика (Replica) — это копия первичного шарда. Она обеспечивает:
    *   **Высокую доступность**: Продолжение работы при отказе узла с первичным шардом.
    *   **Масштабирование производительности**: Запросы на чтение могут обрабатываться и репликами.

# Настройки индекса: 3 первичных шарда, по 1 реплике на каждый (всего 6 шардов)
number_of_shards: 3
number_of_replicas: 1

7. Mapping (Схема)

Маппинг — это схема или определение того, как документ и его поля хранятся и индексируются. Он определяет:

  • Типы полей (text, keyword, date, integer, geo_point, nested и т.д.).
  • Форматы (например, для дат).
  • Анализаторы (как текст разбивается на термины для поиска).
  • Явный (explicit) маппинг рекомендуется для production для контроля над процессами.
// Пример определения маппинга при создании индекса
PUT /my-index
{
  "mappings": {
    "properties": {
      "message": { "type": "text", "analyzer": "standard" },
      "log.level": { "type": "keyword" },
      "@timestamp": { "type": "date" },
      "user.id": { "type": "keyword" },
      "response.time_ms": { "type": "float" }
    }
  }
}

8. Сегмент (Segment)

На физическом уровне каждый шард представляет собой индекс Люси, который, в свою очередь, состоит из одного или нескольких сегментов (segments). Сегмент — это неизменяемая "порция" обратно-индексированных данных. Операция слияния (merge) периодически объединяет мелкие сегменты в более крупные для оптимизации производительности и использования дискового пространства.

Итог для DevOps-инженера: Понимание этих сущностей позволяет грамотно проектировать инфраструктуру (планирование количества узлов и их ролей), настраивать индексы (выбор количества шардов и реплик в зависимости от объема данных и требований к доступности), управлять жизненным циклом данных (ILM-политики) и устранять неполадки (например, проблемы с несбалансированностью шардов или нехваткой дискового пространства из-за сегментов). Например, решение о 10 первичных шардах для индекса логов или 1 шарде для небольшого системного индекса напрямую влияет на возможность горизонтального масштабирования и отказоустойчивости кластера.