从 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,以下是关键配置对比:
| 配置项 | 6.8 写法 | 7.10 写法 | 说明 |
|---|---|---|---|
| 发现主机 | discovery.zen.ping.unicast.hosts | discovery.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),必须提前完成证书配置,否则节点间通信将失败导致集群不可用。
前置步骤:
- 使用
elasticsearch-certutil生成 CA 和节点证书。 - 在
elasticsearch.yml中配置xpack.security.transport.ssl.enabled: true及证书路径。 - 运行
elasticsearch-setup-passwords初始化超级用户密码。 - 最后开启安全认证并重启。
怎么验证是否生效
升级完成后,重点验证数据结构兼容性和业务查询正常性:
- 集群健康检查:确认状态为绿色,无未分配分片。
GET _cluster/health?wait_for_status=green&timeout=1m - 映射结构验证:确认索引映射中不再包含
_type多层结构。GET //_mapping - 业务查询验证:执行典型业务查询,确认无语法报错,特别是涉及类型指定的查询需移除类型参数。
客户端驱动兼容性
服务端升级后,客户端驱动也需对应升级,否则可能因协议差异导致连接失败:
- 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 版本,否则会导致节点启动失败。