Резервное копирование и восстановление Elasticsearch: использование elasticdump
Резервное копирование и восстановление Elasticsearch: использование elasticdump

В мире управления данными резервное копирование и восстановление данных является главным приоритетом, особенно для такой мощной и сложной поисковой системы, как Elasticsearch. Резервное копирование можно использовать не только для аварийного восстановления, но оно также играет важную роль в таких сценариях, как миграция данных, тестирование или обновление.

В этом блоге мы сосредоточимся на том, как использовать очень практичный инструмент Elasticdump для резервного копирования и восстановления данных Elasticsearch. Мы рассмотрим резервное копирование и восстановление одного индекса, резервное копирование и восстановление всех индексов, а также резервное копирование и восстановление определенных префиксных индексов.

Примечание. Мой сценарий использования — синхронизировать данные из кластера A для миграции в кластер B.

Введение в Elasticdump

Elasticdump — это инструмент с открытым исходным кодом, который можно использовать для импорта и экспорта данных и сопоставлений, индексированных Elasticsearch. Elasticdump работает через интерфейс командной строки и управляет данными индекса Elasticsearch с помощью простого и интуитивно понятного набора инструкций.

Установить эластичный дамп

Elasticdump — это инструмент, основанный на Node.js, поэтому сначала вам необходимо убедиться, что Node.js установлен в вашей системе. Затем вы можете установить Elasticdump, используя следующую команду npm:

Язык кода:shell
копировать
npm install -g elasticdump

Резервное копирование и восстановление единого индекса

Ниже мы впервые покажем, как выполнить резервное копирование и восстановление одного индекса:

Резервное копирование одного индекса

Чтобы создать резервную копию определенного индекса, мы можем использовать следующую команду:

Язык кода:shell
копировать
elasticdump \
  --input=http://localhost:9200/INDEX \
  --output=/path/to/output/INDEX.json \
  --type=data

Эта команда будет индексироватьINDEXЭкспортируйте данные по указанному путиINDEX.jsonдокумент。

Для экземпляра Elasticsearch с учетной записью и паролем вы можете использовать следующий скрипт:

Язык кода:shell
копировать
elasticdump \
  --input=http://user:passwd@localhost:9200/INDEX \
  --output=/path/to/output/INDEX.json \
  --type=data

Ставка по умолчанию составляет100полоска,может пройтиlimit Измените количество экспорта по умолчанию:

Язык кода:shell
копировать
elasticdump \
  --input=http://user:passwd@localhost:9200/INDEX \
  --output=/path/to/output/INDEX.json \
  --type=data --limit 10000

Восстановить один индекс

Напротив,Если мы хотим Восстановить один индекс из ранее созданной резервной копии,Можно использовать следующие команды:

Язык кода:shell
копировать
elasticdump \
  --input=/path/to/output/INDEX.json \
  --output=http://localhost:9200/INDEX \
  --type=data --limit 10000

Это будетINDEX.jsonдокумент Импортировать данные изElasticsearchуказанный индекс в。

Экземпляр Elasticsearch с учетной записью и паролем:

Язык кода:shell
копировать
elasticdump \
  --input=/path/to/output/INDEX.json \
  --output=http://user:passwd@localhost:9200/INDEX \
  --type=data --limit 10000

Резервное копирование и восстановление всех индексов

Резервное копирование всех индексов

Резервное копирование всех индексов в Elasticsearch может потребовать дополнительных сценариев, поскольку у Elasticdump нет прямого пути к Резервному копирование всех индексов. Вот простой пример сценария bash для Резервного. копирование всех индексов:

