暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Elasticsearch 8.17.2 升级到 9.2.4 完整升级过程

新智锦绣 2026-02-11
18

原始集群运行环境为3个节点的elasticsearch 8.17.2,全栈配置了search、observability、security三方面功能,随着elastic的版本快速更迭到9.2.4版,希望体验新功能又不愿重新安装集群,所以查阅了官方的升级方面的文档,就着手准备升级到9.2.4最新版。

操作环境信息见文末:

重要说明

⚠️升级路径要求

  • Elasticsearch不能直接从 8.17.2 升级到 9.2.4

  • 必须采用两步升级:8.17.2 → 8.19.0 → 9.2.4

  • 每个升级步骤的操作流程相同,只是版本号不同

升级流程概览

  • 第一阶段:8.17.2 升级到 8.19.0(参见第五章)

  • 第二阶段:8.19.0 升级到 9.2.4(参见第六章)

一、升级前准备工作

1.1 环境信息确认

    # 在所有节点执行,确认当前版本
    curl -XGET "https://localhost:9200" -u elastic:<password> --cacert path/to/ca.crt


    # 确认集群健康状态
    curl -XGET "https://localhost:9200/_cluster/health?pretty" -u elastic:<password> --cacert path/to/ca.crt


    # 查看节点信息
    curl -XGET "https://localhost:9200/_cat/nodes?v" -u elastic:<password> --cacert path/to/ca.crt

    1.2 重要提醒

    ⚠️Elasticsearch 8.19.0 的要求:

    • 需要 Java 17 或更高版本

    • 作为升级到 9.x 的必经中间版本

    ⚠️Elasticsearch 9.x 的重要变更:

    • 需要 Java 21 或更高版本

    • 某些已弃用的 API 可能被移除

    • 配置文件格式可能有变化

    • 插件需要重新安装兼容版本

    1.3 升级前检查清单

    • 集群状态为 green

    • 无未分配的分片

    • 磁盘空间充足(建议至少 50% 可用空间)

    • 已备份所有重要数据

    • 已记录当前配置

    • 已准备回滚方案

    二、备份策略

    2.1 创建快照仓库(如未配置)

      # 在任一节点执行
      curl -XPUT "https://localhost:9200/_snapshot/backup_repository" \
        -u elastic:<password> \
        --cacert /path/to/ca.crt \
        -H 'Content-Type: application/json' \
        -d '{
          "type""fs",
          "settings": {
            "location""/mount/backups/elasticsearch",
            "compress"true
          }
        }'

      2.2 创建完整集群快照

        # 创建快照
        curl -XPUT "https://localhost:9200/_snapshot/backup_repository/snapshot_before_upgrade_$(date +%Y%m%d)" \
          -u elastic:<password> \
          --cacert /path/to/ca.crt \
          -H 'Content-Type: application/json' \
          -d '{
            "indices""*",
            "ignore_unavailable"true,
            "include_global_state"true
          }'


        # 检查快照状态
        curl -XGET "https://localhost:9200/_snapshot/backup_repository/_all?pretty" \
          -u elastic:<password> \
          --cacert /path/to/ca.crt

        2.3 备份配置文件

          # 在所有节点执行
          mkdir -p backup/elasticsearch/config_$(date +%Y%m%d)
          cp -r etc/elasticsearch/* backup/elasticsearch/config_$(date +%Y%m%d)/
          cp -r etc/kibana/* backup/elasticsearch/config_$(date +%Y%m%d)/ # 仅在 elastic-03 执行

          三、升级兼容性检查

          3.1 运行弃用日志检查

            # 启用弃用日志
            curl -XPUT "https://localhost:9200/_cluster/settings" \
              -u elastic:<password> \
              --cacert path/to/ca.crt \
              -H 'Content-Type: application/json' \
              -d '{
                "persistent": {
                  "logger.org.elasticsearch.deprecation": "WARN"
                }
              }'


            # 检查弃用信息
            curl -XGET "https://localhost:9200/_cat/indices/.deprecation*?v" \
              -u elastic:<password> \
              --cacert path/to/ca.crt

            3.2 检查插件兼容性

              # 在所有节点查看已安装插件
              /usr/share/elasticsearch/bin/elasticsearch-plugin list

              3.3 检查 Java 版本

                # 在所有节点执行
                java -version


                # 第一阶段升级到 8.19.0 需要 Java 17+
                sudo yum install -y java-17-openjdk java-17-openjdk-devel


                # 第二阶段升级到 9.2.4 需要 Java 21+
                sudo yum install -y java-21-openjdk java-21-openjdk-devel

                四、禁用分片分配(升级前)

                4.1 禁用分片自动分配

                  curl -XPUT "https://localhost:9200/_cluster/settings" \
                    -u elastic:<password> \
                    --cacert /path/to/ca.crt \
                    -H 'Content-Type: application/json' \
                    -d '{
                      "persistent": {
                        "cluster.routing.allocation.enable""primaries"
                      }
                    }'

                  4.2 执行同步刷新

                    # 内存缓冲区(Inmemory Buffer) 中的数据永久刷新到 磁盘(Lucene Segment)中
                    curl -XPOST "https://localhost:9200/_flush \
                      -u elastic:<password> \
                      --cacert path/to/ca.crt

                    五、第一阶段:升级到 8.19.0

                    5.1 升级 elastic-01.test.cxm (192.168.31.11)

                    步骤 1:停止节点

                      # 在 elastic-01.test.cxm 执行
                      sudo systemctl stop elasticsearch

                      步骤 2:升级 Elasticsearch 到 8.19.0

                        # 下载 Elasticsearch 8.19.0
                        cd /tmp
                        wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.19.0-x86_64.rpm


                        # 升级安装
                        sudo rpm -Uvh elasticsearch-8.19.0-x86_64.rpm


                        # 验证版本
                        rpm -qa | grep elasticsearch

                        步骤 3:检查配置文件

                          # 下载 Elasticsearch 8.19.0
                          cd /tmp
                          wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.19.0-x86_64.rpm


                          # 升级安装
                          sudo rpm -Uvh elasticsearch-8.19.0-x86_64.rpm


                          # 验证版本
                          rpm -qa | grep elasticsearch

                          确认以下配置项:

                            cluster.name: your-cluster-name
                            node.name: elastic-01
                            node.roles: [ master, data, ingest ]
                            network.host: 192.168.31.11
                            http.port: 9200
                            discovery.seed_hosts: ["192.168.31.11", "192.168.31.12", "192.168.31.13"]
                            cluster.initial_master_nodes: ["elastic-01", "elastic-02", "elastic-03"]


                            # 安全配置
                            xpack.security.enabled: true
                            xpack.security.transport.ssl.enabled: true
                            xpack.security.http.ssl.enabled: true

                            步骤 4:升级插件

                              # 移除旧版本插件
                              sudo /usr/share/elasticsearch/bin/elasticsearch-plugin remove <plugin-name>
                              # 目前本人环境只有analysis-icu 插件
                              # 安装新版本兼容插件
                              sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install <plugin-name>

                              步骤 5:启动节点

                                sudo systemctl daemon-reload
                                sudo systemctl start elasticsearch
                                sudo systemctl status elasticsearch


                                # 查看日志
                                sudo tail -f var/log/elasticsearch/your-cluster-name.log

                                步骤 6:验证节点加入集群

                                  # 等待节点启动(约 1-2 分钟)
                                  sleep 60


                                  # 检查节点状态
                                  curl -XGET "https://192.168.31.12:9200/_cat/nodes?v" \
                                    -u elastic:<password> \
                                    --cacert path/to/ca.crt


                                  # 检查集群健康
                                  curl -XGET "https://192.168.31.12:9200/_cluster/health?pretty" \
                                    -u elastic:<password> \
                                    --cacert path/to/ca.crt

                                  步骤 7:重新启用分片分配并等待恢复

                                    curl -XPUT "https://192.168.31.12:9200/_cluster/settings" \
                                      -u elastic:<password> \
                                      --cacert /path/to/ca.crt \
                                      -H 'Content-Type: application/json' \
                                      -d '{
                                        "persistent": {
                                          "cluster.routing.allocation.enable""all"
                                        }
                                      }'


                                    # 监控恢复进度
                                    watch -5 'curl --XGET "https://192.168.31.12:9200/_cat/recovery?v&active_only=true" -u elastic:<password> --cacert /path/to/ca.crt'

                                    ⚠️ 等待集群状态变为 green 后再继续升级下一个节点!

                                    5.2 升级 elastic-02.test.cxm (192.168.31.12)

                                    重复 5.1 的步骤 1-7,在 elastic-02.test.cxm 节点执行。

                                    关键点:

                                    • 确保 elastic-01 已成功升级且集群状态为 green

                                    • 在步骤 1 前再次禁用分片分配(步骤 4.1)

                                    • 使用 192.168.31.11 或 192.168.31.13 来查询集群状态

                                    5.3 升级 elastic-03.test.cxm (192.168.31.13)

                                    注意:此节点运行 Kibana,需要额外步骤

                                    步骤 1:停止 Kibana

                                      # 在 elastic-03.test.cxm 执行
                                      sudo systemctl stop kibana

                                      步骤 2-7:按照 5.1 的步骤升级 Elasticsearch

                                      5.4 升级 Kibana 到 8.19.0(在 elastic-03.test.cxm 执行)

                                        # 下载 Kibana 8.19.0
                                        cd /tmp
                                        wget https://artifacts.elastic.co/downloads/kibana/kibana-8.19.0-x86_64.rpm


                                        # 升级安装
                                        sudo rpm -Uvh kibana-8.19.0-x86_64.rpm


                                        # 启动 Kibana
                                        sudo systemctl daemon-reload
                                        sudo systemctl start kibana
                                        sudo systemctl status kibana

                                        5.5 验证第一阶段升级

                                          # 检查所有节点版本(应显示 8.19.0)
                                          curl -XGET "https://192.168.31.11:9200/_cat/nodes?v&h=name,version" \
                                            -u elastic:<password> \
                                            --cacert path/to/ca.crt


                                          # 检查集群健康状态(必须为 green)
                                          curl -XGET "https://192.168.31.11:9200/_cluster/health?pretty" \
                                            -u elastic:<password> \
                                            --cacert path/to/ca.crt

                                          ⚠️ 确认集群状态为 green 且所有节点版本为 8.19.0 后,再进行第二阶段升级!


                                          六、第二阶段:升级到 9.2.4

                                          6.1 升级前准备

                                            # 再次禁用分片分配
                                            curl -XPUT "https://localhost:9200/_cluster/settings" \
                                              -u elastic:<password> \
                                              --cacert path/to/ca.crt \
                                              -H 'Content-Type: application/json' \
                                              -d '{
                                                "persistent": {
                                                  "cluster.routing.allocation.enable": "primaries"
                                                }
                                              }'


                                            # 执行同步刷新
                                            curl -XPOST "https://localhost:9200/_flush" \
                                              -u elastic:<password> \
                                              --cacert path/to/ca.crt

                                            6.2 升级 elastic-01.test.cxm (192.168.31.11)

                                            步骤 1:停止节点

                                              sudo systemctl stop elasticsearch

                                              步骤 2:升级到 9.2.4

                                                # 下载 Elasticsearch 9.2.4
                                                cd /tmp
                                                wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.2.4-x86_64.rpm


                                                # 升级安装
                                                sudo rpm -Uvh elasticsearch-9.2.4-x86_64.rpm

                                                步骤 3-7:参照第五章 5.1 的步骤 3-7 执行

                                                • 检查配置文件

                                                • 升级插件

                                                • 启动节点

                                                • 验证节点加入集群

                                                • 重新启用分片分配并等待恢复

                                                6.3 升级 elastic-02.test.cxm (192.168.31.12)

                                                重复 6.2 的所有步骤,在 elastic-02.test.cxm 节点执行。

                                                6.4 升级 elastic-03.test.cxm (192.168.31.13)

                                                步骤 1:停止 Kibana

                                                  sudo systemctl stop kibana

                                                  步骤 2:升级 Elasticsearch

                                                  按照 6.2 的步骤升级 Elasticsearch 到 9.2.4

                                                  6.5 升级 Kibana 到 9.2.4

                                                    # 下载 Kibana 9.2.4
                                                    cd /tmp
                                                    wget https://artifacts.elastic.co/downloads/kibana/kibana-9.2.4-x86_64.rpm


                                                    # 升级安装
                                                    sudo rpm -Uvh kibana-9.2.4-x86_64.rpm


                                                    # 检查配置(参照第五章 Kibana 配置)
                                                    sudo vi etc/kibana/kibana.yml


                                                    # 启动 Kibana
                                                    sudo systemctl daemon-reload
                                                    sudo systemctl start kibana
                                                    sudo systemctl status kibana

                                                    七、升级后验证

                                                    7.1 集群级别验证

                                                      # 检查集群版本(应显示 9.2.4)
                                                      curl -XGET "https://192.168.31.11:9200" -u elastic:<password> --cacert path/to/ca.crt | jq


                                                      # 检查所有节点版本(应全部为 9.2.4)
                                                      curl -XGET "https://192.168.31.11:9200/_cat/nodes?v&h=name,version,jdk" \
                                                        -u elastic:<password> \
                                                        --cacert path/to/ca.crt


                                                      # 检查集群健康状态
                                                      curl -XGET "https://192.168.31.11:9200/_cluster/health?pretty" \
                                                        -u elastic:<password> \
                                                        --cacert path/to/ca.crt


                                                      # 检查分片状态
                                                      curl -XGET "https://192.168.31.11:9200/_cat/shards?v&h=index,shard,prirep,state,node" \
                                                        -u elastic:<password> \
                                                        --cacert path/to/ca.crt | grep -v STARTED

                                                      7.2 索引级别验证

                                                        # 查看所有索引
                                                        curl -XGET "https://192.168.31.11:9200/_cat/indices?v&s=index" \
                                                          -u elastic:<password> \
                                                          --cacert path/to/ca.crt


                                                        # 测试搜索功能
                                                        curl -XGET "https://192.168.31.11:9200/_search?pretty" \
                                                          -u elastic:<password> \
                                                          --cacert path/to/ca.crt \
                                                          -H 'Content-Type: application/json' \
                                                          -d '{
                                                            "query": {
                                                              "match_all": {}
                                                            },
                                                            "size": 1
                                                          }'

                                                        7.3 Kibana 验证

                                                        • 登录 Kibana Web 界面

                                                        • 检查 Stack Management > Index Management

                                                        • 验证 Discover 功能是否正常

                                                        • 检查已有的 Dashboard 和 Visualization

                                                        7.4 性能验证

                                                          # 检查 JVM 内存使用
                                                          curl -XGET "https://192.168.31.11:9200/_nodes/stats/jvm?pretty" \
                                                            -u elastic:<password> \
                                                            --cacert /path/to/ca.crt


                                                          # 检查磁盘使用
                                                          curl -XGET "https://192.168.31.11:9200/_cat/allocation?v" \
                                                            -u elastic:<password> \
                                                            --cacert /path/to/ca.crt

                                                          八、清理工作

                                                          8.1 清理旧版本文件

                                                            # 在所有节点执行(可选,建议保留一段时间)
                                                            # 清理 8.17.2 和 8.19.0 的旧版本
                                                            sudo yum remove elasticsearch-8.17.2 elasticsearch-8.19.0

                                                            8.2 更新系统服务

                                                              # 在所有节点执行
                                                              sudo systemctl enable elasticsearch
                                                              # 在 elastic-03 执行
                                                              sudo systemctl enable kibana

                                                              九、回滚方案

                                                              ⚠️ 如果升级失败,需要回滚:

                                                              9.1 停止节点

                                                                sudo systemctl stop elasticsearch
                                                                sudo systemctl stop kibana  # 仅 elastic-03

                                                                9.2 降级到 8.17.2

                                                                  # 卸载 9.2.4
                                                                  sudo rpm -e elasticsearch


                                                                  # 重新安装 8.17.2
                                                                  sudo rpm -ivh /path/to/elasticsearch-8.17.2-x86_64.rpm


                                                                  # 恢复配置文件
                                                                  sudo cp -r /backup/elasticsearch/config_*/* /etc/elasticsearch/

                                                                  9.3 从快照恢复(如果数据损坏)

                                                                    # 恢复快照
                                                                    curl -XPOST "https://localhost:9200/_snapshot/backup_repository/snapshot_before_upgrade_*/_restore" \
                                                                      -u elastic:<password> \
                                                                      --cacert /path/to/ca.crt \
                                                                      -H 'Content-Type: application/json' \
                                                                      -d '{
                                                                        "indices""*",
                                                                        "ignore_unavailable"true,
                                                                        "include_global_state"true
                                                                      }'

                                                                    十、升级时间表建议

                                                                    阶段操作预计耗时
                                                                    准备阶段准备工作、备份1-2 小时
                                                                    第一阶段:升级到 8.19.0
                                                                    升级 elastic-0130-60 分钟
                                                                    等待恢复并验证30 分钟
                                                                    升级 elastic-0230-60 分钟
                                                                    等待恢复并验证30 分钟
                                                                    升级 elastic-0330-60 分钟
                                                                    升级 Kibana 到 8.19.015-30 分钟
                                                                    验证第一阶段30 分钟
                                                                    第二阶段:升级到 9.2.4
                                                                    升级 elastic-0130-60 分钟
                                                                    等待恢复并验证30 分钟
                                                                    升级 elastic-0230-60 分钟
                                                                    等待恢复并验证30 分钟
                                                                    升级 elastic-0330-60 分钟
                                                                    升级 Kibana 到 9.2.415-30 分钟
                                                                    最终验证30 分钟
                                                                    总计约 10-14 小时

                                                                    十一、注意事项

                                                                    • 在生产环境升级前,强烈建议在测试环境先完整演练一次

                                                                    • 选择业务低峰期进行升级

                                                                    • 必须先完成第一阶段(升级到 8.19.0)并验证成功后,再进行第二阶段

                                                                    • 每个节点升级后必须等待集群状态为 green

                                                                    • 保持快照至少 30 天

                                                                    • 升级后观察至少一周,确认无异常

                                                                    • 准备应急联系人和回滚方案

                                                                    • 如使用自定义插件,务必确认 8.19.0 和 9.2.4 的兼容性

                                                                    • 两个阶段之间建议间隔至少 1-2 天,确保第一阶段稳定运行

                                                                    十二、常见问题 FAQ

                                                                    Q1: 为什么不能直接从 8.17.2 升级到 9.2.4?

                                                                    A: Elasticsearch 的升级路径有严格限制。从 8.x 升级到 9.x 需要先升级到 8.x 系列的最新版本(8.19.0),这是官方推荐的升级路径,可以确保兼容性和数据安全。

                                                                    Q2: 两个阶段之间需要间隔多久?

                                                                    A: 建议第一阶段完成后,观察集群运行 1-2 天,确认稳定后再进行第二阶段升级。

                                                                    Q3: 如果第一阶段升级失败怎么办?

                                                                    A: 可以从快照恢复到 8.17.2,或者回滚单个节点。不要继续第二阶段升级。

                                                                    Q4: 升级过程中集群会停止服务吗?

                                                                    A: 滚动升级期间集群保持可用,但性能可能下降。建议在业务低峰期进行。

                                                                    Q5: Java 版本如何管理?

                                                                    A: 第一阶段需要 Java 17+; 第二阶段需要 Java 21+;可以同时安装多个 Java 版本,通过alternatives命令切换

                                                                    Q6: 插件需要升级吗?

                                                                    A:是的,每个阶段都需要升级插件到对应版本:第一阶段:升级到 8.19.0 兼容版本;第二阶段:升级到 9.2.4 兼容版本

                                                                    Q7: Kibana 必须和 Elasticsearch 版本一致吗?

                                                                    A:是的,Kibana 版本必须与 Elasticsearch 版本完全一致。每个阶段都需要升级 Kibana。

                                                                    十三、常见问题处理

                                                                    问题 1:节点无法加入集群

                                                                      # 检查日志
                                                                      sudo tail -200 /var/log/elasticsearch/your-cluster-name.log


                                                                      # 检查网络连通性
                                                                      telnet 192.168.31.11 9300
                                                                      telnet 192.168.31.12 9300


                                                                      # 检查证书有效性
                                                                      openssl x509 -in /etc/elasticsearch/certs/node.crt -text -noout

                                                                      问题 2:分片恢复缓慢

                                                                        # 增加恢复速度(临时)
                                                                        curl -XPUT "https://localhost:9200/_cluster/settings" \
                                                                          -u elastic:<password> \
                                                                          --cacert /path/to/ca.crt \
                                                                          -H 'Content-Type: application/json' \
                                                                          -d '{
                                                                            "transient": {
                                                                              "indices.recovery.max_bytes_per_sec""100mb",
                                                                              "cluster.routing.allocation.node_concurrent_recoveries": 4
                                                                            }
                                                                          }'

                                                                        问题 3:Kibana 无法连接 Elasticsearch

                                                                          # 重置 kibana_system 密码
                                                                          /usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system


                                                                          # 更新 kibana.yml 中的密码
                                                                          sudo vi /etc/kibana/kibana.yml
                                                                          sudo systemctl restart kibana

                                                                          附录:环境信息

                                                                          集群配置

                                                                          • 当前版本: Elasticsearch 8.17.2

                                                                          • 目标版本: Elasticsearch 9.2.4

                                                                          • 操作系统: Oracle Linux 8.5

                                                                          节点信息

                                                                          节点名称IP 地址角色备注
                                                                          elastic-01.test.cxm192.168.31.11Master, Data, Ingest-
                                                                          elastic-02.test.cxm192.168.31.12Master, Data, Ingest-
                                                                          elastic-03.test.cxm192.168.31.13Master, Data, Ingest运行 Kibana

                                                                          关键路径

                                                                          • 配置文件:/etc/elasticsearch/elasticsearch.yml

                                                                          • 数据目录:/var/lib/elasticsearch

                                                                          • 日志目录:/var/log/elasticsearch

                                                                          • 备份目录:/backup/elasticsearch

                                                                          • Kibana 配置:/etc/kibana/kibana.yml


                                                                          升级后的集群状态:

                                                                          祝升级顺利!如有任何问题,请及时查看日志并参考官方文档。


                                                                          关于公司

                                                                          感谢您关注新智锦绣科技(北京)有限公司!作为 Elastic 的 Elite 合作伙伴及 EnterpriseDB 在国内的唯一代理和服务合作伙伴,我们始终致力于技术创新和优质服务,帮助企业客户实现数据平台的高效构建与智能化管理。无论您是关注 Elastic 生态系统,还是需要 EnterpriseDB 的支持,我们都将为您提供专业的技术支持和量身定制的解决方案。

                                                                          易捷问数(NewmindExAI)

                                                                          NewmindExAI

                                                                          易捷问数(NewmindExAI)平台是新智锦绣科技(北京)有限公司自主研发的一款开箱即用的企业级一体化智能数据分析平台,基于 Apple Mac Studio 硬件,以 Elastic 为数据底座,扩展支持其它数据源,依托本地LLM/在线LLM、集成 NewRAG 智能知识库、NewFlow智能中枢工作流和 NewChat 智能聊天三大功能为一体,实现 LLM 驱动的一体化解决方案。















                                                                          欢迎关注我们,获取更多技术资讯和数字化转型方案,共创美好未来!

                                                                          Elastic 微信群

                                                                          EDB 微信群


                                                                          发现“分享”“赞”了吗,戳我看看吧




                                                                          文章转载自新智锦绣,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                                          评论