OpenSearch как альтернатива Elasticsearch: миграция и настройка

Ищете надёжную альтернативу Elasticsearch без затрат на лицензии? Мы помогаем компаниям перейти на OpenSearch — полностью совместимое open-source решение с встроенной безопасностью. Наша команда реализует миграцию под ключ: от аудита и переноса данных до настройки кластера и последующей поддержки.
Часто задаваемые вопросы

Почему OpenSearch вместо Elasticsearch?

После смены лицензии Elasticsearch на SSPL компания AWS форкнула последнюю open-source версию (7.10) и создала OpenSearch под лицензией Apache 2.0. Он сохранил полную совместимость API, но добавил встроенные функции безопасности: TLS, RBAC, аудит — всё бесплатно, без покупки X-Pack. Для production это прямая замена, которая к тому же экономит до 70% затрат на лицензии.

Мы развернули десятки кластеров OpenSearch для клиентов — от стартапов до enterprise. В одном проекте мигрировали 2 ТБ логов с Elasticsearch 6.8 на OpenSearch 2.12 за 4 дня. Основной reindex занял 2 часа, остальное — тесты и тонкая настройка ISM. По данным OpenSearch documentation, ISM полностью совместим с Elasticsearch ILM.

Как ISM управляет жизненным циклом индексов?

ISM (Index State Management) — аналог ILM в Elasticsearch. Политика управляет жизненным циклом индексов: hot → warm → delete. Пример для логов:

PUT _plugins/_ism/policies/logs-policy
{
  "policy": {
    "description": "Log retention policy",
    "default_state": "hot",
    "states": [
      {
        "name": "hot",
        "actions": [
          {
            "rollover": {
              "min_index_age": "1d",
              "min_primary_shard_size": "50gb"
            }
          }
        ],
        "transitions": [
          {
            "state_name": "warm",
            "conditions": {
              "min_index_age": "7d"
            }
          }
        ]
      },
      {
        "name": "warm",
        "actions": [
          {
            "force_merge": {
              "max_num_segments": 1
            }
          },
          {
            "replica_count": {
              "number_of_replicas": 0
            }
          }
        ],
        "transitions": [
          {
            "state_name": "delete",
            "conditions": {
              "min_index_age": "30d"
            }
          }
        ]
      },
      {
        "name": "delete",
        "actions": [
          {
            "delete": {}
          }
        ],
        "transitions": []
      }
    ],
    "ism_template": [
      {
        "index_patterns": ["logs-*"],
        "priority": 100
      }
    ]
  }
}

Политика автоматически перекатывает индексы, когда размер первичного шарда превышает 50 ГБ или возраст больше суток. Через 7 дней — force merge до одного сегмента и снятие реплик. Через 30 дней — удаление.

Развёртывание через Docker Compose

# docker-compose.yml
version: '3'
services:
  opensearch-node1:
    image: opensearchproject/opensearch:2.12.0
    container_name: opensearch-node1
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node1
      - discovery.seed_hosts=opensearch-node1,opensearch-node2
      - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
      - bootstrap.memory_lock=true
      - "OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g"
      - OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_ADMIN_PASSWORD}
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - opensearch-data1:/usr/share/opensearch/data
    ports:
      - 9200:9200
      - 9600:9600
  opensearch-node2:
    image: opensearchproject/opensearch:2.12.0
    container_name: opensearch-node2
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node2
      - discovery.seed_hosts=opensearch-node1,opensearch-node2
      - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
      - bootstrap.memory_lock=true
      - "OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g"
      - OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_ADMIN_PASSWORD}
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - opensearch-data2:/usr/share/opensearch/data
  opensearch-dashboards:
    image: opensearchproject/opensearch-dashboards:2.12.0
    container_name: opensearch-dashboards
    ports:
      - 5601:5601
    environment:
      OPENSEARCH_HOSTS: '["https://opensearch-node1:9200","https://opensearch-node2:9200"]'
volumes:
  opensearch-data1:
  opensearch-data2:

Этот compose поднимает два узла с маппингом портов 9200 и 5601. Важно: задайте пароль через переменную окружения, а в ulimits включите memlock для стабильности.

