# 版本迁移与升级

URL: https://caijiao.org/elasticsearch/05.admin/03.upgrade
Source: docs/elasticsearch/05.admin/03.upgrade.md
Description: 本章介绍 Elasticsearch 升级的准备流程、工具支持和注意事项，帮助用户安全地从旧版本迁移至新版本，保障数据稳定。

随着 Elasticsearch 的持续发展，定期升级至新版本有助于获得更好的性能、安全性和功能支持。正确的升级流程可以最大限度降低服务中断和数据风险。

## 1. 升级准备

- ✅ 阅读 [官方版本兼容矩阵](https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-upgrade.html)  
- ✅ 确认当前版本是否支持**滚动升级**（rolling upgrade）或需停机  
- ✅ 备份所有关键数据与配置  
- ✅ 检查插件兼容性与自定义代码适配情况  
- ✅ 使用 [Elasticsearch Upgrade Assistant（升级助手）](https://www.elastic.co/guide/en/kibana/current/upgrade-assistant.html)

## 2. 升级方式对比

| 升级方式       | 描述                                       | 适用场景             |
|----------------|--------------------------------------------|----------------------|
| 滚动升级        | 单个节点依次下线升级，无需全停            | 支持主版本平滑迁移   |
| 停机升级        | 全部节点关闭，升级后统一恢复              | 大版本变更或重大改动 |
| 重建迁移        | 新集群部署并迁移数据（推荐使用 `reindex`） | 跨集群升级、架构重构 |

## 3. 滚动升级步骤（适用于支持的版本）

1. 设置集群为只读模式（可选）  
2. 关闭一个节点，升级其 Elasticsearch 二进制文件  
3. 启动节点并确认加入集群  
4. 重复步骤 2~3，直到所有节点完成升级  
5. （如适用）升级 Kibana 与 Beats 等配套组件

## 4. 索引兼容性与 reindex

某些升级需要重建索引：

```json
POST _reindex
{
  "source": {
    "index": "old-index"
  },
  "dest": {
    "index": "new-index"
  }
}
````

建议使用 `Elasticsearch Reindex API` 或导出数据后重新导入。

## 5. 常见问题与解决

| 问题        | 可能原因         | 建议措施            |
| --------- | ------------ | --------------- |
| 升级后索引不可读  | 映射结构不兼容      | 使用 reindex 进行重建 |
| 节点无法加入集群  | 配置不一致或安全设置变更 | 检查集群名称、TLS、角色配置 |
| 插件加载失败    | 插件与新版本不兼容    | 升级或移除不兼容插件      |
| 查询异常或字段缺失 | 字段类型变化、映射差异  | 检查字段映射与查询逻辑     |

## 6. 推荐策略

* 优先在测试环境验证升级流程
* 小版本及时更新，避免跳跃式大版本升级
* 升级时使用蓝绿部署、快照备份等容灾手段

---

通过科学规划和执行 Elasticsearch 的版本迁移与升级，可以最大限度保障服务连续性与数据安全，稳步演进你的搜索基础架构。
