Мы часто сталкиваемся с ситуацией: клиент использует Elasticsearch, но хочет избежать платной лицензии для Security, Alerting или Index Management. OpenSearch — форк Elasticsearch 7.10, созданный Amazon после смены лицензии. Он полностью open-source (Apache 2.0), активно развивается AWS и сообществом. Экономия на лицензиях может достигать $50,000 в год на кластере из 3 узлов. Настройка OpenSearch — процесс, требующий внимания к деталям. Наша команда имеет 7 лет опыта в развёртывании поисковых систем и реализовала 50+ проектов по миграции с Elasticsearch на OpenSearch. Свяжитесь с нами для бесплатной оценки вашего проекта.
Почему стоит выбрать OpenSearch?
OpenSearch сохранил совместимость с Elasticsearch 7.x API — большинство клиентов ES 7.x работают без изменений. ES 8.x ввёл breaking changes (обязательный TLS, изменения в security API), поэтому прямая совместимость нарушена. OpenSearch даёт то, что в бесплатном Elasticsearch недоступно: Security (TLS, аутентификация, RBAC), Alerting, anomaly detection, Index Management (ISM) и SQL-поддержка. В Elasticsearch эти фичи требуют платной подписки Platinum или Enterprise. Для сравнения, лицензия Elasticsearch Platinum обходится в $16,000 в год за узел. И наоборот: в Elasticsearch 8.x есть EQL, ES|QL и некоторые ML-модели, которых в OpenSearch пока нет. Закажите консультацию, и мы поможем выбрать оптимальную конфигурацию.
| Функция | OpenSearch | Elasticsearch (free) | Elasticsearch (платный) |
|---|---|---|---|
| Security (TLS, RBAC) | ✅ Встроено | ❌ | ✅ |
| Alerting | ✅ Встроено | ❌ | ✅ |
| Index Management (ILM/ISM) | ✅ ISM | ❌ | ✅ (ILM) |
| SQL | ✅ | ❌ | ✅ |
| EQL / ES | QL | ❌ | ❌ |
| ML (anomaly detection) | ✅ ML Commons | ❌ | ✅ |
Как развернуть OpenSearch кластер?
Для production используем Docker Compose с несколькими нодами и OpenSearch Dashboards. Пример конфигурации для кластера из двух узлов:
version: '3' services: opensearch-node1: image: opensearchproject/opensearch:2.13.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" - DISABLE_INSTALL_DEMO_CONFIG=true - DISABLE_SECURITY_PLUGIN=false ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 volumes: - opensearch-data1:/usr/share/opensearch/data - ./opensearch.yml:/usr/share/opensearch/config/opensearch.yml - ./certs/root-ca.pem:/usr/share/opensearch/config/root-ca.pem - ./certs/node1.pem:/usr/share/opensearch/config/node1.pem - ./certs/node1-key.pem:/usr/share/opensearch/config/node1-key.pem ports: - 9200:9200 - 9600:9600 opensearch-node2: image: opensearchproject/opensearch:2.13.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" - DISABLE_INSTALL_DEMO_CONFIG=true - DISABLE_SECURITY_PLUGIN=false ulimits: memlock: soft: -1 hard: -1 volumes: - opensearch-data2:/usr/share/opensearch/data - ./opensearch.yml:/usr/share/opensearch/config/opensearch.yml - ./certs/root-ca.pem:/usr/share/opensearch/config/root-ca.pem - ./certs/node2.pem:/usr/share/opensearch/config/node2.pem - ./certs/node2-key.pem:/usr/share/opensearch/config/node2-key.pem opensearch-dashboards: image: opensearchproject/opensearch-dashboards:2.13.0 container_name: opensearch-dashboards ports: - 5601:5601 environment: OPENSEARCH_HOSTS: '["https://opensearch-node1:9200","https://opensearch-node2:9200"]' DISABLE_SECURITY_DASHBOARDS_PLUGIN: "false" volumes: opensearch-data1: opensearch-data2: Конфигурационный файл opensearch.yml включает настройки TLS и security:
cluster.name: opensearch-cluster network.host: 0.0.0.0 plugins.security.ssl.transport.pemcert_filepath: node1.pem plugins.security.ssl.transport.pemkey_filepath: node1-key.pem plugins.security.ssl.transport.pemtrustedcas_filepath: root-ca.pem plugins.security.ssl.transport.enforce_hostname_verification: false plugins.security.ssl.http.enabled: true plugins.security.ssl.http.pemcert_filepath: node1.pem plugins.security.ssl.http.pemkey_filepath: node1-key.pem plugins.security.ssl.http.pemtrustedcas_filepath: root-ca.pem plugins.security.allow_unsafe_democertificates: false plugins.security.allow_default_init_securityindex: true plugins.security.authcz.admin_dn: - 'CN=admin,OU=client,O=client,L=test,C=de' plugins.security.nodes_dn: - 'CN=node1.example.com,OU=test,O=test,L=test,C=de' - 'CN=node2.example.com,OU=test,O=test,L=test,C=de' plugins.security.audit.type: internal_opensearch plugins.security.enable_snapshot_restore_privilege: true plugins.security.check_snapshot_restore_write_privileges: true plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"] Какие функции безопасности встроены в OpenSearch?
OpenSearch Security Plugin включает TLS для транспорта и HTTP, RBAC, аудит, и внутреннее хранилище пользователей. Инициализация security index и смена пароля admin выполняются после первого запуска. Пример генерации сертификатов:
# Создание корневого сертификата openssl genrsa -out root-ca-key.pem 2048 openssl req -new -x509 -sha256 -key root-ca-key.pem -out root-ca.pem -days 3650 -subj "/C=UA/O=MyOrg/CN=root-ca" # Сертификат узла openssl genrsa -out node1-key.pem 2048 openssl req -new -key node1-key.pem -out node1.csr -subj "/C=UA/O=MyOrg/CN=node1.example.com/OU=test" openssl x509 -req -in node1.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -out node1.pem -days 3650 -sha256 После первого запуска инициализируем security index и меняем пароль admin:
# Инициализация security index docker exec -it opensearch-node1 bash /usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh \ -cd /usr/share/opensearch/config/opensearch-security/ \ -icl -nhnv \ -cacert /usr/share/opensearch/config/root-ca.pem \ -cert /usr/share/opensearch/config/admin.pem \ -key /usr/share/opensearch/config/admin-key.pem # Смена пароля admin curl -XPUT "https://localhost:9200/_plugins/_security/api/internalusers/admin" \ -H 'Content-Type: application/json' \ -u 'admin:admin' \ --cacert root-ca.pem \ -d '{"password": "NewSecurePassword123!", "backend_roles": ["admin"]}' Миграция с Elasticsearch
При миграции с Elasticsearch 7.x на OpenSearch снапшот-восстановление работает без проблем. На ES создаёте снапшот, на OpenSearch регистрируете тот же репозиторий и восстанавливаете. Прямая миграция ES 8.x невозможна из-за несовместимости формата, потребуется переиндексация. Мы рекомендуем использовать Logstash с input-elasticsearch и output-opensearch. Это занимает 1-2 дня в зависимости от объёма данных.
| Объём данных | Время миграции (ES 7.x) | Время миграции (ES 8.x) |
|---|---|---|
| < 100 ГБ | 1 день | 1-2 дня |
| 100 ГБ - 1 ТБ | 1-2 дня | 2-3 дня |
| > 1 ТБ | 2-3 дня | 3-5 дней |
Процесс работы
- Аналитика: аудит текущего кластера, версий, размера данных, нагрузки. Определяем схему миграции.
- Проектирование: архитектура нового кластера — количество нод, ресурсы, политики ISM, настройка безопасности.
- Реализация: развёртывание OpenSearch, настройка TLS, Security, Dashboards, перенос данных.
- Тестирование: проверка совместимости клиентов, нагрузочное тестирование, сравнение производительности.
- Деплой: переключение трафика, мониторинг, обучение команды.
Что входит в работу
- Развёртывание кластера OpenSearch (от 1 до 10+ нод)
- Настройка TLS/SSL, RBAC, audit logging
- Интеграция OpenSearch Dashboards с кастомными дашбордами
- Миграция данных с Elasticsearch 7.x или 8.x
- Оптимизация индексов, настройка ISM политик
- Документация по администрированию и восстановлению
- Часовая поддержка после деплоя
Сроки
Развёртывание кластера из 3 узлов — 2–3 рабочих дня. Миграция данных с ES 7.x — 1 дополнительный день. Настройка ISM и Dashboards — ещё 1 день. Полный проект «под ключ» — до 5 дней. Закажите консультацию для точной оценки вашего проекта.
Типичные ошибки при настройке OpenSearch
- Отсутствие heap dump при OOM — настроить
OPENSEARCH_JAVA_OPTSс правильным Xms/Xmx. - Несовместимость клиентов — если используете ES 8.x клиент, замените на opensearch-клиент.
- Проблемы с TLS — неверные пути к сертификатам; всегда проверяйте verify_certs.
- Отсутствие резервирования — не настраивайте single-node в production; минимум 3 ноды.
- Игнорирование ulimits — настройте memlock и nofile в docker-compose.
Официальная документация OpenSearch поможет разобраться с деталями. Для консультации по настройке OpenSearch или миграции с Elasticsearch — свяжитесь с нами, оценим ваш проект бесплатно.







