Elasticsearch 大版本升级并非都支持滚动更新(Rolling Upgrade)。部分大版本跳跃(如 6.x 到 7.x)必须停机全量重启,只有确认目标版本路径支持滚动升级时,才能按节点逐个重启。滚动升级是升级过程中的操作策略,而非升级前的准备动作。
先说结论:先查阅官方版本升级路径确认是否支持滚动更新,若支持则按“禁用分片分配 - 升级节点 - 启用分片分配”的顺序操作,若不支持则需规划停机窗口。
- 适合:官方文档明确标注支持 Rolling Upgrade 的版本路径(如 7.17 到 8.x 特定版本)
- 先准备:全量快照备份、确认插件兼容性、升级至当前大版本的最新小版本、获取集群认证信息
- 验收:集群健康状态变绿、所有分片分配完成、业务读写正常
前置检查
1. 确认升级路径
查阅官方文档的 Upgrade Elasticsearch 页面,确认当前版本到目标版本是否支持 Rolling Upgrade。例如 6.x 到 7.x 通常要求全集群重启,而 7.17 到 8.x 支持滚动更新。如果文档要求全重启,不要强行滚动。
2. 升级至当前大版本的最新小版本
在跨大版本前,必须先将所有节点升级到当前大版本的最高补丁版本(如 7.10.0 先升到 7.17.0),这是官方强制要求的前置步骤。
3. 获取认证信息
Elasticsearch 8.x 默认开启安全认证且使用 HTTPS。执行命令前需准备 elastic 超级用户密码,若使用自签名证书需添加 -k 参数忽略证书验证。
数据备份
升级前务必创建快照。若尚未配置快照仓库,需先创建:
PUT /_snapshot/my_backup
{
"type": "fs",
"settings": {
"location": "/mnt/elasticsearch/backups",
"compress": true
}
}配置完成后执行快照:
PUT /_snapshot/my_backup/snapshot_1
{
"indices": "*",
"ignore_unavailable": true,
"include_global_state": false
}执行滚动升级
# 1. 检查集群健康 (注意替换密码和 HTTPS)
curl -k -u elastic:your_password -X GET "https://localhost:9200/_cluster/health?pretty"
# 2. 禁用分片分配(防止升级期间分片迁移)
curl -k -u elastic:your_password -X PUT "https://localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d'{
"transient": {
"cluster.routing.allocation.enable": "primaries"
}
}'
# 3. 升级单个节点后重启,待节点加入集群
# 停止服务 -> 安装新版本 -> 启动服务 -> 检查日志
# 4. 所有节点升级完成后,恢复分片分配
curl -k -u elastic:your_password -X PUT "https://localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d'{
"transient": {
"cluster.routing.allocation.enable": null
}
}'
# 5. 等待分片平衡完成
curl -k -u elastic:your_password -X GET "https://localhost:9200/_cluster/health?wait_for_status=green&pretty"验证方法
1. 集群健康状态
执行 GET /_cluster/health,确保 status 为 green。如果是 yellow,检查是否有未分配的分片。
2. 节点版本一致性
执行 GET /_cat/nodes?v,检查所有节点的 version 列是否均已显示为目标版本。
3. 分片分配状态
执行 GET /_cat/shards?v,确认没有 UNASSIGNED 状态的分片。
常见坑
- 跳过中间版本:不能直接从 7.10 跳到 8.5,必须先升到 7.17,再升 8.x。
- 插件不兼容:第三方插件(如 IK 分词器、安全插件)必须同步升级至匹配新版本,否则节点无法启动。
- 安全配置变更:8.x 版本默认开启 TLS 和安全认证,升级前需准备好证书和密码,否则节点间无法通信。
- 未禁用分配:升级过程中若不禁用分片分配,可能导致分片频繁迁移,延长升级时间甚至导致数据不一致。
- 主节点先升级:建议先升级数据节点,最后升级主节点,避免集群选举动荡。
- 命令认证缺失:ES 8.x 默认开启安全认证,curl 命令缺少
-u参数会返回 401 错误。
参考来源
- Elasticsearch Official Documentation - Rolling upgrades
- Elasticsearch Official Documentation - Upgrade Elasticsearch