ES 快照

每当我们使用这项技术时,总会想到一些与我们的数据相关的事情。数据备份和恢复就是其中之一。随着数据的增加,用户开始担心它。他们总是希望他们的数据是安全的,并且空间也是免费的。 Elasticsearch 社区关注用户的这个问题并提供数据备份和恢复工具。因此,在本章中,我们将讨论它。

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

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

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

  • 什么是快照
  • Elasticsearch 支持的存储库
  • Elasticsearch 快照存储系统
  • 创建存储库
  • 获取存储库
  • 创建快照
  • 获取快照
  • 删除快照
  • 删除仓库
  • 快照状态
  • 使用快照恢复数据
  • Elasticsearch 恢复数据前后
  • 版本兼容性

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

什么是快照?

在 Elasticsearch 中,快照用于备份索引或整个集群。这些快照由存储库存储,存储库可以是本地的,也可以是远程的。所以,首先你得注册一个repository来创建快照,而Elasticsearch应该也能写到这个位置。

简单来说,我们可以说Elasticsearch快照是一个备份正在运行的 Elasticsearch 集群,该集群存储在存储库中。因此,数据释放的内存可用于任何其他任务。如果用户需要取回他的数据,他也可以将其恢复到系统中。

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

Elasticsearch 支持的存储库

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

Elasticsearch Snapshot

请记住-如果您想删除数据的快照,您必须从存储它的存储库中删除它。如果快照存储在一个或多个存储库中,则必须将其从所有这些存储库中删除才能将其彻底删除。

Elasticsearch 支持的存储库数量如下:

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

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

让我们分别讨论每个环境

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

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

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

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

GET _snapshot/_all
{ }

Response

如果您在响应正文中没有像下面的截图一样,则表明尚未设置存储库。

Elasticsearch 快照

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

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

Elasticsearch 快照存储系统

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

Elasticsearch Snapshot

开始之前

在开始拍摄快照之前,请按照以下步骤操作:

步骤 1: 导航到 elasticsearch/config 并打开 elasticsearch.yml 文件到记事本中存在于 config 文件夹中以包含 path.repo 设置。

Elasticsearch Snapshot

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

path.repo: ["/my_backup_location"]

Elasticsearch Snapshot

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

步骤 4: 设置完这个设置后,需要重启Elasticsearch才能看到效果。单击 elasticsearch.exe 文件以运行 Elasticsearch。

步骤 5: 现在,您可以在 Elasticsearch 中创建存储库和快照。那么,让我们继续前进:

创建存储库

在创建快照时,需要传递存储库位置快照将被存储。这就是为什么我们必须在快照之前创建存储库以在快照查询中传递其位置。

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

PUT http://localhost:9200/_snapshot/my_backup
{
   "type":"fs",
   "settings": {
       "location": "my_backup_location"
  }
}
  • 这里 _snapshot 是一个 API,my_backup 是我们要创建的存储库的名称.
  • 我们在此查询中使用的文件类型(fs) 属于文件系统。
  • 在 location 参数中,我们传递了存储存储库的文件夹路径。

Response

通过执行上面的命令,my_backup 存储库将被创建,并且你将得到响应 "acknowledged": true 如下图所示。

Elasticsearch Snapshot

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

获取一个Repository

有时候我们需要一个注册的repository的信息,可以通过执行一个在 Elasticsearch 中查询。成功创建或注册存储库后,我们可以获得有关它的信息。

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

GET http://localhost:9200/_snapshot/my_backup
{ }

Response

这将返回有关 my_backup 存储库的所有信息。响应将类似于以下输出。

{
   "my_backup": {
        "type": "fs",
        "settings": {
             "location": "my_backup_location"
       }
    }
}

截图

Elasticsearch Snapshot

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

创建存储库的快照

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

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

不带 wait_for_completion 参数的示例

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

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

PUT http://localhost:9200/_snapshot/my_backup/snapshot1
{ }

Response

将创建一个名为 snapshot1 的快照,通过执行上面的代码。响应将立即返回,如下面的输出。

{
   "accepted": true
}

截图

Elasticsearch Snapshot

使用wait_for_completion 参数的示例

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

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

PUT /localhost:9200/
_snapshot/my_backup/2020-06-24_snapshot?wait_for_completion=true
{ }

Response

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

{
   "snapshot": {
      "snapshot": "2020-06-24_snapshot",
      "uuid": "Q-QVGIHPQdSL321Ms7tU4g",
      "version_id": 7080099,
      "version": "7.8.0",
          "indices": [
             "student1"
             ,
             "new_student"
             ,
             "book"
             ,
             "books"
             ,
             "student"
         ],
         "include_global_state": true,
         "state": SUCCESS,
         "start_time": "2020-09-15T10:55:29.299Z",
         "start_time_in_millis": 1600167329299,
         "end_time": "2020-09-15T10:55:33.386Z",
         "end_time_in_millis": 1600167333386,
         "duration_in_millis": 4087,
             "failures": [ ],
             "shards": {
               "total": 5,
               "failed": 0,
               "successful": 5
             }
         ]
    }
}

截图

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

Elasticsearch Snapshot

获取快照

