迁移Elasticsearch角色和kibana可视化大盘

如果您需要将源端ES中的角色、用户或可视化大盘的相关信息复制到目标端ES中使用,可以通过手动备份和恢复快照的方式实现。

前提条件

  • 已开通对象存储 OSS(Object Storage Service),并新建一个标准存储类型的Bucket,且Bucket的地域与ES实例的地域保持一致。具体操作,请参见开通OSS服务创建存储空间

  • 创建2个阿里云ES实例。一个ES作为源端,一个ES作为目标端,ES不同版本之间恢复快照的兼容性,请参见Index compatibility

    说明
    • 8.x和7.x版本ES快照恢复有差异,本文以7.10版本ES实例之间的恢复和8.5版本ES实例之间的恢复为例。

    • ES不同版本之间恢复快照的兼容性,请参见Index compatibility

注意事项

  • 本文中的代码均可以在阿里云ES实例的Kibana控制台上执行。

  • 在ES 8.0及以上版本中,features是备份和恢复系统索引和系统数据流的唯一方式。详细信息,请参见Snapshot and restore

迁移Elasticsearch角色和用户

步骤一:准备环境

  1. 在源端ES实例中登录Kibana控制台。具体操作,请参见登录Kibana控制台

  2. 创建角色cj_test_role和一个用户kara,并为该用户分配cj_test_role角色。具体操作,请参见通过Elasticsearch X-Pack角色管理实现用户权限管控

步骤二:备份快照数据

  1. 登录源端ES实例的Kibana控制台。具体操作,请参见登录Kibana控制台

  2. 在源端ES实例中创建一个名称为my_backup的仓库。

    • 云上集群创建仓库。

      PUT _snapshot/my_backup/
      {
          "type": "oss",
          "settings": {
              "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
              "access_key_id": "xxxx",
              "secret_access_key": "xxxxxx",
              "bucket": "xxxxxx",
              "compress": true,
              "chunk_size": "500mb",
              "base_path": "snapshot/"
          }
      }
    • 8.x版本自建集群创建仓库,需要安装elasticsearch-repository-oss插件。具体操作,请参见安装elasticsearch-repository-oss插件

      说明

      关于该插件的详细信息,请参见elasticsearch-repository-oss

      PUT /_snapshot/my_backup
      {
          "type": "oss",
          "settings": {
              "oss.client.endpoint": "oss-cn-shanghai.aliyuncs.com",
              "oss.client.access_key_id": "xxx",
              "oss.client.secret_access_key": "xxx",
              "oss.client.bucket": "xxxxxx",
              "oss.client.base_path":"snapshot/",
              "oss.client.compress": true
          }
      }

    参数

    说明

    endpoint

    OSS Bucket的内网访问域名。获取方式,请参见访问域名和数据中心

    access_key_id

    用于标识用户。获取方式,请参见获取AccessKey

    secret_access_key

    用于验证用户的密钥。获取方式,请参见获取AccessKey

    bucket

    OSS Bucket的名称,需要一个已经存在的Bucket。获取方式,请参见控制台创建存储空间

    compress

    打开快照文件的压缩功能:

    • true:打开压缩功能,仅应用于元数据文件(索引映射和设置)。

    • false(默认值):不打开压缩功能,数据文件未压缩。

    chunk_size

    当您上传的数据非常大时,配置此参数可以限制快照过程中分块的大小。超过这个大小,数据将会被分块上传到OSS中。

    base_path

    仓库的起始位置,默认为根目录。可以指定具体快照的存放目录,例如snapshot/myindex/。

  3. 源端ES实例中创建快照。

    • 执行如下命令,在ES 7.10版本实例中创建快照snapshot_1

      说明

      ES 7.10版本角色、用户通过系统索引.kibana*.security*管理。

      ES 7.10版本创建快照命令中参数解析,请参见Restore snapshot API

      PUT _snapshot/my_backup/snapshot_1
      {
       "indices": ".kibana*,.security*",
       "ignore_unavailable": true,
       "include_global_state": true
      }
    • 执行如下命令,在ES 8.5版本实例中为角色和用户相关的索引创建快照snapshot_1

      说明

      ES 8.5版本创建快照命令中参数解析,请参见Create snapshot API

      PUT _snapshot/my_backup/snapshot_1
      {
       "indices": "-*",
       "ignore_unavailable": true,
       "include_global_state": true,
       "feature_states": [
       "security"
       ]
      }
  4. 确认成功创建快照。例如,执行如下命令,获取my_backup仓库中快照snapshot_1的详细信息。

    GET _snapshot/my_backup/snapshot_1

