Настройка политики холодного хранилища в Yandex Managed Service for OpenSearch
С помощью политик можно автоматически выполнять некоторые операции с индексами. Например, чтобы оптимизировать использование хранилища, вы можете установить политику, которая будет перемещать в определенную группу хостов «холодные» данные, а затем перепаковывать эти данные с помощью кодека, который обеспечивает большую степень сжатия.
Чтобы настроить такую политику:
- Подготовьте облако к работе.
- Подготовьте инфраструктуру.
- Создайте политику.
- Прикрепите политику к индексу.
- Проверьте работу политики.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
- Кластер Managed Service for OpenSearch: использование вычислительных ресурсов и объем хранилища (см. тарифы Managed Service for OpenSearch).
- Публичные IP-адреса (см. тарифы Virtual Private Cloud).
Подготовьте инфраструктуру
-
Подготовьте кластер Managed Service for OpenSearch:
ВручнуюС помощью Terraform-
Создайте кластер Managed Service for OpenSearch любой подходящей конфигурации со следующими настройками:
- Две или более группы хостов с ролью
DATA. Двум группам присвойте именаhotиcold. - Публичный доступ к любой группе хостов.
- Две или более группы хостов с ролью
-
Если вы используете группы безопасности в кластере, убедитесь, что они допускают подключение к кластеру Managed Service for OpenSearch.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации opensearch-cold-storage-policy.tf
. В файле описаны:- сеть;
- подсети;
- группа безопасности и правила, необходимые для подключения к кластеру Managed Service for OpenSearch;
- кластер Managed Service for OpenSearch.
-
Укажите в файле
opensearch-cold-storage-policy.tfпеременные:version— версия OpenSearch.admin_password— пароль администратора OpenSearch.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
-
-
Проверьте подключение к кластеру с помощью утилиты cURL
:curl \ --user admin:<пароль> \ --cacert ~/.opensearch/root.crt \ --request GET 'https://<FQDN_хоста_OpenSearch_с_публичным_доступом>:9200/'FQDN хоста можно получить со списком хостов в кластере.
При успешном подключении будет выведено сообщение вида:
{ "name" : "....mdb.yandexcloud.net", "cluster_name" : "...", "cluster_uuid" : "...", "version" : { "distribution" : "opensearch", ... }, "tagline" : "The OpenSearch Project: https://opensearch.org/" }
Создайте политику
Создайте политику, которая переводит «горячие» данные в «холодные», а затем в архив:
curl \
--user admin:<пароль> \
--cacert ~/.opensearch/root.crt \
--header 'Content-Type: application/json' \
--request PUT 'https://<адрес_хоста_OpenSearch_с_публичным_доступом>:9200/_plugins/_ism/policies/archive_policy' \
--data '
{
"policy": {
"description": "Example archive policy",
"default_state": "hot",
"schema_version": 1,
"states": [
{
"name": "hot",
"actions": [
{
"allocation": {
"require": { "groupname": "hot" }
}
}
],
"transitions": [
{
"state_name": "cold",
"conditions": {
"min_index_age": "1h"
}
}
]
},
{
"name": "cold",
"actions": [
{
"allocation": {
"require": { "groupname": "cold" }
}
}
],
"transitions": [
{
"state_name": "archive",
"conditions": {
"min_index_age": "2h"
}
}
]
},
{
"name": "archive",
"actions": [
{
"repack": {
"new_codec": "lzma"
}
}
]
}
],
"ism_template": {
"index_patterns": ["log*"],
"priority": 100
}
}
}'
Где:
min_index_age— возраст индекса, по достижении которого будет создан новый индекс. Рекомендуемое значение — 30 дней (30d).index_patterns— шаблон имени для нового индекса.new_codec— название кодека, которым будут переупакованы данные.
Чтобы быстро проверить работу политики, в примере запроса установлены значения min_index_age:
- Для состояния
hot— 1 час. По истечении этого времени данные будут переведены в «холодные». - Для состояния
cold— 2 часа. По истечении этого времени данные будут переупакованы кодекомlzma(перевод в архив).
Вы можете указать меньшие значения, но не менее 5 минут — это время по умолчанию, через которое повторяется проверка условий политики.
Прикрепите политику к индексу
-
Создайте индекс
log-000001:curl \ --user admin:<пароль> \ --cacert ~/.opensearch/root.crt \ --header 'Content-Type: application/json' \ --request PUT 'https://<адрес_хоста_OpenSearch_с_публичным_доступом>:9200/log-000001?pretty' \ --data ' { "settings": { "index" : { "routing" : { "allocation" : { "require" : { "groupname" : "hot" } } } } } }' -
Проверьте, прикреплена ли политика к индексу:
curl \ --user admin:<пароль> \ --cacert ~/.opensearch/root.crt \ --header 'Content-Type: application/json' \ --request GET 'https://<адрес_хоста_OpenSearch_с_публичным_доступом>:9200/_plugins/_ism/explain/log-000001?pretty'В результатах будет выведено сообщение вида:
{ "log-000001" : { "index.plugins.index_state_management.policy_id" : "archive_policy", "index.opendistro.index_state_management.policy_id" : "archive_policy", "index" : "log-000001", "index_uuid" : "...", "policy_id" : "archive_policy", "enabled" : true }, "total_managed_indices" : 1 }
Проверьте работу политики
-
Добавьте в индекс документ:
curl \ --user admin:<пароль> \ --cacert ~/.opensearch/root.crt \ --header 'Content-Type: application/json' \ --request POST 'https://<адрес_хоста_OpenSearch_с_публичным_доступом>:9200/log-000001/_doc?pretty' \ --data ' { "num": "101", "name": "Valya", "age": "25" }' -
Через 5 минут после создания документа получите список шардов индекса:
curl \ --user admin:<пароль> \ --cacert ~/.opensearch/root.crt \ --header 'Content-Type: application/json' \ --request GET 'https://<адрес_хоста_OpenSearch_с_публичным_доступом>:9200/_cat/shards/log-000001?pretty'В результатах будут выведены шарды индекса
log-000001и адреса хостов, на которых располагаются шарды:log-000001 0 r STARTED 1 5.2kb 10.2.0.35 rc1b-lgio8pjp********.mdb.yandexcloud.net log-000001 0 p STARTED 1 5.2kb 10.1.0.4 rc1a-g36ksm4q********.mdb.yandexcloud.net -
Убедитесь, что шард расположен в группе хостов
hot. Для этого получите список хостов с атрибутами:curl \ --user admin:<пароль> \ --cacert ~/.opensearch/root.crt \ --header 'Content-Type: application/json' \ --request GET 'https://<адрес_хоста_OpenSearch_с_публичным_доступом>:9200/_cat/nodeattrs/?v&h=node,attr,value&pretty'В результатах будут содержаться строки:
node attr value rc1b-lgio8pjp********.mdb.yandexcloud.net groupname hot rc1a-g36ksm4q********.mdb.yandexcloud.net groupname hot ... -
Через час после создания индекса снова получите список шардов для индекса
log-000001:curl \ --user admin:<пароль> \ --cacert ~/.opensearch/root.crt \ --header 'Content-Type: application/json' \ --request GET 'https://<адрес_хоста_OpenSearch_с_публичным_доступом>:9200/_cat/shards/log-000001?pretty'1 час — это условие политики для перемещения индекса в группу хостов с именем
cold.В результатах будут выведены шарды индекса
log-000001и новые адреса хостов, на которых располагаются шарды:log-000001 0 r STARTED 1 5.2kb 10.2.0.22 rc1b-is77nbdv********.mdb.yandexcloud.net log-000001 0 p STARTED 1 5.2kb 10.1.0.25 rc1a-qocaisq1********.mdb.yandexcloud.net -
Снова запросите список хостов с атрибутами:
curl \ --user admin:<пароль> \ --cacert ~/.opensearch/root.crt \ --header 'Content-Type: application/json' \ --request GET 'https://<адрес_хоста_OpenSearch_с_публичным_доступом>:9200/_cat/nodeattrs/?v&h=node,attr,value&pretty'В результатах будут содержаться строки:
node attr value rc1b-is77nbdv********.mdb.yandexcloud.net groupname cold rc1a-qocaisq1********.mdb.yandexcloud.net groupname cold ... -
Еще через час снова получите список шардов для индекса
log-000001:curl \ --user admin:<пароль> \ --cacert ~/.opensearch/root.crt \ --header 'Content-Type: application/json' \ --request GET 'https://<адрес_хоста_OpenSearch_с_публичным_доступом>:9200/_cat/shards/log-000001?pretty'2 часа — это условие политики для применения нового кодека (перевод в архив).
В результатах будут выведены шарды индекса
log-000001и адреса хостов, на которых располагаются шарды:log-000001 0 r STARTED 1 4.8kb 10.2.0.22 rc1b-is77nbdv********.mdb.yandexcloud.net log-000001 0 p STARTED 1 4.8kb 10.1.0.25 rc1a-qocaisq1********.mdb.yandexcloud.netПри этом размер шардов будет меньшим, так как данные были переупакованы новым кодеком с большей степенью сжатия.
-
Получите настройки индекса и убедитесь, что в них указан кодек
lzma:curl \ --user admin:<пароль> \ --cacert ~/.opensearch/root.crt \ --header 'Content-Type: application/json' \ --request GET 'https://<адрес_хоста_OpenSearch_с_публичным_доступом>:9200/log-000001/_settings?pretty'Результат:
{ "log-000001" : { "settings" : { "index" : { ... "codec" : "lzma", "routing" : { "allocation" : { "require" : { "groupname" : "cold" } } }, ... } } } }
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy -
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-