一旦快照创建成功,我们就可以获取它的信息。此信息包括快照名称、id、版本、索引名称、创建时间(开始和结束时间)等。

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

p>

GET http://localhost:9200/_snapshot/my_backup/snapshot1
{ }

回应

{
   "snapshot": {
      "snapshot": "snapshot1",
      "uuid": "83txwYEiT3uz2bUu0B7KwQ",
      "version_id": 7080099,
      "version": "7.8.0",
          "indices": [
             "student1"
             ,
             "new_student"
             ,
             "book"
             ,
             "books"
             ,
             "student"
         ],
         "include_global_state": true,
         "state": SUCCESS,
         "start_time": "2020-09-15T10:35:33.516Z",
         "start_time_in_millis": 1600166133516,
         "end_time": "2020-09-15T10:35:45.352Z",
         "end_time_in_millis": 160016145352,
         "duration_in_millis": 11836,
             "failures": [ ],
             "shards": {
                "total": 5,
                "failed": 0,
                "successful": 5
             }
         ]
    }
}

屏幕截图

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

Elasticsearch Snapshot

删除快照

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

复制代码并将其执行到您的 Elasticsearch 插件中:

DELETE http://localhost:9200/_snapshot/my_backup/2020-06-24_snapshot
{ }

Response

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

{
    "acknowledged": true
}

截图

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

Elasticsearch Snapshot

删除一个仓库

和快照一样,我们也可以删除/只需执行命令即可在需要时取消注册存储库。删除存储库就像从 Elasticsearch 数据库中删除快照一样简单。在下面的示例中,我们将删除 my_backup 存储库。

DELETE http://localhost:9200/_snapshot/my_backup
{ }

Response

如果您的输出与以下响应相同,则 my_backup 存储库已成功删除.

{
    "acknowledged": true
}

屏幕截图

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

Elasticsearch 快照

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

快照状态

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

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

注意: 请注意,当前正在进行快照时,不允许拍摄另一个快照。

快照状态

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

GET http://localhost:9200/_snapshot/_status
{ }

Response

这将返回快照的状态。

{
    "snapshots": [ ]
}

截图

Elasticsearch Snapshot

所有存储库

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

GET http://localhost:9200/_snapshot/_all
{ }

Response

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

{
   "my_backup": {
        "type": "fs",
        "settings": {
             "location": "my_backup_location"
       }
    },
   "repository2": {
        "type": "fs",
        "settings": {
             "location": "my_backup_location"
       }
    }
}

屏幕截图

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

Elasticsearch Snapshot

所有快照

执行以下查询以查看存储库中存在的所有快照。传递要在其中搜索快照的存储库名称。

GET http://localhost:9200/_snapshot/my_backup/_all
{ }

Response

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

{
   "snapshot": {
      "snapshot": "snapshot1",
      "uuid": "83txwYEiT3uz2bUu0B7KwQ",
      "version_id": 7080099,
      "version": "7.8.0",
          "indices": [
             "student1"
             ,
             "new_student"
             ,
             "book"
             ,
             "books"
             ,
             "student"
         ],
         "include_global_state": true,
         "state": SUCCESS,
         "start_time": "2020-09-15T10:35:33.516Z",
         "start_time_in_millis": 1600166133516,
         "end_time": "2020-09-15T10:35:45.352Z",
         "end_time_in_millis": 160016145352,
         "duration_in_millis": 11836,
             "failures": [ ],
             "shards": {
                "total": 5,
                "failed": 0,
                "successful": 5
             }
         }
         ,
         {
               "snapshot": "snapshot1",
           "uuid": "83txwYEiT3uz2bUu0B7KwQ",
              "version_id": 7080099,
          "version": "7.8.0",
              "indices": [
                   "new_student"
                   ,
                   "book"
                   ,
                  "student"
         ],
         "include_global_state": true,
         "state": SUCCESS,
         "start_time": "2020-09-16T13:04:04.319Z",
         "start_time_in_millis": 1600261444319,
         "end_time": "2020-09-16T13:04:05.123Z",
         "end_time_in_millis": 1600,61445123,
         "duration_in_millis": 804,
             "failures": [ ],
             "shards": {
                "total": 3,
                "failed": 0,
                "successful": 3
             }
         }
       ]
    }
}

屏幕截图

两个存储库 snapshot1 和 snapshot2 已返回。看看下面的截图。

Elasticsearch Snapshot

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

使用快照恢复数据

Elasticsearch 提供了restore API,帮助用户将快照恢复到正在运行的集群中。在恢复快照时,版本兼容性起着重要作用。意味着我们只能将快照恢复到可以读取索引的 Elasticsearch 版本。因此,在还原快照之前,请检查它的版本兼容性。

请记住,不能将索引还原到具有多个更高版本的索引版本的集群。

示例:

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

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

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

POST http://localhost:9200/_snapshot/snapshot2/_restore
{ }

响应:

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

>

{
   "accepted": true
}

截图

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。

下一章:ES 分页

在开始在 Elasticsearch 中进行分页并知道如何进行之前,了解什么是分页很重要。所以,让我们先从分页开始。每次我们在网上搜索一些东西时,它都会返回很多结果。这些结果可能是成百上千,有时甚至是十万,分布在几页上。每个页面 ...