步骤三:恢复快照数据

  1. 登录目标端ES实例的Kibana控制台。具体操作,请参见登录Kibana控制台

  2. 在目标端ES实例中创建一个名称为my_restore的仓库。

    PUT _snapshot/my_restore
    {
     "type": "oss",
     "settings": {
     "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
     "access_key_id": "[your_access_key_id]",
     "secret_access_key": "[your_secret_access_key]",
     "bucket": "[your_bucket_name]",
     "compress": true,
     "chunk_size": "500mb",
     "base_path": "snapshot/"
     }
    }
  3. 将源端ES实例中的快照恢复到目标端ES实例中。

    • ES为7.10版本,在目标端进行如下操作恢复快照。

      说明

      7.10及以下版本在恢复快照前需要先关闭目标端的系统索引.kibana*.security*,并在恢复快照后尽快开启被关闭的系统索引。

      • 关闭系统索引可能会导致Elasticsearch实例功能不可用或受限。例如,关闭.kibana可能导致Kibana无法使用;关闭.security可能导致安全功能受限。

      • 建议您提前备份数据,以便在需要时进行恢复。

      • 建议在目标端ES的业务低峰期或停止服务时操作。

      • 如果Kibana控制台不能关闭这些索引,建议通过终端操作。具体操作,请参见管理Elasticsearch的curl命令

      1. 关闭目标端系统索引.kibana*.security*

        POST /<index name>/_close
      2. 恢复源端快照。

        POST /_snapshot/my_restore/snapshot_1/_restore
        {
         "indices": ".kibana*,.security*",
         "ignore_unavailable": true,
         "include_global_state": false
        }
      3. 开启目标端系统索引.kibana*.security*

        POST /<index name>/_open
    • ES为8.5版本,在目标端执行如下代码恢复快照snapshot_1

      POST _snapshot/my_restore/snapshot_1/_restore
      {
       "feature_states": [ "security" ],
       "include_global_state": false, 
       "indices": "-*" 
      }
  4. 验证角色和用户是否迁移成功。

    1. 在页面左上角,选择菜单.png > Management > Stack Management

    2. 在左侧菜单栏,选择安全 > 用户,可以看到已经将源端中角色为cj_test_role的用户kara恢复到了目标端ES上。

      image.png

迁移kibana可视化大盘

步骤一:准备环境

  1. 在源端ES实例中登录Kibana控制台。具体操作,请参见登录Kibana控制台

  2. 添加样例数据。

    说明

    以下操作步骤以ES 8.5版本为例,其他版本操作略有不同,以控制台为准。

    1. 在Kibana主页,通过添加集成开始使用区域单击试用样例数据

    2. 样例数据页签,单击其他样例数据集

    3. 单击Sample flight data数据集下的添加数据

      添加数据变为查看数据时,表示该数据集已添加完成。添加样例数据后,Kibana会自动创建一些相关的可视化。

      image.png
  3. 在Kibana控制台左上角,选择菜单.png > Analytics > Visualize Library ,在可视化大盘中查看已存在的可视化,例如【航班】到达地天气、【航班】延误与取消等。

