OpenSearch как сервис: обзор и тривиальный пример использования на Python

в 12:12, , рубрики: DBaaS, opensearch, python, selectel, selectel cloud
OpenSearch как сервис: обзор и тривиальный пример использования на Python - 1

Привет! Проблема традиционных реляционных баз данных в том, что они не всегда справляются с обработкой огромных объемов информации. Вот вам нужно быстро найти, проиндексировать и проанализировать логи, события или метрики, но вы упираетесь в ограничения масштабируемости, автошардирования и скорости обработки запросов специфического профиля нагрузки. Знакомо?

Меня зовут Гришин Александр, я продакт-менеджер в Selectel и отвечаю за развитие объектного хранилища и облачных баз данных. В этой статье расскажу, как описанные проблемы решает OpenSearch, как развернуть кластеры этой платформы за несколько минут и начать с ней работать в Python.

OpenSearch как сервис: обзор и тривиальный пример использования на Python - 2Мы в Selectel готовим новый сервис. Если арендуете серверы в рабочих или личных проектах, нам очень поможет ваш опыт — записывайтесь на короткое онлайн-интервью. За участие подарим плюшевого Тирекса и бонусы на услуги Selectel.

Используйте навигацию, если не хотите читать текст полностью:
Что такое OpenSearch
OpenSearch as a Service в Selectel
Как начать использовать OpenSearch в Selectel
Как использовать OpenSearch с Python
Подключение к OpenSearch Dashboard

Что такое OpenSearch


OpenSearch 2.18 (Latest) — это open source высокопроизводительная поисковая система и аналитический движок. Инструмент позволяет индексировать и анализировать большие объемы данных в режиме реального времени. Это форк Elasticsearch 7.10, разработанный Amazon после смены лицензии Elastic на проприетарную. OpenSearch сохраняет совместимость с API Elasticsearch, но при этом остается полностью открытым и свободным для использования. Это делает его удобным решением для пользователей, ищущих open source альтернативу.

OpenSearch хорош тем, что предлагает полнотекстовый поиск по индексированным данным, включая поддержку морфологии и сложных поисковых запросов. Помимо тривиального поиска можно также анализировать логи. А чтобы наглядно представить данные, можно строить таблицы и графики с помощью OpenSearch Dashboards. Отдельно отмечу поддержку машинного обучения — можно автоматически выявлять аномалии в данных за счет поддержки таких плагинов, как anomaly-detection и opensearch-ml.

Наконец, благодаря open source модели и плагинам OpenSearch можно адаптировать под разные задачи. Например, плагин notifications предназначен для управления уведомлениями через интеграции с менеджерами или веб-хуками с POST-, PUT- и PATH-запросами.

Отличия OpenSearch от Elasticsearch

OpenSearch стал основной альтернативой ELK, предлагая:

  • полностью открытую лицензию (Apache 2.0), что позволяет использовать и модифицировать продукт без ограничений;
  • дополнительные функции и плагины от сообщества без лицензий и платных ограничений;
  • совместимость с API Elasticsearch для упрощения миграции с Elasticsearch;
  • поддержку сообщества и развитие в концепции AWS-like, но без привязки к конкретному облачному провайдеру.

Итак, что мы имеем? С одной стороны, OpenSearch — отличный выбор для разработчиков, аналитиков и DevOps-инженеров, которым необходим мощный инструмент для работы с большими текстовыми данными. С другой, платформа требовательна к железу и сложна в эксплуатации.

OpenSearch как сервис: обзор и тривиальный пример использования на Python - 3

OpenSearch as a Service в Selectel


Чтобы упростить повседневную жизни DevOp- и SRE-инженеров, дата-аналитиков и разработчиков, мы выпустили новую услугу OpenSearch как сервис. Это полностью управляемая платформа, которая позволяет развернуть кластеры OpenSearch за несколько минут. Самостоятельного администрировать инфраструктурную составляющую при этом не нужно.

В услугу входит:

  • установка и настройка нод,
  • формирование групп в кластере,
  • масштабирование, репликация, шардирование и отказоустойчивость,
  • мониторинг и резервное копирование,
  • обеспечение хранения данных в соответствии с требованиями ИБ: 152-ФЗ, ГОСТ 57580 и прочих,
  • интеграция с другими сервисами Selectel.

В целом, мы взяли на себя всю инфраструктурную рутину вроде настройки и поддержки сложных многосоставных систем. При этом работа на уровне приложения OpenSearch остается в зоне ответственности клиента.

