> 技术文档 > Elasticsearch 集群升级实战指引—7.x 升级到 8.x_elasticsearch7升级到8

Elasticsearch 集群升级实战指引—7.x 升级到 8.x_elasticsearch7升级到8

升级Elasticsearch集群从7.x到8.x是一项复杂且关键的任务,涉及重大版本变更(如API调整、配置变更、安全功能强制启用等),可能影响集群的性能和稳定性。结合您提到的业务量增长导致索引写入变慢的问题,本指引不仅提供详细的升级步骤,还深入分析写入性能瓶颈的可能原因,并提出针对性优化方案,确保升级后集群性能提升、业务无中断。以下内容适用于中小型到大型集群,涵盖硬件、软件、配置和监控的方方面面。


一、前期准备

升级前的准备工作是成功的关键,直接决定升级过程的平滑性和数据安全性。以下是详细的准备步骤,涵盖版本确认、兼容性检查、备份、测试和性能基线评估。

1.1 确认当前版本与目标版本

  • 检查当前版本:

    • 使用API确认集群当前版本:GET /,返回的version.number应为7.x.x。

    • 建议升级到最新补丁版本(如7.17.28,截至2025年6月为7.x系列最新版),因为7.17.x支持直接滚动升级到8.x,且包含关键修复和性能优化。

    • 检查所有节点的版本一致性:GET _cat/nodes?v&h=name,version。

  • 目标版本:

    • 选择最新8.x版本(如8.18.x,截至2025年6月为最新稳定版本),以获取新功能(如增强的向量搜索、TSDB支持)和安全补丁。
    • 阅读Elastic官方8.x发布说明(https://www.elastic.co/guide/en/elasticsearch/reference/8.x/release-notes.html),关注重大变更(如_type移除、安全功能强制启用)。
  • 升级路径:

    • 7.17.x可直接滚动升级到8.x。
    • 如果集群包含6.x索引,需先在7.x环境中重新索引(reindex)到7.x格式。

1.2 检查兼容性

  • 插件兼容性:

    • 列出所有插件:GET _cat/plugins?v&s=component,检查每个插件是否有8.x版本。

    • 常见官方插件(如analysis-icu、ingest-attachment)通常有8.x版本,但第三方或自定义插件可能不兼容。

    • 若插件无8.x版本,需:

      • 联系插件开发者确认更新计划。

      • 寻找替代插件或移除插件(需评估对业务的影响)。

      • 示例:卸载不兼容插件:

        bin/elasticsearch-plugin remove <plugin_name>
  • 客户端兼容性:

    • 检查应用程序使用的客户端库(如Java High Level REST Client、Python elasticsearch-py)是否支持8.x。

    • 8.x提供7.x REST API兼容模式,但部分API(如_type相关)已移除,需修改代码。例如:

      // 7.x代码SearchRequest request = new SearchRequest(\"index_name\").types(\"doc\");// 8.x代码(移除types)SearchRequest request = new SearchRequest(\"index_name\");
    • 推荐迁移到8.x的Elasticsearch Java API或OpenSearch REST Client。

  • Elastic Stack组件:

    • 确保Kibana、Logstash、Beats版本与8.x匹配(例如,Kibana 8.18.x与Elasticsearch 8.18.x兼容)。

    • 检查Filebeat、Metricbeat的配置文件,更新输出目标为8.x集群:

      output.elasticsearch: hosts: [\"https://new-cluster:9200\"] ssl.certificate_authorities: [\"/path/to/ca.crt\"]
  • 索引兼容性:

    • 8.x不支持6.x及更早版本的索引,需在7.x环境中重新索引:

      POST _reindex{   \"source\": {   \"index\": \"old_index_6x\" }, \"dest\": {   \"index\": \"new_index_7x\" }}
    • 检查mapping是否使用已移除的功能(如_type字段、多类型索引)。示例:

      GET /index_name/_mapping

      如果mapping包含_type,需重构索引结构。

1.3 使用升级助手

  • 启用升级助手:

    • 在Kibana的Stack Management中打开Upgrade Assistant,扫描集群和索引的兼容性问题。

    • 解决报告的问题,例如:

      • 弃用API:检查是否使用了8.x移除的API,如transient集群设置:

        # 7.x transient设置(已弃用)PUT _cluster/settings{   \"transient\": {   \"indices.query.bool.max_clause_count\": 2048 }}# 8.x使用persistentPUT _cluster/settings{   \"persistent\": {   \"search.max_buckets\": 10000 }}
      • 节点角色:8.x默认启用节点角色(master、data_hot、data_warm等),检查elasticsearch.yml配置:

        node.roles: [master, data_hot]
      • 安全设置:8.x强制启用X-Pack安全功能,需配置TLS和用户认证。

  • 检查弃用日志:

    • 查看/var/log/elasticsearch/Your-Cluster-Name_deprecation.log,识别并修复所有弃用警告。

    • 示例日志:

      [WARNING][deprecation] The use of types is deprecated and will be removed in 8.0

      解决方案:移除_type字段,重构查询。

1.4 备份数据

  • 创建快照:

    • 配置快照存储库(如S3、NFS、HDFS),确保7.x和8.x集群均可访问:

      PUT _snapshot/my_backup{   \"type\": \"s3\", \"settings\": {   \"bucket\":