Чтобы защитить себя от потери данных, Elasticsearch имеет различные функции, которые позволяют гарантировать доступность данных даже в случаях сбоя данных.
Некоторые из способов, которыми Elasticsearch использует для обеспечения доступности данных, включают:
- Кросс-кластерная репликация - функция, позволяющая реплицировать данные в набор подчиненных кластеров; ведомый кластер - это резервный кластер, используемый в случае отказа основного кластера.
- Другой метод, который Elasticsearch использует для предотвращения данных с помощью резервных копий, также называемый моментальными снимками кластера. При необходимости вы можете использовать эти снимки для восстановления данных на совершенно новом кластере.
В этом руководстве показано, как создавать моментальные снимки кластера, которые помогут вам быть готовыми к возникновению необратимого сбоя данных.
Давайте начнем.
Что такое моментальный снимок Elasticsearch?
Как уже упоминалось, эластичный моментальный снимок - это резервная копия работающего кластера Elasticsearch. Этот снимок может быть всего кластера или определенных индексов и потоков данных в определенном кластере.
Как вы вскоре узнаете, плагин репозитория управляет снимками состояния Elasticsearch. Эти снимки можно хранить в различных местах хранения, определенных плагином. К ним относятся локальные системы и удаленные системы, такие как GCP Storage, Amazon EC2, Microsoft Azure и многие другие.
Как создать репозиторий моментальных снимков Elasticsearch
Прежде чем мы углубимся в создание моментальных снимков Elasticsearch, нам необходимо создать репозиторий моментальных снимков, потому что многие службы Elasticsearch используют Snapshot API для выполнения этих задач.
Вот некоторые из задач, которые выполняет Snapshot API:
- Поместите репозиторий снимков
- Проверить репозиторий снимков
- Получить хранилище снимков
- Удалить хранилище снимков
- Очистить хранилище снимков
- Создать снимок
- Клонировать снимок
- Получить снимок
- Получить статус снимка
- Восстановить снимок
- Удалить снимок
Чтобы создать репозиторий снимков, мы используем конечную точку API _snapshot, за которой следует имя, которое мы хотим присвоить репозиторию снимков. Рассмотрим запрос ниже, который создает репозиторий с именем backup_repo
PUT / _snapshot / backup_repo"тип": "фс",
"настройки":
"местоположение": "/ главная / корень / резервные копии",
"compress": true
Вот команда cURL для вышеуказанного запроса:
curl -XPUT "http: // localhost: 9200 / _snapshot / backup_repo" -H 'Content-Type: application / json' -d '"type": "fs", "settings": "location": "/ home / root / backups "," compress ": true 'Чтобы передать путь к репозиторию моментальных снимков, вы должны сначала добавить системный путь или родительский каталог к пути.запись репо в elasticsearch.yml
Тропинка.Запись репо должна выглядеть примерно так:
дорожка.репо: [«/ home / root / backups»]Вы можете найти файл конфигурации Elasticsearch, расположенный в / etc / elasticsearch / elasticsearch.yml
ПРИМЕЧАНИЕ: После добавления пути.репо, вам может потребоваться перезапустить кластеры Elasticsearch. Кроме того, значения, поддерживаемые для пути.репо может сильно отличаться в зависимости от платформы, на которой запущен Elasticsearch.
Как просмотреть репозиторий снимков
Чтобы подтвердить успешное создание репозитория моментальных снимков, используйте запрос GET с конечной точкой _snapshot как:
ПОЛУЧИТЬ / _snapshot / backup_repoВы также можете использовать следующую команду cURL:
curl -XGET "http: // localhost: 9200 / _snapshot / backup_repo"Это должно отображать информацию о репозитории резервных копий, например:
"backup_repo":
"тип": "фс",
"настройки" :
"compress": "true",
"location": "" "/ home / root / backups" ""
Если у вас есть несколько репозиториев моментальных снимков и вы не помните их имя, вы можете опустить имя репо и вызвать конечную точку _snapshot, чтобы вывести список всех существующих репозиториев.
GET / _snapshot или cURL curl -XGET http: // localhost: 9200 / _snapshot
Как создать снимок Elasticsearch
Создание снимка Elasticsearch для определенного репозитория снимков выполняется с помощью API создания снимков. API требует имя репозитория снимков и имя снимка.
ПРИМЕЧАНИЕ: В одном репозитории моментальных снимков может быть несколько снимков одних и тех же кластеров, если они имеют уникальные идентификаторы / имена.
Рассмотрим следующий запрос на добавление снимка с именем snapshot_2021 в репозиторий backup_repo.
PUT / _snapshot / backup_repo / snapshot_2021Чтобы использовать cURL, используйте команду:
curl -XPUT «http: // localhost: 9200 / _snapshot / backup_repo / snapshot_2021»Команда должна вернуть ответ от Elasticsearch с 200 OK и принять: true
"принято": верно
Поскольку он не указывает, какие потоки данных и индексы вы хотите скопировать, вызов вышеуказанного запроса создает резервные копии всех данных и состояния кластера. Чтобы указать, какие потоки данных и индексы для резервного копирования, добавьте это в тело запроса.
Рассмотрим следующий запрос, который выполняет резервное копирование .индекс kibana (системный индекс) и указывает, какой пользователь авторизовал снимок и причину.
PUT / _snapshot / backup_repo / snapshot_2"индексы": ".кибана ",
"ignore_unavailable": правда,
"include_global_state": правда,
"метаданные":
"take_by": "elasticadmin",
«Pted_because »:« Ежедневное резервное копирование »
Команда cURL для этого:
curl -XPUT "http: // localhost: 9200 / _snapshot / backup_repo / snapshot_2" -H 'Content-Type: application / json' -d '"index": ".kibana "," ignore_unavailable ": true," include_global_state ": true," metadata ": " take_by ":" elasticadmin "," loaded_because ":" Ежедневное резервное копирование " 'Ignore_unavailable устанавливает логическое состояние, которое возвращает ошибку, если какие-либо потоки данных или индексы, указанные в моментальном снимке, отсутствуют или закрыты.
Параметр include_global_state сохраняет текущее состояние кластера, если true. Некоторая сохраненная информация о кластере включает:
- Параметры постоянного кластера
- Шаблоны индекса
- Устаревшие шаблоны индекса
- Приемные трубопроводы
- Политики жизненного цикла ILM
ПРИМЕЧАНИЕ: Вы можете указать несколько индексов через запятую.
Обычным аргументом, используемым с конечной точкой _snapshot, является wait_for_completion, логическое значение, определяющее, должен ли (true) или нет (false) запрос возвращаться сразу после инициализации снимка (по умолчанию) или ждать завершения снимка.
Например:
PUT / _snapshot / backup_repo / snapshot_3?wait_for_completion = истина"индексы": ".кибана ",
"ignore_unavailable": правда,
"include_global_state": ложь,
"метаданные":
"take_by": "elasticadmin",
«Take_because»: «Еженедельное резервное копирование»
Команда cURL:
curl -XPUT "http: // localhost: 9200 / _snapshot / backup_repo / snapshot_3?wait_for_completion = true "-H 'Content-Type: application / json' -d '" index ":".kibana "," ignore_unavailable ": true," include_global_state ": false," metadata ": " Take_by ":" elasticadmin ", "pted_because": "Еженедельное резервное копирование" 'Если для параметра wait_for_completion установлено значение true, вы получите результат, аналогичный показанному ниже:
"снимок":
"снимок": "снимок_3",
«uuid»: «tQUHyofIRnGMMtw0AGBACQ»,
"version_id": 7100299,
"версия": "7.10.2 ",
"индексы": [
".kibana_1 "
],
"потоки_данных": [],
"include_global_state": ложь,
"метаданные":
"take_by": "elasticadmin",
«Take_because»: «Еженедельное резервное копирование»
,
"состояние": "УСПЕХ",
"start_time": "2021-01-19T13: 36: 59.615Z ",
"start_time_in_millis": 1611063419615,
"end_time": "2021-01-19T13: 37: 00.433Z ",
"end_time_in_millis": 1611063420433,
«duration_in_millis»: 818,
"неудачи": [],
"shards":
«всего»: 1,
"не удалось": 0,
«успешно»: 1
Как просматривать снимки
API снимков GET обрабатывает функциональность снимков представления.
Все, что вам нужно передать в запросе, - это репозиторий снимков и имя снимка, детали которого вы хотите просмотреть.
Снимок должен отвечать подробностями об указанном снимке. Эти детали включают:
- Значения времени начала и окончания
- Версия Elasticsearch, создавшая снимок
- Список включенных индексов
- Текущее состояние снимка
- Список сбоев, произошедших во время снэпшота
Например, чтобы просмотреть подробную информацию о созданном выше снимке snapshot_3, используйте запрос, показанный ниже:
GET / _snapshot / backup_repo / snapshot_3Чтобы использовать cURL, используйте команду ниже:
[cc lang = "text" width = "100%" height = "100%" escaped = "true" theme = "blackboard" nowrap = "0"]
curl -XGET «http: // localhost: 9200 / _snapshot / backup_repo / snapshot_3»
Запрос должен вернуть ответ с подробностями снимка как:
"снимки": [
"снимок": "снимок_3",
«uuid»: «tQUHyofIRnGMMtw0AGBACQ»,
"version_id": 7100299,
"версия": "7.10.2 ",
"индексы": [
".kibana_1 "
],
"потоки_данных": [],
"include_global_state": ложь,
"метаданные":
"take_by": "elasticadmin",
«Take_because»: «Еженедельное резервное копирование»
,
"состояние": "УСПЕХ",
"start_time": "2021-01-19T13: 36: 59.615Z ",
"start_time_in_millis": 1611063419615,
"end_time": "2021-01-19T13: 37: 00.433Z ",
"end_time_in_millis": 1611063420433,
«duration_in_millis»: 818,
"неудачи": [],
"shards":
«всего»: 1,
"не удалось": 0,
«успешно»: 1
]
Вы также можете настроить тело запроса, чтобы получить конкретную информацию о снимке. Однако мы пока не будем это рассматривать.
Допустим, вы хотите просмотреть информацию обо всех снимках в определенном хранилище снимков; в этом случае вы можете передать подстановочный знак звездочки в запросе как:
ПОЛУЧИТЬ / _snapshot / backup_repo / *Команда cURL для этого:
curl -XGET «http: // localhost: 9200 / _snapshot / backup_repo / *»Ответ представляет собой подробный дамп всех снимков в этом репозитории как:
"снимки": [
"снимок": "снимок_2021",
"uuid": "7CFigHzvRtyZW07c60d2iw",
"version_id": 7100299,
"версия": "7.10.2 ",
"индексы": [
"my_index",
"single_index_with_body",
"my_index_2",
"single_index",
".kibana_1 ",
"контрольная работа"
],
"потоки_данных": [],
"include_global_state": правда,
"состояние": "УСПЕХ",
"start_time": "2021-01-19T13: 28: 48.172Z ",
"start_time_in_millis": 1611062928172,
"end_time": "2021-01-19T13: 28: 50.831Z ",
"end_time_in_millis": 1611062930831,
«duration_in_millis»: 2659,
"неудачи": [],
"shards":
«всего»: 7,
"не удалось": 0,
«успешно»: 7
,
"снимок": "снимок_2",
"uuid": "w58IrYmORAub8VC7cg04Wg",
"version_id": 7100299,
"версия": "7.10.2 ",
"индексы": [
".kibana_1 "
],
"потоки_данных": [],
"include_global_state": ложь,
"метаданные":
"take_by": "elasticadmin",
"created_because": "Ежедневное резервное копирование"
,
"состояние": "УСПЕХ",
"start_time": "2021-01-19T13: 33: 34.482Z ",
"start_time_in_millis": 1611063214482,
"end_time": "2021-01-19T13: 33: 35.921Z ",
"end_time_in_millis": 1611063215921,
«duration_in_millis»: 1439,
"неудачи": [],
"shards":
«всего»: 1,
"не удалось": 0,
«успешно»: 1
,
"снимок": "снимок_3",
«uuid»: «tQUHyofIRnGMMtw0AGBACQ»,
"version_id": 7100299,
"версия": "7.10.2 ",
"индексы": [
".kibana_1 "
],
"потоки_данных": [],
"include_global_state": ложь,
"метаданные":
"take_by": "elasticadmin",
«Take_because»: «Еженедельное резервное копирование»
,
"состояние": "УСПЕХ",
"start_time": "2021-01-19T13: 36: 59.615Z ",
"start_time_in_millis": 1611063419615,
"end_time": "2021-01-19T13: 37: 00.433Z ",
"end_time_in_millis": 1611063420433,
«duration_in_millis»: 818,
"неудачи": [],
"shards":
«всего»: 1,
"не удалось": 0,
«успешно»: 1
]
Подстановочные знаки очень полезны для фильтрации конкретной информации о снимках.
Как удалить снимок
Удалить снимок очень просто: все, что вам нужно сделать, это использовать запрос DELETE как:
УДАЛИТЬ / _snapshot / backup_repo / snapshot_2021 /Команда cURL:
curl -XDELETE «http: // localhost: 9200 / _snapshot / backup_repo / snapshot_2021 /»Ответ должен быть подтвержден: правда
«Подтверждено»: верно
Если снимок не существует, вы получите код состояния 404 и ошибку отсутствия снимка как:
"ошибка" :
"первопричина" : [
"тип": "snapshot_missing_exception",
"причина": "[backup_repo: snapshot_2021] отсутствует"
],
"тип": "snapshot_missing_exception",
"причина": "[backup_repo: snapshot_2021] отсутствует"
,
«статус»: 404
Заключение
В этом руководстве мы обсудили, как создавать снимки состояния Elasticsearch с помощью Snapshot API. То, что вы узнали, должно быть достаточно, чтобы позволить вам создавать репозиторий снимков, просматривать репозитории снимков, создавать, просматривать и удалять снимки. Несмотря на то, что с помощью API можно выполнить настройки, знаний этого руководства должно быть достаточно, чтобы вы начали.
Спасибо за чтение.