Про группы нод и роли в нашей услуге

Кластер OpenSearch состоит из четырех групп:

  • три ноды менеджеров,
  • дашборды,
  • первая группа датанод, до 10 штук (например, для горячего хранения),
  • вторая группа датанод, до 10 штук (например, для холодного хранения).

Рассмотрим каждую группу отдельно.

Подробное описание того, как все устроено под капотом — тема для отдельной статьи. Если вам интересно почитать об этом подробнее, дайте знать в комментариях. А пока тезисно перечислю, что делает каждая группа нод.

Ноды-менеджеры

Это обязательная к использованию группа, которая отвечает за управление, координацию и работоспособность кластера, а также за балансировку нагрузки. Вот что конкретно делает группа:

  • управляет состоянием кластера: поддерживает и распространяет метаданные о состоянии всех узлов, отслеживает добавления/удаления узлов и своевременное обновление состояния кластера, управляет индексами, включая их создание, удаление и обновление;
  • распределяет данные и задачи: контролирует распределение шардов (фрагментов индексов) между узлами кластера, перераспределяет их в случае выхода узла из строя или его добавления;
  • обеспечивает отказоустойчивость: автоматически обнаруживает отказы узлов и инициирует процедуры восстановления, координируют репликацию данных;
  • распределяет нагрузку: анализирует и обеспечивает равномерную обработку запросов и операций записи;
  • обрабатывает операции управления: выполняет административные операции (создание индексов, управление настройками, закрытие/открытие индексов), реализует обновления и миграции без прерывания работы кластера;
  • координирует выбор Master Election: в кластерах с несколькими менеджерами один из них выбирается в качестве основного (Master node) и выполняет критические задачи, включая принятие решений о распределении шард и управление метаданными. Группа менеджеров координирует выбор нового мастера в случае сбоя текущего.
  • выполняет мониторинг и сбор метрик: собирает данные о состоянии кластера и предоставляет их для анализа и диагностики, например, в OpenSearch Dashboards.

Дашборды

Это опциональная к использованию группа в кластере. Она отвечает за предоставление веб-интерфейса визуализации данных и управление кластером через веб-панель. Эти узлы оптимизированы для обработки запросов пользователей и выполнения задач, связанных с аналитикой и визуализацией.

Основные задачи группы дашбордов:

  • визуализация данных и мониторинга состояния кластера,
  • обработка пользовательских и аналитических запросов,
  • управление виджетами и дашбордами,
  • реализация веб-интерфейса для администрирования: управления пользователями, резервного копирования и т.д.

Дашборды не участвуют непосредственно в обработке данных, управлении шард-распределением или кластеризацией, поэтому их использование опционально и призвано просто упростить пользователю работу с OpenSearch API.

Группа датанод, или Data Nodes

Это основной компонент кластера, который выполняет ключевые задачи, связанные с индексированием, шардированием, репликацией и обработкой запросов. В кластере OpenSearch группа датанод отвечает за хранение, управление и обработку данных. Рассмотрим ее задачи подробнее.

  • Хранение данных: хранение индексов и шардов, управление репликами, оптимизация хранения данных.
  • Обработка запросов: выполнение операций чтения и записи, индексирование новых данных, распределение их по соответствующим шард-узлам.
  • Репликация данных: управление репликами шардов, перенаправление запросов на реплики при недоступности основной копии.
  • Обеспечение отказоустойчивости: автоматическое восстановление данных из реплик при сбое узла, обновление состояния кластера.
  • Взаимодействие с мастер-нодами: получение инструкций от нод менеджеров по размещению и управлению шард-репликами, передача информации о состоянии данных и шардов для поддержания актуального состояния кластера.

Для промышленного использования важно следить за состоянием датанод, включая использование CPU, памяти и дискового пространства, чтобы избежать перегрузки или снижения производительности.

Как начать использовать OpenSearch в Selectel


Мы постарались сделать так, чтобы использование нашей услуги было максимально простым. Чтобы приступить к работе с OpenSearch, выполните несколько шагов.

  1. Зайдите в панель управления и перейдите в раздел Продукты → Облачные базы данных.

