备份和还原Elasticsearch索引数据

Facebook

Pinterest WhatsApp

    在此博客文章中,您将学习如何备份和还原Elasticsearch Index数据。嗯,进行数据备份有多种原因。主要原因之一是保护主数据不受系统硬件/软件故障导致的任何不可预见的损害。如果是Elasticsearch,则出于其他原因,您可能希望将数据迁移到新的Elastic集群。

    备份和还原Elasticsearch索引数据

    那么,如何备份和还原Elasticsearch索引数据呢?

    在ELK / Elastic堆栈中,Elasticsearch备份称为 snapshot。可以为整个运行中的Elasticsearch集群(包括其所有数据流和索引)拍摄快照,具体而言 数据流 或特定的Elasticsearch索引。

    在本教程中,我们将使用单节点Elasticsearch集群。

    注册快照存储库

    在对Elasticsearch索引/集群进行快照之前,必须首先注册一个存储库。 Elasticsearch存储库有不同类型。

    在此设置中,我们将使用共享文件系统存储库。

    注册快照存储库

    要注册文件系统存储库,您需要在所有主节点/数据节点Elasticsearch配置文件上定义文件系统位置。这是您要存储备份/快照的路径/位置。

    在我们的设置中,我们已将备份磁盘安装在 /mnt/es_backup

    df -hT -P /mnt/es_backup/
    Filesystem     Type  Size  Used Avail Use% Mounted on
    /dev/sdb1      ext4  3.9G   16M  3.7G   1% /mnt/es_backup

    要在Elasticsearch配置文件上定义备份位置的路径位置,请使用选项, path.repo

    path.repo: ["/mnt/es_backup"]

    您只需将此行回显到配置文件即可;

    echo 'path.repo: ["/mnt/es_backup"]' >> /etc/elasticsearch/elasticsearch.yml

    将存储库路径的所有权设置为 elasticsearch 用户。

    chown -R elasticsearch: /mnt/es_backup/

    如果您有多节点群集,请在所有主节点和数据节点上设置相同的配置。

    完成后,重新启动elasticsearch。

    systemctl restart elasticsearch

    定义备份/快照位置后,现在可以通过运行以下命令进行注册。请记住,在此设置中,我们正在使用文件系统存储库。

    curl -X PUT "192.168.57.20:9200/_snapshot/es_backup?pretty" -H 'Content-Type: application/json' -d'
    {
      "type": "fs",
      "settings": {
        "location": "/mnt/es_backup"
      }
    }
    '

    运行命令时,应该得到输出;

    {
      "acknowledged" : true
    }

    获取有关快照存储库的信息

    要检索有关已注册存储库的信息,请运行以下命令;

    curl -X GET "192.168.57.20:9200/_snapshot/es_backup?pretty"

    样品输出;

    {
      "es_backup" : {
        "type" : "fs",
        "settings" : {
          "location" : "/mnt/es_backup"
        }
      }
    }

    查看所有存储库;

    curl -X GET "192.168.57.20:9200/_snapshot/_all?pretty"

    创建Elasticsearch快照/备份

    创建整个Elasticsearch集群的快照

    注册快照存储库后,现在可以创建快照,如下所示。 “一个存储库可以包含同一集群的多个快照。 快照由群集中的唯一名称标识。”

    以创建快照为例 es_backup_202104192200,您将运行这样的命令;

    curl -X PUT "192.168.57.20:9200/_snapshot/es_backup/es_backup_202104192200?pretty"
    {
      "accepted" : true
    }

    默认情况下,快照会备份群集中的所有数据流和打开的索引。

    命令完成运行后,请查看backup / snapshot目录的样本内容;

    ls -1 /mnt/es_backup/
    index-0
    index.latest
    indices
    meta-T0tfilSMSbCfVvJqpffPxA.dat
    snap-T0tfilSMSbCfVvJqpffPxA.dat

    就目前而言,我只有一些用于演示的索引;

    curl 192.168.57.20:9200/_cat/indices?pretty
    yellow open filebeat-7.10.1-2021.04.16-000001 XWQ7QQ_9Tpar_rPE5dn0Sw 1 1    24  0  146kb  146kb
    yellow open filebeat-7.12.0-2021.04.19-000001 0sQCK1OTRWiosULRHKQMpw 1 1 66423  0 15.5mb 15.5mb
    ...

    创建特定Elasticsearch索引的快照

    假设我要备份一个特定的索引, filebeat-7.12.0-2021.04.19-000001;

    curl -X PUT "192.168.57.20:9200/_snapshot/es_backup/filebeat_202104192200?pretty" -H 'Content-Type: application/json' -d'
    {
      "indices": "filebeat-7.12.0-2021.04.19-000001",
      "ignore_unavailable": true,
      "include_global_state": false
    }
    '

    拍摄快照时,可以包括其他选项,例如;

    • ignore_unavailable:选择 true 或者 false
      • 设置为true时,它将导致在拍摄快照时忽略不存在的索引/数据流。
      • 如果未定义,则在进行快照时如果数据流或索引丢失,则快照将失败。
    • include_global_state:可以设置为 truefalse
      • 如果设置为 true,它将导致快照将当前群集状态保存为快照的一部分。
      • 如果设置为 false,它可以防止将群集全局状态存储为快照的一部分。
    • partial
      • 如果设置为false(默认值),则如果快照中的一个或多个索引没有所有可用的主分片,则快照将失败。
      • 如果设置为true,则即使快照中的一个或多个索引没有所有可用的主分片,快照也将发生。
    • expand_wildcards
      • 用于控制是否 hiddenclosed 索引将包含在快照中,默认为 all
    • metadata
      • 添加信息,例如谁拍摄了快照,为什么拍摄快照或其他可能对快照有用的数据。

    参见下面的例子;

    curl -X PUT "192.168.57.20:9200/_snapshot/es_backup/filebeat_202104192200?pretty" -H 'Content-Type: application/json' -d'
    {
      "indices": "filebeat-7.12.0-2021.04.19-000001",
      "ignore_unavailable": true,
      "include_global_state": false,
      "metadata": {
        "taken_by": "kifarunix",
        "taken_because": "test backup"
      }
    }
    '

    查看快照信息

    要查看有关在特定存储库中创建的快照的信息,请运行以下示例命令。

    例如,要查看有关 es_backup_202104192200 快照

    curl -X GET "192.168.57.20:9200/_snapshot/es_backup/es_backup_202104192200?pretty"
    {
      "snapshots" : [
        {
          "snapshot" : "es_backup_202104192200",
          "uuid" : "T0tfilSMSbCfVvJqpffPxA",
          "version_id" : 7100099,
          "version" : "7.10.0",
          "indices" : [
            ".kibana_task_manager_1",
            "filebeat-7.12.0-2021.04.19-000001",
            "filebeat-7.10.1-2021.04.16-000001",
            ".kibana-event-log-7.10.0-000001",
            ".async-search",
            ".apm-agent-configuration",
            "ilm-history-3-000001",
            ".kibana_1",
            ".apm-custom-link"
          ],
          "data_streams" : [ ],
          "include_global_state" : true,
          "state" : "SUCCESS",
          "start_time" : "2021-04-19T19:57:08.912Z",
          "start_time_in_millis" : 1618862228912,
          "end_time" : "2021-04-19T19:57:56.691Z",
          "end_time_in_millis" : 1618862276691,
          "duration_in_millis" : 47779,
          "failures" : [ ],
          "shards" : {
            "total" : 9,
            "failed" : 0,
            "successful" : 9
          }
        }
      ]
    }

    您可以在备份快照中看到索引和数据流。

    查看存储库中的所有快照;

    curl -X GET "192.168.57.20:9200/_snapshot/es_backup/_all?pretty"

    恢复Elasticsearch快照/备份

    现在,假设您不小心删除了一个已经为其备份的索引。这样就很容易还原Elasticsearch快照。

    根据 Elasticsearch快照还原;

    • 您无法将快照从更高版本的Elasticsearch还原到运行早期版本的Elasticsearch的集群中。例如,您不能将7.6.0中创建的快照还原到运行7.5.0的群集。
    • 您无法将索引还原到运行Elasticsearch版本的集群中,该版本比用于快照索引的Elasticsearch版本多一个主要版本。例如,您不能将索引从5.0中创建的快照还原到运行7.0的群集。

    下表总结了群集版本之间的快照兼容性。

    集群版本
    快照版本2.x5.x6.x7.x8.x
    1.x不不不不
    2.x是的是的不不不
    5.x不是的是的不不
    6.x不不是的是的不
    7.x不不不是的是的

    在上面,我们学习了如何为整个集群以及单个Elasticsearch索引拍摄快照。

    因此,出于演示目的,让我们删除当前Elasticsearch上的索引;

    curl -X DELETE "192.168.57.20:9200/_all?pretty"
    {
      "acknowledged" : true
    }

    如果您尝试列出可用的索引,则会发现其中一个Kibana索引已自动创建;

    curl 192.168.57.20:9200/_cat/indices?pretty
    yellow open .kibana -CjWP5YlSdi5eqt1VpLXng 1 1 1 0 5kb 5kb

    接下来,要尝试还原我们的常规/整个集群快照, es_backup_202104192200,则可以运行以下命令;

    curl -X POST "192.168.57.20:9200/_snapshot/es_backup/es_backup_202104192200/_restore?pretty"

    如果某些索引已经存在并在集群中打开,并且与快照中可用的某些索引匹配,则可以 关闭或删除现有索引,或者通过提供重命名模式和替换名称以其他名称还原索引

    样本错误;

    {
      "error" : {
        "root_cause" : [
          {
            "type" : "snapshot_restore_exception",
            "reason" : "[es_backup:es_backup_202104192200/T0tfilSMSbCfVvJqpffPxA] cannot restore index [ilm-history-3-000001] because an open index with same name already exists in the cluster. Either close or delete the existing index or restore the index under a different name by providing a rename pattern and replacement name"
          }
        ],
        "type" : "snapshot_restore_exception",
        "reason" : "[es_backup:es_backup_202104192200/T0tfilSMSbCfVvJqpffPxA] cannot restore index [ilm-history-3-000001] because an open index with same name already exists in the cluster. Either close or delete the existing index or restore the index under a different name by providing a rename pattern and replacement name"
      },
      "status" : 500
    }

    因此,让我们关闭抱怨指数

    curl -X POST "192.168.57.20:9200/ilm-history-3-000001/_close?pretty"
    {
      "acknowledged" : true,
      "shards_acknowledged" : true,
      "indices" : {
        "ilm-history-3-000001" : {
          "closed" : true
        }
      }
    }

    如果出现这样的错误;

    {
      "error" : {
        "root_cause" : [
          {
            "type" : "illegal_state_exception",
            "reason" : "index, alias, and data stream names need to be unique, but the following duplicates were found [.kibana (alias of [.kibana_1/vSrhd_CyTva5oI1ggwnCuQ]) conflicts with index]"
          }
        ],
        "type" : "illegal_state_exception",
        "reason" : "index, alias, and data stream names need to be unique, but the following duplicates were found [.kibana (alias of [.kibana_1/vSrhd_CyTva5oI1ggwnCuQ]) conflicts with index]"
      },
      "status" : 500
    }

    再次删除索引;

    curl -X DELETE "192.168.57.20:9200/_all?pretty"

    并在自动创建.kibana索引之前立即运行快照还原。

    现在,当您运行快照还原时;

    curl -X POST "192.168.57.20:9200/_snapshot/es_backup/es_backup_202104192200/_restore?pretty"

    你应该得到;

    {
      "accepted" : true
    }

    现在再次列出索引应该与以前相同;

    curl 192.168.57.20:9200/_cat/indices?pretty
    yellow open filebeat-7.10.1-2021.04.16-000001 QImIEVM9SOKvtDnO1WUyNw 1 1    24 0   146kb   146kb
    yellow open filebeat-7.12.0-2021.04.19-000001 -rYD-nUNR9m10x2W21uAAg 1 1 66423 0  15.5mb  15.5mb
    green  open .apm-custom-link                  b6b_dTNPQHOLatvVyw6fUg 1 0     0 0    208b    208b
    green  open .kibana_task_manager_1            f2Eg4u8yRvSEk47QU-wwbg 1 0     5 3 132.9kb 132.9kb
    green  open .apm-agent-configuration          kMWsZ9kBTW6xeYoe3J4sIA 1 0     0 0    208b    208b
    green  open .kibana-event-log-7.10.0-000001   -ZTzLi9zTuOnjcsm2wOhAw 1 0     2 0    11kb    11kb
    green  open .async-search                     la4iO9BFTd6qSUzrw7JKNw 1 0     2 2 924.5kb 924.5kb
    green  open .kibana_1                         gK9b55LTRCiuwm9sFRTuaQ 1 0  1558 7  10.7mb  10.7mb

    这就是备份和还原Elasticsearch索引数据的容易程度。

    这标志着本教程有关如何备份和还原Elasticsearch Index数据的结尾。

    在我们的下一个指南中,我们将学习如何将Elasticsearch索引数据备份和还原到其他Elasticsearch集群。

    参考

    Elasticsearch快照和还原

    其他教程

    在CentOS 8上设置Kibana Elasticsearch和Fluentd

    在Fedora 30 / Fedora 29 / CentOS 7上设置多节点Elasticsearch 7.x集群

    更新/更改Kibana可视化索引模式

    Sidebar