Elasticsearch 快照

2025年3月17日 | 阅读 12 分钟

每次我们处理技术时,与数据相关的几件事情总会浮现在脑海中。数据备份和恢复是其中之一。随着数据的增长,用户开始为此担忧。他们总是希望他们的数据是安全的,并且空间也是自由的。Elasticsearch 社区关注用户这个问题,并提供了数据备份和恢复功能。因此,在本章中,我们将讨论它。

首先,了解 Elasticsearch 快照是什么很重要。

Elasticsearch 为用户提供了快照功能来备份他们的数据。借助此功能,用户可以创建集群索引和文档的快照。当用户需要他们的数据时,他们也可以借助恢复模块进行恢复。

本章将详细讨论以下主题 -

让我们了解一下什么是快照以及数据存储在哪里?

什么是快照?

在 Elasticsearch 中,快照用于备份索引或整个集群。这些快照由存储库存储,存储库可以是本地的也可以是远程的。因此,首先,您必须注册一个存储库才能创建快照,并且 Elasticsearch 应该也能够写入此位置。

简而言之,我们可以说 Elasticsearch 快照是备份正在运行的 Elasticsearch 集群的过程,它存储在存储库中。因此,数据释放的内存可用于任何其他任务。如果用户需要他们的数据,他们也可以将其恢复到系统中。

快照和恢复模块允许用户创建他们索引或整个集群的快照,这些快照可以存储在共享文件系统上的远程存储库中。Elasticsearch 支持多种类型的存储库,例如NFS 文件系统

Elasticsearch 支持的存储库

Elasticsearch 中的所有快照都组织在一个称为存储库的容器中。Elasticsearch 支持用于存储快照的各种存储库。在一个存储库中,您可以存储一个或多个快照。您可以在 Elasticsearch 中创建任意数量的存储库,并选择其中一个来保存您的数据。

Elasticsearch Snapshot

请记住:如果您想删除数据的快照,您必须从存储快照的存储库中删除它。如果快照存储在一个或多个存储库中,您必须从所有这些存储库中删除它才能完全删除。

Elasticsearch 支持的存储库有以下几种:

  • Azure Cloud
  • HPFS for Hadoop
  • AWS (将备份存储在 S3)
  • Linux 上的 NFS
  • 单节点集群上的目录
  • 使用 Microsoft UNC 路径的 Windows 共享

这里,前三个存储库是云存储库。Elasticsearch 可以在不同的环境中运行,并且在云环境中运行良好且高效。因此,快照/恢复模块在 Elasticsearch 中支持各种云存储库。

让我们分别讨论每种环境

如果您不使用云,您可以使用NFS 共享在多节点集群上备份您的数据。请记住,您必须使该共享在所有节点上都以相同的挂载点可访问。

另一方面,如果您使用的是 Windows 或在 Windows 网络上,您可以使用 Microsoft 共享备份您的数据。Elasticsearch 允许用户在您的path.repo 配置中使用Microsoft UNC 路径。如果您是在单个集群上,也可以备份普通目录。以下是一些步骤,我们将向您展示如何操作 -

  1. 在 Windows 上使用 Microsoft UNC 路径创建存储库。
  2. 在 Linux 上使用 NFS 创建存储库
  3. 在单节点集群上使用目录创建存储库。

使用以下命令检查是否已设置任何存储库

复制代码

响应

如果您在响应正文中没有得到任何内容,如下面的屏幕截图所示,则表示尚未设置任何存储库。

Elasticsearch Snapshot

注意:存储库只是一个内存位置,由用户注册或创建以存储快照。

现在,让我们转向 Elasticsearch 快照存储系统。

Elasticsearch 快照存储系统

要使用 Elasticsearch 快照功能,您首先需要设置一个共享存储节点,以便 Elasticsearch 快照能够工作。此共享存储节点可被您集群中的所有节点访问。它通过公共网络连接所有系统。共享存储可以是一台计算机系统。因此,注册一个共享文件系统存储库并将其快照存储在其中。

Elasticsearch Snapshot

开始之前

开始拍摄快照之前,请遵循以下步骤

步骤 1:导航到 elasticsearch/config 并使用记事本打开位于 config 文件夹内的 elasticsearch.yml 文件,以包含path.repo 设置。

Elasticsearch Snapshot

