Мы часто сталкиваемся с ситуацией: клиент использует 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 — свяжитесь с нами, оценим ваш проект бесплатно.