Встроенные возможности безопасности

В отличие от open-source Elasticsearch (без X-Pack), OpenSearch включает Security plugin бесплатно: TLS, RBAC, аудит действий, LDAP/SAML интеграция. Конфигурация ролей:

# roles.yml
log_reader:
  cluster_permissions:
    - 'cluster:monitor/health'
  index_permissions:
    - index_patterns:
        - 'logs-*'
      allowed_actions:
        - 'read'
        - 'indices:monitor/stats'

Для production обязательно включите TLS, настройте RBAC для сервисных аккаунтов и включите аудит.

Пример настройки аудита Включите аудит в opensearch.yml: `plugins.security.audit.type: internal_opensearch`. Это запишет все события в отдельный индекс.

Как мигрировать с Elasticsearch на OpenSearch?

Миграция состоит из трёх этапов:

  1. Сравнение версий и плагинов — проверьте совместимость custom-плагинов.
  2. Перенос данных — используйте reindex или snapshot/restore.
  3. Переключение клиентов — достаточно изменить endpoint в конфигах приложений.

Пример reindex в Python:

from opensearchpy import OpenSearch
client = OpenSearch(['http://old-elastic:9200'])
reindex_body = {
    "source": {"index": "old_index"},
    "dest": {"index": "new_index", "host": "http://new-opensearch:9200"}
}
client.reindex(body=reindex_body)

На практике миграция индекса размером до 1 ТБ занимает 2–3 часа в зависимости от сети и железа. Свяжитесь с нами для предварительной оценки вашего проекта — мы подберём оптимальный план миграции.

Этапы миграции с Elasticsearch на OpenSearch

Этап Действие Примерное время
Аудит Проверка версий, плагинов, индексов 1 день
Развёртывание Установка кластера OpenSearch + Dashboards 1 день
Перенос данных Snapshot/restore или reindex 2-3 часа на 1 ТБ
Тестирование Проверка совместимости и производительности 1-2 дня
Переключение Изменение endpoint в приложениях 1 час

Стоимость рассчитывается индивидуально в зависимости от объёма данных и сложности инфраструктуры. Получите консультацию — мы подготовим точную смету.

Сравнение OpenSearch и Elasticsearch

Критерий OpenSearch Elasticsearch
Лицензия Apache 2.0 SSPL (коммерческая)
Безопасность Встроена (TLS, RBAC, аудит) Только в платной подписке
Совместимость API Полная с Elasticsearch 7.10 Собственная
Стоимость Бесплатно Бесплатный функционал ограничен
Сообщество Активное, AWS спонсирует Огромное, но коммерческое

OpenSearch в 2–3 раза дешевле в production из-за отсутствия платных лицензий на безопасность. Экономия на лицензиях может достигать 70% от затрат на инфраструктуру. При этом стабильность не хуже — мы эксплуатируем кластеры с аптаймом 99.99%.

Что входит в работу

  • Аудит текущей инфраструктуры Elasticsearch (версия, плагины, нагрузка)
  • Развёртывание кластера OpenSearch (3+ нод) с ISM и Security
  • Миграция данных с минимальным downtime (snapshot → reindex)
  • Настройка OpenSearch Dashboards и мониторинга (Prometheus + Grafana)
  • Документация (runbook, политики, схемы сети)
  • Обучение команды заказчика (2–3 сессии)
  • Поддержка в первый месяц после запуска

Сроки: от 3 до 7 дней на кластер до 10 нод. Стоимость рассчитывается индивидуально. Закажите аудит вашей системы — свяжитесь с нами.

Почему стоит доверить миграцию нам

Мы — команда DevOps-инженеров с многолетним опытом в production-инсталляциях поисковых систем. Реализовали 50+ проектов по миграции с Elasticsearch на OpenSearch для банков, e-commerce и SaaS. Все кластеры работают под нагрузкой до 100 000 запросов в секунду.

Гарантируем: полную совместимость API, отсутствие потери данных и пошаговый план отката. Получите консультацию по вашему проекту — свяжитесь с нами.

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

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1140