Переход на Opensearch вручную¶
Переход с потерей данных¶
Установите Opensearch согласно инструкции по установке.
Перенесите настройки из файла elasticsearch.yml в opensearch.yml.
При необходимости обновите параметры DG:
org.universe.dg.search.cluster.nodes
,org.universe.dg.search.cluster.address
Поскольку данные не будут перенесены, выполните операцию переиндексации данных, а при наличии правил качества - операцию переприменения данных.
Важные примечания:
Если в качестве хранилища для аудита выбран поисковой движок, журнал событий будет утерян — его невозможно восстановить из БД, даже если она также указана в качестве хранилища.
Переход с переносом данных¶
Перед обновлением системы Юниверс необходимо сделать слепок индексов Elasticsearch. Рекомендуется выполнить этот шаг, чтобы иметь бэкап состояния поискового узла. Подробности см. в официальной документации Elaticsearch.
Слепок индексов¶
Снимите слепок Elasticsearch согласно инструкции "Резервное копирование поискового индекса".
Далее выполните обновление согласно инструкции "Переход с потерей данных" (см. выше).
Используйте слепок для восстановления данных в opensearch. Укажите путь к хранилищу в opensearch.yml:
path.repo: /mount/backups
Добавьте репозиторий в конфигурацию кластера. Пример выполнения из консоли с помощью утилиты curl:
$ curl -XPUT 'localhost:9200/_snapshot/universe_indices_backup' -d '{ "type" : "fs", "settings" : { "compress" : true, "location": "<путь к директории репозитория из настроек>/universe_indices_backup" } }'
Если путь к директории репозитория был указан в path.repo, его не требуется включать в вышеуказанную команду. В таком случае команда будет иметь вид:
curl -XPUT 'localhost:9200/_snapshot/universe_indices_backup' -d '{ "type" : "fs", "settings" : { "compress" : true, "location" : "universe_indices_backup" }}'
Проверьте успешность выполнения предыдущего шага (в результате выполнения команды на экране должны отобразится текущие настройки репозитория):
$ curl -XGET 'localhost:9200/_snapshot/universe_indices_backup'
Закройте текущие индексы:
$ curl -XPOST 'localhost:9200/_all/_close'
Количество частей (Shards) индекса в снапшоте и в кластере должны совпадать, в противном случае восстановление завершится с ошибкой. Требование не распространяется на пустые кластеры.
В случае, если имя текущих снапшотов неизвестно, используйте команду:
$ curl -XGET 'localhost:9200/_snapshot/_all'
Восстановите снапшот. Пример команды для снапшота с именем snapshot_1:
$ curl -XPOST 'localhost:9200/_snapshot/universe_indices_backup/snapshot_1/_restore'
Примечания:
Представленный вариант применим в т.ч, если Elasticsearch развернут в docker — достаточно пробросить локальное хранилище и конфигурационный файл через docker volume.
Фрагмент docker-compose для Opensearch:
volumes:
- dg-opensearch-data:/usr/share/opensearch/data
- ./hunspell:/usr/share/opensearch/config/hunspell/
- ./opensearch.yml:/usr/share/opensearch/config/opensearch.yml
- ./backups:/mount/backups
Миграция кластера¶
Представленный вариант подразумевает ручной перенос настроек и данных для каждого узла.
Доступно два варианта:
Остановить кластер, выполнить перенос для каждого узла и запустить весь кластер (cluster restart upgrade);
Поделать процесс для каждого узла отдельно — в этом случае поисковый движок будет активен во время обновления (rolling upgrade).
Установите Opensearch согласно инструкции по установке, при этом директории Elasticsearch не должны быть затерты.
Отключите аллоцирование шардов:
curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": "primaries" } } '
Остановите Elasticsearch на одном узле (rolling upgrade) или на всех (cluster restart upgrade):
sudo systemctl stop elasticsearch.service
Выполните переход на одном узле (rolling) или на всех (cluster restart):
Скопируйте данные и логи Elasticsearch (содержимое директорий data и logs) в аналогичные директории Opensearch. Например,
sudo cp -r /usr/share/elasticsearch/data /usr/share/opensearch/data && chown -R opensearch:opensearch
Портируйте настройки из elasticsearch.yml в opensearch.yml.
Запустите OpenSearch на одном узле (rolling) или на всех (cluster restart):
sudo systemctl start opensearch
Rolling - повторите шаги 3–5 до полного перехода всего кластера на OpenSearch.
Включите аллоцирование шардов обратно:
curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": "all" } } '
Шаг 3 может быть выполнен автоматически через утилиту opensearch-upgrade:
Установите Opensearch согласно инструкции по установке.
Отключите аллоцирование шардов:
curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": "primaries" } } '
Проверьте, что заданы переменные окружения: ES_HOME, ES_PATH_CONF, OPENSEARCH_HOME, OPENSEARCH_PATH_CONF.
Исполните утилиту от имени пользователя, запустившего Elasticsearch:
/usr/share/opensearch/bin/opensearch-upgrade
Остановите Elasticsearch на узле:
sudo systemctl stop elasticsearch.service
Запустите Opensearch на узле:
sudo systemctl start opensearch
Повторите шаги 3–6 до полного перехода на Opensearch.
Включите аллоцирование шардов обратно:
curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": "all" } } '
Сохранение данных аудита¶
Для сохранения данных аудита при переходе на Opensearch проделайте следующие действия:
Остановите приложение, если оно запущено, чтобы в данные не вносились изменения.
Создайте индекс
default_default_audit read-only
с помощью запроса:PUT http://OPEN_SEARCH_HOST:OPEN_SEARCH_PORT/default_default_audit/_settings { "settings": { "index.blocks.write": true } }
Клонируйте индекс
default_default_audit
с данными во временный индексdefault_default_audit_old_index_copy
с помощью запроса:PUT http://OPEN_SEARCH_HOST:OPEN_SEARCH_PORT/default_default_audit/_clone/default_default_audit_old_index_copy/
Проверьте, что индекс
default_default_audit_old_index_copy
создался и содержит все нужные данные.Удалите индекс
default_default_audit
с помощью запроса:DELETE http://OPEN_SEARCH_HOST:OPEN_SEARCH_PORT/default_default_audit
Запустите сервер с приложением и дождитесь выполнения запуска. Должен создаться новый индекс
default_default_audit
.Копируйте данные из копии индекса
default_default_audit_old_index_copy
в новый индексdefault_default_audit
.Если данных в журнале много, то копирование может занять значительное время. Данные будут постепенно переноситься в журнал, работа в системе в это время будет доступна.
Выполните запрос:
POST http://OPEN_SEARCH_HOST:OPEN_SEARCH_PORT/_reindex/
В теле запроса должен присутствовать следующий JSON:
{ "source": { "index": "default_default_audit_old_index_copy" }, "dest": { "index": "default_default_audit" } }
Проверьте, что данные перенеслись в индекс
default_default_audit
.Зайдите в раздел "Журнал" и проверьте наличие в журнале записей до обновления.
Опционально: Если шаги выполнены корректно, то можно удалить копию индекса
default_default_audit_old_index_copy
с помощью запроса:DELETE http://OPEN_SEARCH_HOST:OPEN_SEARCH_PORT/default_default_audit_old_index_copy