Резервное копирование и восстановление 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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose