Передача данных из эндпоинта-источника OpenSearch
С помощью сервиса Yandex Data Transfer вы можете переносить данные поиска и аналитики из базы OpenSearch и реализовывать различные сценарии переноса, обработки и трансформации данных. Для реализации трансфера:
- Ознакомьтесь с возможными сценариями передачи данных.
- Подготовьте базу данных OpenSearch к трансферу.
- Настройте эндпоинт-источник в Yandex Data Transfer.
- Настройте один из поддерживаемых приемников данных.
- Создайте и запустите трансфер.
- Выполняйте необходимые действия по работе с базой и контролируйте трансфер.
- При возникновении проблем, воспользуйтесь готовыми решениями по их устранению.
Сценарии передачи данных из OpenSearch
Миграция — перенос данных из одного хранилища в другое. Часто это перенос базы из устаревших локальных баз в управляемые облачные.
Подробное описание возможных сценариев передачи данных в Yandex Data Transfer см. в разделе Практические руководства.
Подготовка базы данных источника
Если вы не планируете использовать для подключения к внешнему кластеру сервис Cloud Interconnect или VPN, разрешите подключения к такому кластеру из интернета с IP-адресов, используемых сервисом Data Transfer.
Подробнее о настройке сети для работы с внешними ресурсами см. в концепции.
Настройка эндпоинта-источника OpenSearch
При создании или изменении эндпоинта вы можете задать:
- Настройки подключения к кластеру Yandex Managed Service for OpenSearch или пользовательской инсталляции, в т. ч. на базе виртуальных машин Yandex Compute Cloud. Эти параметры обязательные.
- Дополнительные параметры.
Кластер Managed Service for OpenSearch
Важно
Для создания или редактирования эндпоинта управляемой базы данных вам потребуется роль managed-opensearch.viewer
или примитивная роль viewer
, выданная на каталог кластера этой управляемой базы данных.
Подключение с указанием идентификатора кластера в Yandex Cloud.
-
Тип подключения — выберите вариант подключения к кластеру:
-
Ручная настройка — позволяет задать настройки подключения вручную.
Выберите тип инсталляции Кластер Managed Service for OpenSearch и задайте настройки:
-
Кластер Managed Service for OpenSearch — выберите кластер, к которому необходимо подключиться.
- Пользователь — укажите имя пользователя, под которым сервис Data Transfer будет подключаться к кластеру.
- Пароль — укажите пароль пользователя для доступа к кластеру.
-
-
Connection Manager — позволяет подключиться к кластеру через Yandex Connection Manager:
-
Выберите каталог, в котором находится кластер Managed Service for OpenSearch.
-
Выберите тип инсталляции Кластер управляемой БД и задайте настройки:
- Кластер управляемой БД — выберите кластер, к которому необходимо подключиться.
- Подключение — выберите подключение в Connection Manager или создайте его.
Важно
Чтобы использовать подключение из Connection Manager, у пользователя должны быть права доступа не ниже
connection-manager.user
к этому подключению. -
-
-
Группы безопасности — выберите облачную сеть для размещения эндпоинта и группы безопасности для сетевого трафика.
Это позволит применить к ВМ и кластерам в выбранной сети указанные правила групп безопасности без изменения настроек этих ВМ и кластеров. Подробнее см. в разделе Сеть в Yandex Data Transfer.
Пользовательская инсталляция
Подключение к узлам с явным указанием сетевых адресов и портов.
-
Тип подключения — выберите вариант подключения к базе данных:
-
Ручная настройка — позволяет задать настройки подключения вручную.
Выберите тип инсталляции Пользовательская инсталляция и задайте настройки:
-
Узлы с данными — нажмите на значок
, чтобы добавить новый узел с данными. Для каждого узла укажите:- Хост — IP-адрес или FQDN хоста с ролью
DATA
, к которому необходимо подключиться. - Порт — номер порта, который сервис Data Transfer будет использовать для подключения к хосту с ролью
DATA
.
- Хост — IP-адрес или FQDN хоста с ролью
-
SSL — выберите, если используется безопасное соединение SSL.
-
Сертификат CA — загрузите файл сертификата или добавьте его содержимое в текстовом виде, если требуется шифрование передаваемых данных, например, для соответствия требованиям PCI DSS.
Важно
Если не добавить сертификат, трансфер может завершиться ошибкой.
-
Идентификатор подсети — выберите или создайте подсеть в нужной зоне доступности. Трансфер будет использовать эту подсеть для доступа к базе данных.
Если значение в этом поле задано для обоих эндпоинтов, то обе подсети должны быть размещены в одной зоне доступности.
Если не указать подсеть, при активации трансфера может возникнуть ошибка.
-
Пользователь — укажите имя пользователя, под которым сервис Data Transfer будет подключаться к базе данных.
-
Пароль — укажите пароль пользователя для доступа к базе данных.
-
-
Connection Manager — позволяет подключиться к базе данных через Yandex Connection Manager:
-
Выберите каталог, в котором создано подключение Connection Manager.
-
Выберите тип инсталляции Пользовательская инсталляция и задайте настройки:
-
Подключение — выберите подключение в Connection Manager или создайте его.
-
Идентификатор подсети — выберите или создайте подсеть в нужной зоне доступности. Трансфер будет использовать эту подсеть для доступа к базе данных.
Если значение в этом поле задано для обоих эндпоинтов, то обе подсети должны быть размещены в одной зоне доступности.
Если не указать подсеть, при активации трансфера может возникнуть ошибка.
-
Важно
Чтобы использовать подключение из Connection Manager, у пользователя должны быть права доступа не ниже
connection-manager.user
к этому подключению. -
-
-
Группы безопасности — выберите облачную сеть для размещения эндпоинта и группы безопасности для сетевого трафика.
Это позволит применить к ВМ и БД в выбранной сети указанные правила групп безопасности без изменения настроек этих ВМ и БД. Подробнее см. в разделе Сеть в Yandex Data Transfer.
Дополнительные настройки
- Перенести индекс с сопоставлением типов — выберите эту опцию, чтобы перенести типы данных с источника на приемник до начала трансфера. Если опция отключена, а схема индекса на приемнике не задана, то типы данных на приемнике будут определяться автоматически в процессе трансфера.
Важно
Если в индекс источника входят типы данных, которые не поддерживаются на приемнике, то включение этой опции может привести к ошибке при запуске трансфера. В этом случае отключите опцию и создайте схему индекса на приемнике вручную.
Настройка приемника данных
Настройте эндпоинт-приемник:
- OpenSearch;
- ClickHouse®;
- Greenplum®;
- Yandex Managed Service for YDB;
- Yandex Object Storage;
- Apache Kafka®;
- YDS;
Полный список поддерживаемых источников и приемников в Yandex Data Transfer см. в разделе Доступные трансферы.
После настройки источника и приемника данных создайте и запустите трансфер.
Решение проблем, возникающих при переносе данных
- Прерывание трансфера с ошибкой
- Дублирование документов на приемнике
- Превышение лимита максимального количества полей
- Прерывание трансфера с ошибкой mapper_parsing_exception
- Ошибка SSL is required
- Не удалось найти ни одной таблицы
См. полный список рекомендаций в разделе Решение проблем.
Прерывание трансфера с ошибкой
Тексты ошибок:
object field starting or ending with a [.] makes object resolution ambiguous <описание_поля>
Index -1 out of bounds for length 0
Трансфер прерывается из-за того что ключи в передаваемых документах невалидны для приемника OpenSearch. К невалидным относятся пустые ключи, а также ключи:
- состоящие из пробелов;
- состоящие из точек;
- с точкой в начале или конце;
- с точками, стоящими друг за другом;
- с точками, разделенными пробелами.
Решение:
В дополнительных настройках эндпоинта-приемника включите опцию Исправить невалидные ключи в документах и активируйте трансфер повторно.
Дублирование документов на приемнике
На приемнике возникают дубли документов при повторной передаче данных.
Все документы, передаваемые из одной таблицы источника, попадают в один индекс с именем <schemaName.tableName>
на приемнике. При этом по умолчанию приемник автоматически генерирует идентификаторы документов (_id
). В результате одинаковые документы получают разные идентификаторы и дублируются.
Дублирование не происходит, если в таблице источника или в правилах конвертации эндпоинта заданы первичные ключи. В этом случае идентификаторы документов генерируются на этапе трансфера с использованием значений первичных ключей.
Генерация происходит следующим образом:
- Если значение ключа содержит
.
, она экранируется\
:some.key
-->some\.key
. - Значения всех первичных ключей преобразуются в строку:
<some_key1>.<some_key2>.<...>
. - Полученная строка преобразуется функцией url.QueryEscape
. - Если длина итоговой строки не превышает 512 символов, то она используется в качестве
_id
. Если длина больше 512 символов, то она хешируется алгоритмом SHA-1 , и в качестве_id
используется полученный хеш.
В результате документы с одинаковыми первичными ключами получат одинаковый идентификатор при повторной передаче данных, и последний переданный документ перезапишет существующий.
Решение:
- Установите первичный ключ для одного или нескольких столбцов на источнике или в правилах конвертации эндпоинта.
- Запустите трансфер.
Превышение лимита максимального количества полей
Текст ошибки:
Limit of total fields [<значение_лимита>] has been exceeded
Трансфер прерывается, если количество колонок в базе данных источника превышает максимальное количество полей в индексах OpenSearch базы данных приемника.
Решение: увеличьте в базе данных приемника максимальное количество полей с помощью параметра index.mapping.total_fields.limit
.
Прерывание трансфера с ошибкой mapper_parsing_exception
Текст ошибки:
mapper_parsing_exception failed to parse field [details.tags] of type [text]
Трансфер прерывается из-за несовместимости типов данных на источнике и приемнике.
Решение: перенесите данные в новый индекс OpenSearch, в котором тип поля details
изменен на flat_object
.
-
Деактивируйте трансфер.
-
Создайте новый индекс в OpenSearch:
curl \ --user <имя_пользователя_OpenSearch>:<пароль> \ --header 'Content-Type: application/json' \ --request PUT 'https://<адрес_хоста_OpenSearch_с_ролью_DATA>:9200/<название_нового_индекса>/_settings' \ --data '{"index.mapping.total_fields.limit": 2000}'
-
Измените тип поля
details
:curl \ --user <имя_пользователя_OpenSearch>:<пароль> \ --header 'Content-Type: application/json' \ --request PUT 'https://<адрес_хоста_OpenSearch_с_ролью_DATA>:9200/<название_нового_индекса>/_mapping' \ --data ' { "properties": { "details": { "type": "flat_object" } } }'
-
Перенесите данные из исходного индекса в новый:
curl \ --user <имя_пользователя_OpenSearch>:<пароль> \ --header 'Content-Type: application/json' \ --request POST 'https://<адрес_хоста_OpenSearch_с_ролью_DATA>:9200/_reindex' \ --data ' { "source":{ "index":"<название_исходного_индекса>" }, "dest":{ "index":"<название_нового_индекса>" } }'
-
Удалите исходный индекс:
curl \ --user <имя_пользователя_OpenSearch>:<пароль> \ --header 'Content-Type: application/json' \ --request DELETE 'https://<адрес_хоста_OpenSearch_с_ролью_DATA>:9200/<название_исходного_индекса>'
-
Присвойте новому индексу псевдоним:
curl \ --user <имя_пользователя_OpenSearch>:<пароль> \ --header 'Content-Type: application/json' \ --request POST 'https://<адрес_хоста_OpenSearch_с_ролью_DATA>:9200/_aliases' \ --data ' { "actions": [ { "add": { "index": "<название_нового_псевдонима>", "alias": "<название_исходного_псевдонима>" } } ] }'
Ошибка SSL is required
Ошибка возникает при подключении к кластеру Managed Service for OpenSearch как к пользовательской инсталляции через FQDN хоста OpenSearch, если вы не включили опцию SSL в настройках эндпоинта. Кластер Managed Service for OpenSearch по умолчанию требует SSL-шифрование для подключений по FQDN хоста.
Ошибка может также возникнуть, если вы подключаетесь к пользовательской инсталляции OpenSearch, которая требует SSL.
Решение:
В настройках эндпоинта активируйте опцию SSL.
Для кластеров MDB и других источников, использующих сертификаты, выданные публичными CA, обычно не требуется загружать CA-сертификат.
Если ваш источник использует самоподписанный сертификат, загрузите CA-сертификат в соответствующее поле в настройках эндпоинта.
Не удалось найти ни одной таблицы
Текст ошибки:
Unable to find any tables
Ошибка может возникать, если в источнике нет доступных индексов либо у указанного пользователя нет прав на индексы.
Решение:
-
Проверьте наличие индекса. Убедитесь, что вы верно указали название индекса и в источнике действительно есть индекс, который вы собираетесь переносить.
-
Убедитесь, что пользователь имеет нужные права для работы с индексом.