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, 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
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1141