Elasticsearch的快照生命周期管理

    科技2022-08-22  112

    一个快照 是指数的备份-相关文件的集合-可在本地或远程的版本库存储。与上一个快照相比,快照是增量快照,因此只会将新数据添加到存储库中,以节省空间。

     Elasticsearch的快照生命周期管理(SLM)API使您可以创建和配置控制快照的策略。您可以使用SLM API在新创建的群集上创建,删除,更新和修改此类策略。

    为什么快照和SLM很重要?

    快照有助于在意外删除(或有意删除)或基础架构中断的情况下恢复数据。

    SLM允许您自定义如何在整个群集内和群集内备份数据。

    例如,您要存储的某些数据可能包含个人身份信息,并且对可以存储多长时间有限制。您可能希望指定这些快照在存储库中保留的时间。或者,也许您有一个很少更新的集群,并且您只想每周为该集群拍摄一次快照。SLM使您可以轻松指定和自定义,并避免了手动管理快照的麻烦。

    备份资料

    要开始使用快照,您需要创建一个存储库来存储它们。您可以使用Elasticsearch的`_snapshot` API来实现。我选择将我的存储库放在共享文件系统上,但是Elasticsearch还支持s3,Azure和Google Cloud。

    除非您希望使用共享文件系统(例如网络文件系统(NFS)),否则创建存储库的过程取决于对云存储库的访问。您可以开始使用此资源来注册和创建快照存储库。

    现在您已经设置了快照存储库,我们需要注册我们的存储库。就本文而言,我们可以将存储库命名为“ backup_repo”。以下命令将文件系统注册为回购类型。

    确保将位置更新到新创建的存储库所在的位置。这是Elasticsearch文档中的一些示例命令,可用于您的仓库:

    curl -X PUT "localhost:9200/_snapshot/backup_repo" -H 'Content-Type: application/json' -d'

    {

    "type": "fs",

    "settings": {

    "location": "/backupes",

    "compress": true

    }

    }

    '我们可以使用以下命令确保刚刚创建的存储库可以访问集群中的所有节点:

    curl -X POST http://localhost:9200/_snapshot/backup_repo/_verify

    为集群创建新的SLM策略

    现在为群集创建一个新的SLM策略。您可以使用以下命令来创建名为的策略test-policy,该策略可以在本文中用作模板。下面说明的参数可以直接修改或使用。

    curl -X PUT "localhost:9200/_slm/policy/test-policy?pretty" -H 'Content-Type: application/json' -d'

    {

    "schedule": "0 30 0 * * ?",

    "name": "<test-snap-{now/d}>",

     "repository": "backup_repo",

     "config": {

     },

     "retention": {

     "expire_after": "6d"

     }

    }'该schedule字段描述将拍摄快照的时间。该name字段指定快照的命名方案,并且repository是快照的存储位置。最后,该retention字段是快照将保留多长时间。

    SLM提供了可以配置的其他参数-官方文档介绍 了以下可选参数:

    我们可以使用以下命令查看刚刚创建的策略:

    curl -X GET localhost:9200/_slm/policy/test-policy?pretty

    除非您更改了一些参数,否则示例输出看起来像以下几行:

    {

      "test-policy" : {

        "version" : 1,

        "modified_date_millis" : 1601887986036,

        "policy" : {

          "name" : "<test-snap-{now/d}>",

          "schedule" : "0 30 0 * * ?",

          "repository" : "backup_repo",

          "config" : { },

          "retention" : {

            "expire_after" : "6d"

          }

        },

        "last_success" : {

          "snapshot_name" : "test-snap-2020.10.05-darxpenkqjuixqh7xvpqpg",

          "time" : 1601888303714

        },

        "next_execution_millis" : 1601944200000,

        "stats" : {

          "policy" : "test-policy",

          "snapshots_taken" : 1,

          "snapshots_failed" : 0,

          "snapshots_deleted" : 0,

          "snapshot_deletion_failures" : 0

        }

      }

    }测试政策

    让我们通过执行策略并创建一个新的快照来测试该策略。

    curl -X POST localhost:9200/_slm/policy/test-policy/_execute?pretty

    {

      "snapshot_name" : "test-snap-2020.10.05-wn7argw2snq4mzg647p1sq"

    }

    该命令返回刚刚创建的快照的ID,如上面的输出所示。在这种情况下,将test-snap-2020.10.05-wn7argw2snq4mzg647p1sq创建名为的快照。让我们通过运行另一个命令来检查集群上快照的状态:

    curl -X GET localhost:9200/_cat/snapshots/backup_repo

    test-snap-2020.10.05-darxpenkqjuixqh7xvpqpg SUCCESS 1601888303 08:58:23 1601888303 08:58:23 200ms 3 3 0 3

    我们可以看到刚刚创建的快照  daily-snap-2020.07.31-aw6zoe5rrlc_iyqhf0b2rq已成功完成。

    Processed: 0.018, SQL: 9