Elasticsearch不同版本之间存在部分不兼容的配置,如果您使用了这些配置,升级后,集群服务可能会受到影响。因此在升级前,需要通过升级检查功能,检查是否存在不兼容的配置,并进行调整。本文介绍阿里云Elasticsearch 5.6.16版本实例升级到6.3.2版本之前,需要完成的人工检查、系统兼容项检查列表,以及检查失败时的调整方法。

背景信息

检查配置兼容性时,您需要注意:
  • 版本升级时,会进行升级前检查,您需要根据检查结果查看不兼容的配置,并进行调整。具体操作步骤,请参见升级版本
  • 本文的命令都可在Kibana控制台上执行,关于如何登录Kibana控制台,请参见登录Kibana控制台

人工检查

  1. 将5.x版本中的多type索引拆分为单type索引。
    Elasticsearch从6.x版本开始,不再支持一个索引多个type。而升级后,在5.x版本中创建的多type索引,在6.x版本中依然可以正常写入,但是在6.x版本中新建多type索引时会报错。因此,建议在升级前,按照官方标准,将5.x版本中的多type索引拆分为单type索引后,再进行升级。
  2. 检查集群中是否存在处于close状态的索引。
    GET _cat/indices?v
    检查集群中close状态的索引
    • 是:在升级前,执行以下命令打开索引,以便进行升级检查。
      POST test/_open
    • 否:继续执行以下步骤。
  3. 检查集群中是否配置了跨集群访问。
    GET _cluster/settings
    • 是:在升级前取消该项配置,待升级后重新配置。
      PUT _cluster/settings
      {
        "persistent": {
          "search.remote.*": null
        },
        "transient": {
          "search.remote.*": null
        }
      }
      注意 升级后重新配置跨集群访问时需要注意:Elasticsearch 5.x版本中使用的配置参数是search.remote,而6.x版本中使用的是cluster.remote
    • 否:无需处理。

自动校验项

版本升级时,您需要单击升级检查对集群进行升级前检查,具体操作步骤请参见升级版本。单击后,系统会自动按照以下列表进行兼容性检查。

表 1. 兼容项检查列表
下表中的配置参数在6.0版本开始被废弃。详细信息,请参见Breaking changes in 6.0
注意 对于索引模板级别类配置,当模板中存在这些配置时,在版本升级后,对应模板将无法用于创建新索引。
序号 配置级别 配置信息 配置参数
1 集群级别 集群快照设置(Snapshot settings) cluster.routing.allocation.snapshot.relocation_enabled
2 集群存储限流设置(Store throttling settings) indices.store.throttle.typeindices.store.throttle.max_bytes_per_sec
3 索引级别 索引相似性设置(Similarity settings) index.similarity.base
4 索引影子副本设置(Shadow Replicas settings) index.shared_filesystemindex.shadow_replicas
5 索引存储设置(Index Store settings) index.store.type
6 索引存储限流设置(Index Store throttling settings) index.store.throttle.typeindex.store.throttle.max_bytes_per_sec
7 索引Mapping参数include_in_all设置 include_in_all
说明 该配置在6.0版本之后创建的索引中无法使用,但在5.x版本中创建的包含此配置的索引,在升级到6.x版本后,可以兼容。
8 索引创建版本设置 index.version.created
说明 该配置表示不允许跨主版本升级索引。例如,无法将在5.x版本创建的索引直接升级到7.x版本,需要将失败的索引通过reindex迁移到新索引并删除后,再进行升级。
9 索引模板级别 索引模板相似性设置(Similarity settings) index.similarity.base
10 索引模板影子副本设置(Shadow Replicas settings) index.shared_filesystemindex.shadow_replicas
11 索引模板存储设置(Index Store settings) index.store.type
12 索引模板存储限流设置(Index Store throttling settings) index.store.throttle.typeindex.store.throttle.max_bytes_per_sec
13 索引模板 Mapping参数include_in_all include_in_all
14 索引模板Mapping元字段_all _all
15 索引模板Mapping包含多个type
说明 检查索引Mapping中是否包含多个type。
说明 以上检查项均为CRITICAL(错误)级别。出现一次,即表示检查失败无法升级,此类型检查项对应配置在目标版本无法兼容。而对于WARNING(警告)级别的检查项,表示检查失败时仍可以升级,即此类型检查项对应配置在升级后将被忽略。

配置不兼容的调整方法

针对不兼容的配置项,您可以通过以下方式调整集群:
  • 集群级别

    当以下配置不兼容时,您可以取消对应配置进行调整。

    配置信息 取消配置命令
    集群快照设置(Snapshot settings)
    PUT _cluster/settings
    {
      "persistent": {
        "cluster.routing.allocation.snapshot.relocation_enabled": null
      },
      "transient": {
        "cluster.routing.allocation.snapshot.relocation_enabled": null
      }
    }
    集群存储限流设置(Store throttling settings)
    PUT _cluster/settings
    {
      "persistent": {
        "indices.store.throttle.type": null,
        "indices.store.throttle.max_bytes_per_sec": null
      },
      "transient": {
        "indices.store.throttle.type": null,
        "indices.store.throttle.max_bytes_per_sec": null
      }
    }
  • 索引级别

    当以下配置不兼容时,您可以取消对应配置进行调整。

    配置信息 取消配置命令 相关说明
    索引相似性设置(Similarity settings)
    PUT test_index/_settings
    {
       "index.similarity.base.*": null
    }
    这些配置需要关闭索引后修改,关闭后,您将无法对索引进行读写操作。修改完成后,您可以再次打开对应索引。以test_index索引为例,关闭和打开索引的命令如下:
    • 关闭索引
      POST test_index/_close
    • 打开索引
      POST test_index/_open
    索引影子副本设置(Shadow Replicas settings)
    PUT test_index/_settings
    {
        "index.shared_filesystem": null,
        "index.shadow_replicas": null
    }
    索引存储设置(Index Store settings)
    PUT test_index/_settings
    {
       "index.store.type": null
    }
    索引存储限流设置(Index Store throttling settings)
    PUT test_index/_settings
    {
      "settings": {
        "index.store.throttle.type": null,
        "index.store.throttle.max_bytes_per_sec": null
      }
    }
    说明 对于已创建的包含索引Mapping参数include_in_all的索引,升级后可以兼容,无需修复。
  • 索引模板级别

    以下以test_template索引模板为例,介绍处理索引模板类型的检查项未通过检查的调整方法:

    1. 使用GET _template/test_template获取不兼容的模板test_template。

      根据以下结果发现test_template中存在的不兼容配置包括:索引模板存储设置(Index Store settings)、索引模板Mapping元字段_all和索引模板Mapping参数include_in_all。

      {
       "test_template": {
         "order": 0,
         "template": "test_*",
         "settings": {
           "index": {
             "store": {
               "throttle": {
                 "max_bytes_per_sec": "100m"
               }
             }
           }
         },
         "mappings": {
           "test_type": {
             "_all": {
               "enabled": true
             },
             "properties": {
               "test_field": {
                 "type": "text",
                 "include_in_all": true
               }
             }
           }
         },
         "aliases": {}
       }
      }
    2. 删除模板中不兼容配置后,使用PUT _template/test_template命令更新模板。
      PUT _template/test_template
      {
         "order": 0,
         "template": "test_*",
         "settings": {
         },
         "mappings": {
           "test_type": {
             "properties": {
               "test_field": {
                 "type": "text"
               }
             }
           }
         },
         "aliases": {}
      }