Язык кода:shell
копировать
#!/bin/bash
for index in $(curl -s http://localhost:9200/_cat/indices?h=index)
do
  elasticdump \
    --input=http://localhost:9200/${index} \
    --output=/path/to/output/${index}.json \
    --type=data
done

Восстановить все индексы

Восстановить все индексы обычно включает в себя просмотр файлов, содержащих данные резервной копии.,и импортируйте их в соответствующий индекс Elasticsearch. Вот простой пример сценария bash,Чтобы восстановить все резервные копии индекса в папке:

Язык кода:shell
копировать
#!/bin/bash
BACKUP_DIR="/path/to/backup/directory"
for backup_file in $(ls ${BACKUP_DIR}/*.json); do
  index_name=$(basename ${backup_file} .json)
  elasticdump \
    --input=${backup_file} \
    --output=http://localhost:9200/${index_name} \
    --type=data
done

в этом сценарии,Будем считать, что имя файла резервной копии соответствует имени индекса.,резервное копированиедокументрасширение.json,удалив.json,Мы получаем исходное индексное имя для удобства восстановления.

Резервное копирование и восстановление индекса префикса соответствия

Резервное копирование индекса префикса совпадения

Иногда нам может потребоваться резервное копирование нескольких индексов, имена которых имеют общий префикс. Вот пример bash-скрипта для резервного копирования нескольких индексов по префиксу:

Язык кода:shell
копировать
#!/bin/bash
PREFIX="INDEX"
for index in $(curl -s http://localhost:9200/_cat/indices?h=index | grep ^${PREFIX})
do
  elasticdump \
    --input=http://localhost:9200/${index} \
    --output=/path/to/output/${index}.json \
    --type=data
done

Скрипт резервного копирования с паролем учетной записи:

Язык кода:shell
копировать
#!/bin/bash

# Информация о хосте Elasticsearch и сертификации
ELASTIC_HOST="xxxx:9200"
ELASTIC_USER="xxxx"
ELASTIC_PASS="xxxxx"

# Префикс индекса для резервного копирования
INDEX_PREFIX="xxxx"

# Выходной каталог резервной копии
BACKUP_DIR="/root/elastic1/back2"

# Получить все индексы, начиная с master
INDICES=$(curl --silent --user $ELASTIC_USER:$ELASTIC_PASS \
                 --request GET "http://$ELASTIC_HOST/_cat/indices/$INDEX_PREFIX*" | \
                 awk '{ print $3 }')

# Проверьте, существует ли каталог резервных копий, если нет, создайте его.
mkdir -p "$BACKUP_DIR"

# Резервное копирование индексов один за другим
for INDEX in $INDICES; do
  elasticdump \
    --input=http://$ELASTIC_USER:$ELASTIC_PASS@$ELASTIC_HOST/$INDEX \
    --output=$BACKUP_DIR/$INDEX.json \
    --type=data --limit 10000 
done

Восстановить индексы, соответствующие определенному префиксу

Если вы хотите восстановить только индексы с определенным префиксом, вы можете использовать следующий скрипт bash в качестве ссылки:

Язык кода:shell
копировать
#!/bin/bash
PREFIX="your_prefix_here"
BACKUP_DIR="/path/to/backup/directory"
for backup_file in $(ls ${BACKUP_DIR}/${PREFIX}*.json); do
  index_name=$(basename ${backup_file} .json)
  elasticdump \
    --input=${backup_file} \
    --output=http://localhost:9200/${index_name} \
    --type=data
done

Если у вас есть пароль, вы можете обратиться к следующему сценарию (не практикуется, сгенерирован с помощью chatgpt, но в принципе нет большой проблемы с его сканированием с первого взгляда)

Язык кода:shell
копировать
#!/bin/bash

# источник Elasticsearch Информация о хосте и аутентификации
SOURCE_ELASTIC_HOST="xxxx:9200"
SOURCE_ELASTIC_USER="xxxx"
SOURCE_ELASTIC_PASS="xxxxx"

# Цель Elasticsearch Информация о хосте и аутентификации
RESTORE_ELASTIC_HOST="yyyy:9200"
RESTORE_ELASTIC_USER="yyyy"
RESTORE_ELASTIC_PASS="yyyyy"

# Префикс индекса для резервного копирования - Никаких изменений для восстановления не требуется.
INDEX_PREFIX="xxxx"

# Введите каталог резервной копии - Также используется для резервного копирования и восстановления.
BACKUP_DIR="/root/elastic1/back2"

# Получите все с INDEX_PREFIX Файл резервной копии индекса, начинающийся с
BACKUP_FILES=$(ls $BACKUP_DIR | grep "$INDEX_PREFIX")

# Проверьте, существует ли каталог резервных копий и есть ли файлы резервных копий.
if [ -z "$BACKUP_FILES" ]; then
  echo «Не найден префикс, соответствующий файлу резервной копии, Пожалуйста, проверьте каталог резервных копий».
  exit 1
fi

# Восстанавливайте файлы резервных копий в новый экземпляр один за другим.
for FILE in $BACKUP_FILES; do
  INDEX_NAME=$(basename $FILE .json)

  elasticdump \
    --input=$BACKUP_DIR/$FILE \
    --output=http://$RESTORE_ELASTIC_USER:$RESTORE_ELASTIC_PASS@$RESTORE_ELASTIC_HOST/$INDEX_NAME \
    --type=data --limit 10000

  # Необязательный: Если вы все еще хотите восстановить mapping и settings, Добавьте следующую команду:
  # elasticdump \
  #   --input=$BACKUP_DIR/$INDEX_NAME-mapping.json \
  #   --output=http://$RESTORE_ELASTIC_USER:$RESTORE_ELASTIC_PASS@$RESTORE_ELASTIC_HOST/$INDEX_NAME \
  #   --type=mapping

  # elasticdump \
  #   --input=$BACKUP_DIR/$INDEX_NAME-settings.json \
  #   --output=http://$RESTORE_ELASTIC_USER:$RESTORE_ELASTIC_PASS@$RESTORE_ELASTIC_HOST/$INDEX_NAME \
  #   --type=settings
done

echo «Восстановление завершено».

и Восстановить все Скрипт индексов аналогичен, но здесь ограничен путь к файлу. ${BACKUP_DIR}/${PREFIX}*.json Выбирайте только файлы резервных копий с определенным префиксом.

Стоит отметить, что при выполнении крупномасштабного восстановления данных на эффективность выполнения могут влиять такие факторы, как ограничения производительности, конфигурация или сетевые условия кластера Elasticsearch. Рекомендуется оптимизировать конфигурацию Elasticsearch и, возможно, потребуется настроить размер пакета или число параллелизма в соответствии с вашей средой.

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

Другие методы реализации резервного копирования

Elasticdump — это один из способов реализации резервного копирования и восстановления Elasticsearch, но это не единственный способ. Вот еще несколько методов:

  • Используя функцию моментального снимка и восстановления, поставляемую с Elasticsearch, вы можете создать снимок индекса и сохранить его в файловой системе или поддерживаемом облачном хранилище;
  • Используйте инструмент «Куратор» для управления жизненным циклом индекса, включая создание и удаление снимков;
  • Сторонние сервисы и плагины, такие как функция резервного копирования Elastic Cloud, или плагины с открытым исходным кодом, такие как Cerebro.

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

С помощью Elasticdump мы можем гибко и эффективно выполнять резервное копирование и восстановление данных Elasticsearch, но всегда не забывайте выбирать решение для резервного копирования, которое соответствует вашему бизнес-сценарию и масштабу данных.

Стоит обратить внимание на

  1. Вышеописанное резервное копирование и восстановление в основном реализуетсяdataчасть,mapping и settingsОбычно лучше сделать резервную копию!
  2. multielasticdump Я уже пробовал, можете использовать!
  3. Есть ли способ выполнить инкрементную синхронизацию??Кажетсяможет пройтиlogstash Сделай это вот так?Также есть корпоративная версияccr(Cross-Cluster Replication)?кромеINFINI Доступна ли корпоративная версия?
  4. Добавление --limit может увеличить скорость резервного копирования и восстановления!

Примечание. Приведенный выше блог в основном создан с помощью chatgpt. Большинство кодов сценариев не имеют проблем. Если есть проблемы, вам следует их немного отладить.

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.