步骤二:备份快照数据

  1. 登录源端ES实例的Kibana控制台。具体操作,请参见登录Kibana控制台

  2. 在源端ES实例中创建一个名称为my_backup的仓库。

    • 云上集群创建仓库。

      PUT _snapshot/my_backup/
      {
          "type": "oss",
          "settings": {
              "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
              "access_key_id": "xxxx",
              "secret_access_key": "xxxxxx",
              "bucket": "xxxxxx",
              "compress": true,
              "chunk_size": "500mb",
              "base_path": "snapshot/"
          }
      }
    • 8.x版本自建集群创建仓库,需要安装elasticsearch-repository-oss插件。具体操作,请参见安装elasticsearch-repository-oss插件

      说明

      关于该插件的详细信息,请参见elasticsearch-repository-oss

      PUT /_snapshot/my_backup
      {
          "type": "oss",
          "settings": {
              "oss.client.endpoint": "oss-cn-shanghai.aliyuncs.com",
              "oss.client.access_key_id": "xxx",
              "oss.client.secret_access_key": "xxx",
              "oss.client.bucket": "xxxxxx",
              "oss.client.base_path":"snapshot/",
              "oss.client.compress": true
          }
      }

    参数

    说明

    endpoint

    OSS Bucket的内网访问域名。获取方式,请参见访问域名和数据中心

    access_key_id

    用于标识用户。获取方式,请参见获取AccessKey

    secret_access_key

    用于验证用户的密钥。获取方式,请参见获取AccessKey

    bucket

    OSS Bucket的名称,需要一个已经存在的Bucket。获取方式,请参见控制台创建存储空间

    compress

    打开快照文件的压缩功能:

    • true:打开压缩功能,仅应用于元数据文件(索引映射和设置)。

    • false(默认值):不打开压缩功能,数据文件未压缩。

    chunk_size

    当您上传的数据非常大时,配置此参数可以限制快照过程中分块的大小。超过这个大小,数据将会被分块上传到OSS中。

    base_path

    仓库的起始位置,默认为根目录。可以指定具体快照的存放目录,例如snapshot/myindex/。

  3. 源端ES实例中创建快照。

    • 执行如下命令,在ES 7.10版本实例中创建快照snapshot_2

      说明

      ES 7.10版本创建快照命令中参数解析,请参见Restore snapshot API

      PUT _snapshot/my_backup/snapshot_2
      {
       "indices": ".kibana*,.security*",
       "ignore_unavailable": true,
       "include_global_state": true
      }
    • 执行如下命令,在ES 8.5版本实例中为可视化大盘相关的索引创建快照snapshot_2

      说明

      ES 8.5版本创建快照命令中参数解析,请参见Create snapshot API

      PUT _snapshot/my_backup/snapshot_2
      {
        "indices": "-*",
        "ignore_unavailable": true,
        "include_global_state": true,
        "feature_states": [
            "security","kibana"
          ]
  4. 确认成功创建快照。例如,执行如下命令,获取my_backup仓库中快照snapshot_2的详细信息。

    GET _snapshot/my_backup/snapshot_2

步骤三:恢复快照数据

  1. 登录目标端ES实例的Kibana控制台。具体操作,请参见登录Kibana控制台

  2. 在目标端ES实例中创建一个名称为my_restore的仓库。

    PUT _snapshot/my_restore
    {
     "type": "oss",
     "settings": {
     "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
     "access_key_id": "[your_access_key_id]",
     "secret_access_key": "[your_secret_access_key]",
     "bucket": "[your_bucket_name]",
     "compress": true,
     "chunk_size": "500mb",
     "base_path": "snapshot/"
     }
    }
  3. 将源端ES实例中的快照恢复到目标端ES实例中。

    • ES为7.10版本,在目标端进行如下操作恢复快照。

      说明

      7.10及以下版本在恢复快照前需要先关闭目标端的系统索引.kibana*.security*,并在恢复快照后尽快开启被关闭的系统索引。

      • 关闭系统索引可能会导致Elasticsearch实例功能不可用或受限。例如,关闭.kibana可能导致Kibana无法使用;关闭.security可能导致安全功能受限。

      • 建议您提前备份数据,以便在需要时进行恢复。

      • 建议在目标端ES的业务低峰期或停止服务时操作。

      • 如果Kibana控制台不能关闭系统索引,建议通过终端操作。具体操作,请参见管理Elasticsearch的curl命令

      1. 关闭目标端系统索引.kibana*.security*

        POST /<index name>/_close
      2. 恢复源端快照。

        POST /_snapshot/my_restore/snapshot_2/_restore
        {
         "indices": ".kibana*,.security*",
         "ignore_unavailable": true,
         "include_global_state": false
        }
      3. 开启目标端系统索引.kibana*.security*

        POST /<index name>/_open
    • ES为8.5版本,在目标端执行如下代码恢复快照snapshot_2

      POST _snapshot/my_restore/snapshot_2/_restore
      {
        "feature_states": [ "security","kibana" ],
        "include_global_state": false,    
        "indices": "-*"                   
      }
  4. 验证可视化大盘是否迁移成功。

    在页面左上角,选择菜单.png > Analytics > Visualize Library ,查看从源端复用到目标端的可视化。