Elasticsearch备份与还原:使用elasticdump

news2024/12/23 19:16:39

在数据管理的世界里,备份和还原数据是重中之重的日常工作,特别是对于Elasticsearch这样的强大而复杂的搜索引擎。备份不仅可以用于灾难恢复,还可以在数据迁移、测试或者升级等场景中发挥重要作用。

在本博客中,我们将会重点介绍如何使用一个非常实用的工具——elasticdump——来对Elasticsearch数据进行备份和还原。我们会覆盖单索引备份还原,全部索引备份还原以及特定前缀索引的备份还原。
注:我的使用场景是从A集群同步数据到B集群迁移

Elasticdump 简介

Elasticdump是一个开源工具,它可以用于对Elasticsearch索引的数据和映射(mapping)进行导入、导出操作。Elasticdump工作在命令行接口,通过简单直观的指令集操作Elasticsearch的索引数据。

安装 Elasticdump

Elasticdump是一个基于Node.js的工具,因此首先你需要确保你的系统中安装有Node.js。然后,你可以使用以下npm命令安装Elasticdump:

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

image.png
默认的速率是100条,可以通过limit 修改默认的导出数量:

elasticdump \
  --input=http://user:passwd@localhost:9200/INDEX \
  --output=/path/to/output/INDEX.json \
  --type=data --limit 10000

image.png

还原单个索引

相反,如果我们想从之前创建的备份中还原单个索引,可以使用以下命令:

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备份与还原的一种方式,但并不是唯一方式。以下列举了其他的一些方法:

  • 使用Elasticsearch自带的Snapshot and Restore功能,可以创建索引的快照并存储在文件系统或者支持的云存储服务中;
  • 使用Curator工具管理索引生命周期,包括创建和删除快照;
  • 第三方服务和插件如Elastic Cloud的备份功能或者开源插件如Cerebro。

确保在实施任何备份策略之前,都应该先在非生产环境下进行测试,以保证恢复过程中数据的完整性和准确性。

通过Elasticdump,我们可以灵活高效地进行Elasticsearch的数据备份和还原,但始终记得选择适合自己业务场景和数据规模的备份方案。

值的注意的

  1. 以上备份还原主要实现了data的部分,mappingsettings正常来说也最好能备份一下!
  2. **multielasticdump **之前也尝试过,可以使用一下!
  3. 有没有增量同步的方式?貌似也可以通过logstash 这样的去做?还有企业版的ccr(Cross-Cluster Replication)?还有**INFINI **企业版的也可以?
  4. –limit 的添加可以增加一下备份还原的速度的!

注:以上博客基本chatgpt生成,大部分脚本代码没有问题,有问题的应该略微调试一下就可以了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1220469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的大学餐厅菜品推荐和点评系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

Linux系统下安装go

目录 下载go安装包解压包并安装添加环境变量验证是否安装成功 下载go安装包 官网地址:go 解压包并安装 复制好包的下载链接后使用下面命令进行安装: curl -O https://storage.googleapis.com/golang/go1.11.1.linux-amd64.tar.gz mkdir -p ~/installe…

为什么要写测试用例,测试用例写给谁看?

“为什么要编写测试用例,测试用例写给谁看”,这个问题看似简单,但却涵盖了一系列复杂的考虑因素,并不太好回答。 为了向各位学测试的同学们解释清楚“为什么编写测试用例是至关重要的”,我将通过以下3个方面进行展开&…

.Net 8正式发布

Net 8是官方号称有史以来性能最快的一个版本了。 .Net 8 增加了数以千计的性能、稳定性和安全性改进,以及平台和工具增强功能,有助于提高开发人员的工作效率和创新速度。 反正就是快,性能好、工作效率更高! 这个版本&#xff0c…

腾讯云服务器怎么买便宜?腾讯云服务器优惠链接

现在,让我们一起探索如何在腾讯云服务器上购买便宜的云服务器吧! 首先,我们来看看都有哪些便宜的腾讯云服务器值得我们入手吧! 首先是轻量2核2G3M服务器,只需要一年88元就能轻松拥有,对于刚开始接触云服务…

mtgsig1.2简单分析