步骤 2:在此步骤中,您需要传递 path.repo 位置以使用共享文件系统。为此,请在 elastisearchsearch.yml 文件末尾添加以下行并关闭它。

path.repo: ["/my_backup_location"]

Elasticsearch Snapshot

步骤 3:保存并关闭文件。

步骤 4:设置此设置后,您需要重新启动 Elasticsearch 以查看效果。单击 elasticsearch.exe 文件运行 Elasticsearch。

步骤 5:现在,您可以创建存储库和快照了。因此,让我们继续

创建存储库

创建快照时,必须提供快照将存储的存储库位置。这就是为什么我们在快照之前必须创建一个存储库,以便在快照查询中传递其位置。

在下面的示例中,我们将创建一个名为my_backup 的存储库。复制以下代码并在您的 Elasticsearch 插件中执行

复制代码

  • 这里的_snapshot 是一个 API,my_backup 是我们要创建的存储库的名称。
  • 我们在查询中使用的文件类型(fs)属于文件系统。
  • 在 location 参数中,我们传递了将存储存储库的文件夹的路径。

响应

通过执行上述命令,将创建 my_backup 存储库,您将获得响应"acknowledged": true,如下面的屏幕截图所示。

Elasticsearch Snapshot

注意:不要忘记在 elasticsearch.yml 文件中添加 path.repo 位置。

获取存储库

有时我们需要已注册存储库的信息,可以通过在 Elasticsearch 中执行查询来获取。一旦存储库成功创建或注册,我们就可以获取有关它的信息。

在下面的示例中,我们将获取有关我们在上一个示例中创建的my_backup 存储库的信息。复制以下代码并在您的 Elasticsearch 插件中执行

复制代码

响应

这将返回有关 my_backup 存储库的所有信息。响应将如下所示。

截图

Elasticsearch Snapshot

一个名为my_backup 的存储库已成功创建。现在我们可以创建一个快照,它将添加到此存储库中。

向存储库创建快照

成功创建存储库后,我们的下一步是创建快照以备份数据。请记住,每个快照都有一个唯一的名称。创建快照时请提供唯一名称。

Elasticsearch 提供了一个 wait_for_completion 参数。它指示请求是等待快照完成还是在快照初始化后立即返回。如果您在快照查询中使用此参数,则该过程将在后台运行。我们将使用带有和不带有 wait_for_completion 参数的示例进行讨论。

不带 wait_for_completion 参数的示例

在下面的示例中,我们将创建名为snapshot1 的快照,存储在my_backup 存储库(之前创建)中。这是一个简单的快照创建示例,我们没有使用 wait_for_completion 参数。

复制并执行以下命令来创建快照 -

复制代码

响应

通过执行上述代码,将创建一个名为 snapshot1 的快照,它将存储在 my_backup 存储库中。响应将立即返回,如下面的输出所示。

截图

Elasticsearch Snapshot

带有 wait_for_completion 参数的示例

在下面的示例中,我们将使用 wait_for_completion=true,这将等待快照完成。此查询的响应将与上述查询不同。在此示例中,我们将创建名为 2020-06-24_snapshot 的快照。

复制并执行以下代码在您的 Elasticsearch 插件中

复制代码

响应

通过执行上述代码,您将收到如下所示的响应。上述查询不会立即响应。它会等待快照完成。

截图

查看下面的屏幕截图;已创建名为 2020-06-24_snapshot 的快照,它将存储在 my_backup 存储库中。

Elasticsearch Snapshot

获取快照

快照创建成功后,我们可以获取有关它的信息。这些信息包括快照名称、ID、版本、索引名称、创建时间(开始和结束时间)等。

执行以下代码以获取存储在 my_backup 存储库中的 snapshot1 的信息。

复制代码

响应

截图

请参阅下面的屏幕截图,了解命令如何执行和响应。

Elasticsearch Snapshot

删除快照

如果需要,Elasticsearch 允许用户删除快照。他们可以通过执行简单的删除命令来删除快照。下面的代码用于删除存储库中存在的快照。在此示例中,我们将删除 my_backup 存储库中的 2020-06-24_snapshot。

复制代码并在您的 Elasticsearch 插件中执行

复制代码

响应

如果您的输出与下面的响应相同,则表示 2020-06-24 已成功删除。

截图

查看下面快照删除查询的屏幕截图。

Elasticsearch Snapshot

删除存储库

