Elasticsearch 6.8 升级到 7.10 有哪些兼容性破坏变更需要注意?

文章导读
从 Elasticsearch 6.8 升级到 7.10 属于跨主版本升级,涉及底层架构调整,必须注意集群发现机制、映射类型移除以及配置参数的变更。建议在测试环境验证兼容性后再生产执行。
📋 目录
  1. 核心兼容性破坏变更(Breaking Changes)
  2. 升级助手与兼容性检查实战
  3. 配置参数变更与迁移
  4. 映射类型迁移步骤
  5. 安全认证配置风险
  6. 怎么验证是否生效
  7. 客户端驱动兼容性
  8. 常见坑
  9. 参考来源
A A

从 Elasticsearch 6.8 升级到 7.10 属于跨主版本升级,涉及底层架构调整,必须注意集群发现机制、映射类型移除以及配置参数的变更。建议在测试环境验证兼容性后再生产执行。

先说结论:这是一次涉及架构调整的升级,不能直接平滑过渡,需预留停机窗口或采用滚动升级策略。

  • 适合:业务可接受短暂停机或具备滚动升级条件的集群
  • 先准备:备份数据、检查索引映射、更新配置文件、生成安全证书(如需开启认证)
  • 验收:验证集群健康状态、索引映射结构及典型查询兼容性

核心兼容性破坏变更(Breaking Changes)

6.x 到 7.x 的核心变更直接影响数据结构和集群通信,以下是必须排查的点:

  • 映射类型(Mapping Types)移除:7.x 索引不再支持多个类型(_type),每个索引只能有一个类型。6.x 中多类型索引需迁移。
  • 集群发现机制重构:移除 Zen Discovery,改用基于投票的协调层。配置项 discovery.zen.ping.unicast.hosts 废弃,改为 discovery.seed_hosts
  • 默认配置变更:minimum_master_nodes 配置项被移除,集群自动管理主节点选举。
  • REST API 变更:部分 API 路径参数调整,如 _all 字段默认禁用。

升级助手与兼容性检查实战

升级前务必使用 Kibana 自带的 Upgrade Assistant 或手动调用 API 检查隐性兼容问题。

1. 使用 Upgrade Assistant(推荐)

在 6.8 对应的 Kibana 中,进入 Management > Upgrade Assistant,系统会自动扫描索引和配置并给出修复建议。

2. 手动 API 检查

若无法使用 Kibana,可通过 Dev Tools 执行以下命令排查:

// 检查是否存在多类型索引(7.x 不支持)
GET _cat/indices?v&h=index,pri,rep,docs.count
GET _mapping | grep "\"types\""

// 检查废弃特性(需 X-Pack 许可)
GET _deprecated_features

若发现多类型索引,需使用 Reindex API 将数据迁移到单类型索引。

配置参数变更与迁移

升级前需修改 elasticsearch.yml,以下是关键配置对比:

Elasticsearch 6.8 升级到 7.10 有哪些兼容性破坏变更需要注意?
配置项6.8 写法7.10 写法说明
发现主机discovery.zen.ping.unicast.hostsdiscovery.seed_hosts节点发现列表
主节点选举discovery.zen.minimum_master_nodes(移除)7.x 自动处理,无需配置
集群初始化cluster.initial_master_nodes仅在新集群首次启动时配置

注意:滚动升级期间,6.x 节点和 7.x 节点共存时,发现配置需兼容两者,建议先更新为 7.x 格式但保持旧值兼容,或分批次重启。

映射类型迁移步骤

若存在多类型索引,需在升级前完成数据迁移。示例如下:

// 创建新索引(单类型)
PUT /new_index
{
  "mappings": {
    "properties": {
      "field1": { "type": "text" }
    }
  }
}

// 重新索引数据
POST _reindex
{
  "source": { "index": "old_index" },
  "dest": { "index": "new_index" }
}

安全认证配置风险

若升级涉及开启 X-Pack 安全认证(xpack.security.enabled: true),必须提前完成证书配置,否则节点间通信将失败导致集群不可用。

前置步骤:

  1. 使用 elasticsearch-certutil 生成 CA 和节点证书。
  2. elasticsearch.yml 中配置 xpack.security.transport.ssl.enabled: true 及证书路径。
  3. 运行 elasticsearch-setup-passwords 初始化超级用户密码。
  4. 最后开启安全认证并重启。

怎么验证是否生效

升级完成后,重点验证数据结构兼容性和业务查询正常性:

  1. 集群健康检查:确认状态为绿色,无未分配分片。
    GET _cluster/health?wait_for_status=green&timeout=1m
  2. 映射结构验证:确认索引映射中不再包含 _type 多层结构。
    GET //_mapping
  3. 业务查询验证:执行典型业务查询,确认无语法报错,特别是涉及类型指定的查询需移除类型参数。

客户端驱动兼容性

服务端升级后,客户端驱动也需对应升级,否则可能因协议差异导致连接失败:

  • Java High Level REST Client:建议使用 7.10 版本客户端连接 7.10 服务端。
  • Python/Go 客户端:检查官方文档确认版本支持矩阵,旧版客户端可能无法解析新版响应结构。

常见坑

  • 映射类型冲突:6.x 支持多个类型,7.x 强制单类型,升级前需合并或迁移数据。
  • 发现配置遗留:旧版 Zen 发现配置未清理会导致节点无法加入新集群。
  • 跨版本跳跃:禁止跨主版本跳跃升级,如不能从 6.8 直接跳到 8.0,中间至少得经过 7.x 版本。
  • 插件兼容性:第三方插件(如 IK 分词器)需重新编译匹配 7.10 版本,否则会导致节点启动失败。

参考来源