В мире управления данными резервное копирование и восстановление данных является главным приоритетом, особенно для такой мощной и сложной поисковой системы, как Elasticsearch. Резервное копирование можно использовать не только для аварийного восстановления, но оно также играет важную роль в таких сценариях, как миграция данных, тестирование или обновление.
В этом блоге мы сосредоточимся на том, как использовать очень практичный инструмент Elasticdump для резервного копирования и восстановления данных Elasticsearch. Мы рассмотрим резервное копирование и восстановление одного индекса, резервное копирование и восстановление всех индексов, а также резервное копирование и восстановление определенных префиксных индексов.
Примечание. Мой сценарий использования — синхронизировать данные из кластера A для миграции в кластер B.
Elasticdump — это инструмент с открытым исходным кодом, который можно использовать для импорта и экспорта данных и сопоставлений, индексированных Elasticsearch. Elasticdump работает через интерфейс командной строки и управляет данными индекса Elasticsearch с помощью простого и интуитивно понятного набора инструкций.
Elasticdump — это инструмент, основанный на Node.js, поэтому сначала вам необходимо убедиться, что Node.js установлен в вашей системе. Затем вы можете установить Elasticdump, используя следующую команду npm:
npm install -g elasticdump
Ниже мы впервые покажем, как выполнить резервное копирование и восстановление одного индекса:
Чтобы создать резервную копию определенного индекса, мы можем использовать следующую команду:
elasticdump \
--input=http://localhost:9200/INDEX \
--output=/path/to/output/INDEX.json \
--type=data
Эта команда будет индексироватьINDEX
Экспортируйте данные по указанному путиINDEX.json
документ。
Для экземпляра Elasticsearch с учетной записью и паролем вы можете использовать следующий скрипт:
elasticdump \
--input=http://user:passwd@localhost:9200/INDEX \
--output=/path/to/output/INDEX.json \
--type=data
Ставка по умолчанию составляет100полоска,может пройтиlimit Измените количество экспорта по умолчанию:
elasticdump \
--input=http://user:passwd@localhost:9200/INDEX \
--output=/path/to/output/INDEX.json \
--type=data --limit 10000
Напротив,Если мы хотим Восстановить один индекс из ранее созданной резервной копии,Можно использовать следующие команды:
elasticdump \
--input=/path/to/output/INDEX.json \
--output=http://localhost:9200/INDEX \
--type=data --limit 10000
Это будетINDEX.json
документ Импортировать данные изElasticsearchуказанный индекс в。
Экземпляр Elasticsearch с учетной записью и паролем:
elasticdump \
--input=/path/to/output/INDEX.json \
--output=http://user:passwd@localhost:9200/INDEX \
--type=data --limit 10000
Резервное копирование всех индексов в Elasticsearch может потребовать дополнительных сценариев, поскольку у Elasticdump нет прямого пути к Резервному копирование всех индексов. Вот простой пример сценария bash для Резервного. копирование всех индексов:
#!/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,Чтобы восстановить все резервные копии индекса в папке:
#!/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-скрипта для резервного копирования нескольких индексов по префиксу:
#!/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
Скрипт резервного копирования с паролем учетной записи:
#!/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 в качестве ссылки:
#!/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, но в принципе нет большой проблемы с его сканированием с первого взгляда)
#!/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, но это не единственный способ. Вот еще несколько методов:
Убедитесь, что перед внедрением любой стратегии резервного копирования ее следует протестировать в непроизводственной среде, чтобы гарантировать целостность и точность данных в процессе восстановления.
С помощью Elasticdump мы можем гибко и эффективно выполнять резервное копирование и восстановление данных Elasticsearch, но всегда не забывайте выбирать решение для резервного копирования, которое соответствует вашему бизнес-сценарию и масштабу данных.
Примечание. Приведенный выше блог в основном создан с помощью chatgpt. Большинство кодов сценариев не имеют проблем. Если есть проблемы, вам следует их немного отладить.