在數(shù)據(jù)管理的世界里,備份和還原數(shù)據(jù)是重中之重的日常工作,特別是對于Elasticsearch這樣的強(qiáng)大而復(fù)雜的搜索引擎。備份不僅可以用于災(zāi)難恢復(fù),還可以在數(shù)據(jù)遷移、測試或者升級等場景中發(fā)揮重要作用。
在本博客中,我們將會重點(diǎn)介紹如何使用一個(gè)非常實(shí)用的工具——elasticdump——來對Elasticsearch數(shù)據(jù)進(jìn)行備份和還原。我們會覆蓋單索引備份還原,全部索引備份還原以及特定前綴索引的備份還原。
注:我的使用場景是從A集群同步數(shù)據(jù)到B集群遷移
Elasticdump 簡介
Elasticdump是一個(gè)開源工具,它可以用于對Elasticsearch索引的數(shù)據(jù)和映射(mapping)進(jìn)行導(dǎo)入、導(dǎo)出操作。Elasticdump工作在命令行接口,通過簡單直觀的指令集操作Elasticsearch的索引數(shù)據(jù)。
安裝 Elasticdump
Elasticdump是一個(gè)基于Node.js的工具,因此首先你需要確保你的系統(tǒng)中安裝有Node.js。然后,你可以使用以下npm命令安裝Elasticdump:
npm install -g elasticdump
單索引備份與還原
下面,我們首先介紹如何對單個(gè)索引進(jìn)行備份和還原:
備份單個(gè)索引
為了備份一個(gè)特定的索引,我們可以使用以下命令:
elasticdump \
--input=http://localhost:9200/INDEX \
--output=/path/to/output/INDEX.json \
--type=data
這個(gè)命令將會將索引INDEX
的數(shù)據(jù)導(dǎo)出到指定路徑下的INDEX.json
文件。
對于有賬號密碼的Elasticsearch實(shí)例,則可以使用以下腳本:
elasticdump \
--input=http://user:passwd@localhost:9200/INDEX \
--output=/path/to/output/INDEX.json \
--type=data
默認(rèn)的速率是100條,可以通過limit 修改默認(rèn)的導(dǎo)出數(shù)量:
elasticdump \
--input=http://user:passwd@localhost:9200/INDEX \
--output=/path/to/output/INDEX.json \
--type=data --limit 10000
還原單個(gè)索引
相反,如果我們想從之前創(chuàng)建的備份中還原單個(gè)索引,可以使用以下命令:
elasticdump \
--input=/path/to/output/INDEX.json \
--output=http://localhost:9200/INDEX \
--type=data --limit 10000
這將會將INDEX.json
文件中的數(shù)據(jù)導(dǎo)入到Elasticsearch中的指定索引。
帶賬號密碼的elasticsearch實(shí)例:
elasticdump \
--input=/path/to/output/INDEX.json \
--output=http://user:passwd@localhost:9200/INDEX \
--type=data --limit 10000
所有索引備份與還原
備份所有索引
備份Elasticsearch中的所有索引可能需要一些額外的腳本,因?yàn)镋lasticdump沒有直接的方式來備份所有索引。以下是一個(gè)簡單的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
還原所有索引
還原所有索引通常涉及到遍歷包含備份數(shù)據(jù)的文件,并將它們導(dǎo)入到相應(yīng)的Elasticsearch索引中。這是一個(gè)簡單的bash腳本示例,用于還原在一個(gè)文件夾中的所有索引備份:
#!/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
在這個(gè)腳本中,我們假設(shè)備份文件的名字與索引的名字相對應(yīng),備份文件的擴(kuò)展名為.json
,通過移除.json
,我們獲取了原始的索引名以便于還原。
匹配前綴索引備份與還原
匹配前綴索引備份
有時(shí)我們可能需要備份名稱有共同前綴的多個(gè)索引。下面是一個(gè)通過前綴備份多個(gè)索引的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的主機(jī)和認(rèn)證信息
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 }')
# 檢查備份目錄是否存在,如果不存在就創(chuàng)建它
mkdir -p "$BACKUP_DIR"
# 逐個(gè)備份索引
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
帶密碼的可以參考以下腳本(未實(shí)踐,chatgpt生成,但是基本一眼掃過沒有多大問題)
#!/bin/bash
# 源 Elasticsearch 的主機(jī)和認(rèn)證信息
SOURCE_ELASTIC_HOST="xxxx:9200"
SOURCE_ELASTIC_USER="xxxx"
SOURCE_ELASTIC_PASS="xxxxx"
# 目標(biāo) Elasticsearch 的主機(jī)和認(rèn)證信息
RESTORE_ELASTIC_HOST="yyyy:9200"
RESTORE_ELASTIC_USER="yyyy"
RESTORE_ELASTIC_PASS="yyyyy"
# 要備份的索引的前綴 - 對于恢復(fù)來說不需要改變
INDEX_PREFIX="xxxx"
# 輸入的備份目錄 - 同時(shí)用于備份和恢復(fù)
BACKUP_DIR="/root/elastic1/back2"
# 獲取所有以 INDEX_PREFIX 開頭的索引備份文件
BACKUP_FILES=$(ls $BACKUP_DIR | grep "$INDEX_PREFIX")
# 檢查備份目錄是否存在,并且是否有備份文件
if [ -z "$BACKUP_FILES" ]; then
echo "沒有發(fā)現(xiàn)匹配前綴的備份文件, 請檢查你的備份目錄."
exit 1
fi
# 逐個(gè)恢復(fù)備份文件到新實(shí)例
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
# 可選: 如果你還想恢復(fù) 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 "恢復(fù)完成."
與還原所有索引的腳本類似,但這里通過限定文件路徑 ${BACKUP_DIR}/${PREFIX}*.json
只選取帶有特定前綴的備份文件。
值得注意的是,進(jìn)行大規(guī)模數(shù)據(jù)還原時(shí),可能會因?yàn)镋lasticsearch集群的性能限制、配置或者網(wǎng)絡(luò)條件等因素影響執(zhí)行效率。建議優(yōu)化Elasticsearch配置,并可能需要調(diào)整批次大小或者并發(fā)數(shù)來適應(yīng)你的環(huán)境。
在還原環(huán)境之前,最好確保Elasticsearch集群處于健康狀態(tài)并有足夠的資源來處理數(shù)據(jù)恢復(fù)過程。這些腳本是簡化版本,視具體環(huán)境可能需要進(jìn)一步的優(yōu)化和調(diào)整。請注意,在生產(chǎn)環(huán)境下執(zhí)行腳本前務(wù)必進(jìn)行充分測試。
其他備份實(shí)現(xiàn)方式
Elasticdump是實(shí)現(xiàn)Elasticsearch備份與還原的一種方式,但并不是唯一方式。以下列舉了其他的一些方法:
- 使用Elasticsearch自帶的Snapshot and Restore功能,可以創(chuàng)建索引的快照并存儲在文件系統(tǒng)或者支持的云存儲服務(wù)中;
- 使用Curator工具管理索引生命周期,包括創(chuàng)建和刪除快照;
- 第三方服務(wù)和插件如Elastic Cloud的備份功能或者開源插件如Cerebro。
確保在實(shí)施任何備份策略之前,都應(yīng)該先在非生產(chǎn)環(huán)境下進(jìn)行測試,以保證恢復(fù)過程中數(shù)據(jù)的完整性和準(zhǔn)確性。
通過Elasticdump,我們可以靈活高效地進(jìn)行Elasticsearch的數(shù)據(jù)備份和還原,但始終記得選擇適合自己業(yè)務(wù)場景和數(shù)據(jù)規(guī)模的備份方案。文章來源:http://www.zghlxwxcb.cn/news/detail-757619.html
值的注意的
- 以上備份還原主要實(shí)現(xiàn)了data的部分,mapping 和 settings正常來說也最好能備份一下!
- **multielasticdump **之前也嘗試過,可以使用一下!
- 有沒有增量同步的方式?貌似也可以通過logstash 這樣的去做?還有企業(yè)版的ccr(Cross-Cluster Replication)?還有**INFINI **企業(yè)版的也可以?
- –limit 的添加可以增加一下備份還原的速度的!
注:以上博客基本chatgpt生成,大部分腳本代碼沒有問題,有問題的應(yīng)該略微調(diào)試一下就可以了文章來源地址http://www.zghlxwxcb.cn/news/detail-757619.html
到了這里,關(guān)于Elasticsearch備份與還原:使用elasticdump的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!