{"a1": "1.2", # 加密版本"a2": new Date().valueOf() - serverTimeDiff, # 加密过程中用到的时间戳. 这次服主变坏了, 时间戳需要减去一个 serverTimeDiff(见a3) ! "a3": "这是把xxx信息加密后提交给服务器, 服主…

【论文解读】CP-SLAM: Collaborative Neural Point-based SLAM System_神经点云协同SLAM系统(下)

目录 4 CP-SLAM实验 4.1 两个智能体协作( Two-agent Collaboration) 4.2 单智能体回环(Single Agent with Loop) 4.3 地图构建(Map Reconstruction) 4.4 消融实验 姿态图优化(Pose Graph …

【献给过去的自己】栈实现计算器(C语言)

背景 记得在刚学C语言时,写了一篇栈实现计算器-CSDN博客文章。偶然间看到了文章的阅读量以及评论,居然有1.7w的展现和多条博友的点评,反馈。 现在回过头来看,的确有许多不严谨的地方,毕竟当时分享文章时,还…

实时人眼追踪、内置3D引擎,联想ThinkVision裸眼3D显示器创新四大应用场景

11月17日,在以“因思而变 智领未来”为主题的Think Centre和ThinkVision 20周年纪念活动上,联想正式发布了业内首款2D/3D 可切换裸眼3D显示器——联想ThinkVision 27 3D。该产品首次将裸眼2D、3D可切换技术应用在显示器领域,并拓展了3D技术多…

柯桥外语学校|西班牙语中关于金钱的俚语

01 Estar forrado(a) “Forrado(a)”源自动词“forrar”,该动词本意为“包;裹”的动作。 在口语中,则是形容一个人被金钱所包裹,可见这个人是多么地有钱(有点类似于我们的成语“腰缠万贯”所描绘的画面)。…

leetcode刷题日记:141. Linked List Cycle(环形链表)

这一题是给我们一个链表让我们判断这是否是一个环形链表,我们知道如果一个链表中有环的话这一个链表是没有办法访问到尾的, 假若有如图所示的带环链表: 我们从图示中很容易看出来这一个链表在访问的时候会在里面转圈,我们再来看看…

面试鸭 - 专注于面试刷题的网站

网上面试题有很多,但此套面试题真实、原创、高频,全网最强。 题目涵盖大中小公司,真实靠谱,有频率和难度的标记,助你成为Offer收割机。 面试鸭地址:https://mianshiya.skyofit.com/ 本套题是我原创&…

浙大恩特客户资源管理系统CustomerAction.entphone;.js 接口任意文件上传漏洞复现 [附POC]

文章目录 浙大恩特客户资源管理系统CustomerAction.entphone;.js 接口任意文件上传漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 浙大恩特客户资源管理系统CustomerAction.entphone;.js 接口任…

故障发现、定位提效超 70%,去哪儿可观测体系做了哪些优化?

一分钟精华速览 去哪儿网的原有监控系统在指标数量上展现出了强大实力——上亿指标量和百万级的告警量,但在故障数据方面却稍显不足——订单类故障平均发现时间长达 4 分钟,仅有 20%的订单类故障能在 1 分钟内被发现,近半数的故障处理时长超…

注册表单mvc 含源代码

总结 jsp给我们的ControllerServlet.java,ControllerServlet.java获取参数,信息封装给RegisterFormBean.java的对象看是否符合格式,符合格式再信息封装给UserBean对象,调用Dbutil插入方法查重.]]要创建一个user集合成功跳哪个界面,打印信息注意什么时候要加getsession失败跳哪…

超越视觉:探索The Foundry NUKE 15 的无限可能性

你是否曾被电影中那些令人震撼的特效所吸引?是否曾梦想过自己也能制作出这样的特效?现在,这个梦想即将成为现实。今天,我们将向你介绍一款引领影视后期特效制作潮流的软件——The Foundry NUKE 15。 The Foundry NUKE 15是一款专…

JVM类加载机制详解

JVM类加载运行全过程 运行Math类的main函数,启动程序时,首先需要通过类加载器把类加载到JVM。 package com.cold;public class Math {public int compute() {int a 1;int b 2;int c (a b) * 10;return c;}public static void main(String[] args) …

如何将中文翻译成荷兰语?

随着中国的崛起,荷兰与中国的交流日益频繁。越来越多的企业和个人需要荷兰语翻译服务。那么,如何将中文翻译成荷兰语,北京哪家翻译公司比较专业? 专业人士指出,要提供优质的荷兰语翻译服务,不仅需要扎实的荷…

【hive-解决】HiveAccessControlException Permission denied: CREATEFUNCTION

文章目录 一.任务描述二. 解决 一.任务描述 Error while compiling statement: FAILED: HiveAccessControlException Permission denied: Principal [nameroot, typeUSER] does not have following privileges for operation CREATEFUNCTION [ADMIN PRIVILEGE on INPUT, ADMIN…

CSGO的那些事儿:CS2这么差,为什么不改回CS1?

揭秘csgo饰品涨价背后的残酷真相 1、V社现在更新内容集中在游戏性的修复方面。 所以原来期望的新地图新大行动等,要等到游戏本体趋于稳定后才更新。但是,因为距离下一个大型活动,也就是丹麦major还有5个月时间,那这之间必然要有一…