与快照一样,我们也可以随时通过执行命令来删除/取消注册存储库。删除存储库与从 Elasticsearch 数据库中删除快照一样简单。在下面的示例中,我们将删除 my_backup 存储库。

复制代码

响应

如果您的输出与下面的响应相同,则表示 my_backup 存储库已成功删除。

截图

请参阅下面的屏幕截图,其中我们已删除 my_backup 存储库。

Elasticsearch Snapshot

注意:Elasticsearch 只允许用户在存储库被注销后删除该位置的引用。位置引用是存储库存储快照的地方。

快照状态

Elasticsearch 中快照有一些状态。这些快照状态如下:

国家描述
成功此状态表示快照已成功创建。
失败此状态表示查询请求失败,快照未创建。或者遇到了错误,并且快照不存储任何数据。
进行中顾名思义,IN_PROGRESS 状态表示快照正在进行中,尚未完成。
部分PARTIAL 状态表示至少有一个分片未能成功存储。如果您在创建查询时将 partial 设置为 true,则会发生这种情况。
不兼容它定义了快照与 Elasticsearch 版本不兼容。

请注意,当快照正在进行中时,不允许创建另一个快照。

快照状态

执行以下查询并检查快照的状态。

复制代码

响应

这将返回快照的状态。

截图

Elasticsearch Snapshot

所有存储库

执行以下查询以查看 Elasticsearch 中存在的所有存储库。

复制代码

响应

这将返回 Elasticsearch 中存在的所有存储库信息。

截图

在下面的屏幕截图中,您可以看到在my_backup_location 的 Elasticsearch 数据中存在两个名为 my_backup 和 repository2 的存储库。

Elasticsearch Snapshot

所有快照

执行以下查询以查看存储库中存在的所有快照。传入您想搜索快照的存储库名称。

复制代码

响应

这将返回 my_backup 存储库中存在的所有快照。您会注意到返回了两个快照,其中 snapshot1 备份了 5 个索引,而 snapshot2 备份了 3 个索引。

截图

返回了两个存储库 snapshot1snapshot2。请查看下面的屏幕截图。

Elasticsearch Snapshot

现在,您可以恢复快照了。

使用快照恢复数据

Elasticsearch 提供了一个恢复 API,它有助于用户将快照恢复到正在运行的集群。恢复快照时,版本兼容性非常重要。意味着我们只能将快照恢复到能够读取索引的 Elasticsearch 版本。因此,在恢复快照之前,请检查其版本兼容性。

请记住,索引无法恢复到比索引版本高一个以上版本的集群。

示例

在下面的示例中,我们将从 my_backup 存储库中存在的 snapshot2 恢复索引。为此,我们使用了以下函数和 API -

  • POST 方法将数据 post 回 Elasticsearch。
  • _snapshotrestore API
  • 我们将从中恢复数据的快照和存储库名称到 Elasticsearch。

执行以下查询以从快照将数据恢复回 Elasticsearch。

复制代码

响应

如果您的响应与下面的输出相同,则表示您的索引已恢复到 Elasticsearch。

截图

Elasticsearch Snapshot

恢复数据前后的 Elasticsearch UI

创建快照且数据不再使用后,用户可以删除索引以释放内存,从而释放的内存空间可用于其他目的。因此,我们在备份后删除索引以释放内存。借助屏幕截图,我们将了解在将数据恢复回 Elasticsearch 之前和之后 UI 的外观。

在下面的屏幕截图中,您可以看到当用户从 Elasticsearch 数据库删除索引时,Elasticsearch 用户界面是如何显示的。请看下面的屏幕截图 -

恢复前

Elasticsearch Snapshot

当我们使用创建的快照将数据恢复回 Elasticsearch 时,Elasticsearch 插件 UI 上的外观将如下面的屏幕截图所示。

恢复后

Elasticsearch Snapshot

版本兼容性

快照由磁盘上的数据结构副本组成,并且只能恢复到能够读取索引的 Elasticsearch 版本。以下是支持快照和恢复索引的不同 Elasticsearch 版本列表

索引快照恢复到 Elasticsearch 版本
在 1.x 中创建的索引快照2.x
在 2.x 中创建的索引快照5.x
在 5.x 中创建的索引快照6.x

Elasticsearch 不允许用户将 1.x 中创建的索引快照恢复到 5.x 或 6.x。同样,2.x 中创建的索引快照不能恢复到 6.x。


下一主题#