OpenSearch как сервис: обзор и тривиальный пример использования на Python - 4

  1. Выберите подходящие вам регион и пул.
  2. В разделе СУБД выберите OpenSearch.
  3. Выберите приватную сеть или создайте новую. Опциональный шаг: выберите группу нод, в которой будете использовать публичные адреса.
  4. Выберите конфигурацию для каждой группы нод. Все ноды внутри этой группы будут иметь одинаковую конфигурацию.
  5. Затем нажмите Создать кластер.

OpenSearch как сервис: обзор и тривиальный пример использования на Python - 5

Создание кластера.

  1. Подключите источники данных и настройте индексирование логов, используя OpenSearch API.
  2. Визуализируйте данные в OpenSearch Dashboard.

OpenSearch как сервис: обзор и тривиальный пример использования на Python - 6

Листинг кластеров.

OpenSearch как сервис: обзор и тривиальный пример использования на Python - 7

Настройки кластера.

Как использовать OpenSearch с Python


В нашем тривиальном примере будем использовать библиотеку opensearch-py. Вот пример кода для индексации и поиска данных:

from opensearchpy import OpenSearch
host = 'your-opensearch-endpoint'
port = 9200
auth = ('user', 'password')
client = OpenSearch(
    hosts=[{'host': host, 'port': port}],
    http_auth=auth,
    use_ssl=True,
    verify_certs=False
)
# Создание индекса
index_name = "logs"
client.indices.create(index=index_name, ignore=400)
# Добавление документа
doc = {"message": "Ошибка в системе", "timestamp": "2025-02-10T12:00:00"}
client.index(index=index_name, body=doc)
# Поиск по индексу
query = {"query": {"match": {"message": "Ошибка"}}}
response = client.search(index=index_name, body=query)
print(response)

Этот код демонстрирует, как подключиться к кластеру OpenSearch, создать индекс, добавить документ и выполнить поиск.

Подключение к OpenSearch Dashboard


OpenSearch Dashboards — это веб-интерфейс для визуализации данных и управления кластерами OpenSearch.

Подключение с использованием web-интрфейса

Получите URL-адрес OpenSearch Dashboards

После развертывания Managed OpenSearch в Selectel вы можете получить ссылку несколькими способами.

1. Нажать на копку дашборда на листинге/списке кластеров. В соседней вкладке откроется дашборд. Все.

OpenSearch как сервис: обзор и тривиальный пример использования на Python - 8

2. Можно зайти в настройки кластера, на вкладку Подключение. Там выбрать дашборд-группу и нужный IP-адрес. Если подклчаетесь из облака, например из виртуальной машины, выбирайте приватный IP. Но в 99% случаев подключения происходят из интернета. Разумеется, для этого публичный IP-адрес должен быть заранее прикреплен к дашборд-группе.

OpenSearch как сервис: обзор и тривиальный пример использования на Python - 9

OpenSearch как сервис: обзор и тривиальный пример использования на Python - 10

3. Скопируйте IP-адрес и вставьте его в адресную строку браузера:

OpenSearch как сервис: обзор и тривиальный пример использования на Python - 11

Авторизуйтесь в Dashboards

Перейдите по указанному URL в браузере. На экране входа введите:

  • логин (admin, если не изменен),
  • пароль (задается при создании кластера, его нельзя посмотреть в панели управления, но можно поменять).
OpenSearch как сервис: обзор и тривиальный пример использования на Python - 12

Проверьте подключение к OpenSearch

После входа в Dashboards:

  • перейдите в ManagmentDev ToolsConsole,
  • выполните тестовый запрос GET _cluster/health.

    Если подключение успешно, вы увидите информацию о статусе кластера.

    OpenSearch как сервис: обзор и тривиальный пример использования на Python - 13

    Подключение к Dashboard используя REST API

    Для подключения к Dashboard необязательно использовать браузер, можно работать через API. Для этого потребуется:

    • IP-адрес (приавтный или публичный в зависимости от того, откуда мы подключаемся),
    • логин и пароль.

    Вот так можно подключится к дашборду и посмотреть статус кластера:

    curl -u 'ЛОГИН:пароль' -X GET "https://188.124.39.188/api/status"
    

    Ответом мы получим JSON-ответ от API, содержащий статус системы OpenSearch Dashboards.

    В ближайшее время мы планируем интегрировать OpenSearch с другими сервисами Selectel, добавить поддержку HighFreq и Dedicated аппаратных платформ и новых функций. А пока, если у вас остались вопросы, приглашаю задать их в комментариях.

Автор: GrishinAlex

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js