Elasticsearch 降级操作指南:从 7.x 降至 6.8.23
由于 Elasticsearch 7.x 与 6.x 版本差异较大(如移除 Type、API 变更等),若需兼容旧系统或修复特定漏洞(如 log4j2 漏洞),可能需要降级至 6.8.23(6.x 系列的最后一个安全更新版本)。以下是详细的降级步骤及问题解决方法。
降级前准备
- 备份数据与配置
- 备份索引数据(建议通过
snapshotAPI 创建快照,存储至外部仓库)。 - 备份原 7.x 版本的配置文件(
/etc/elasticsearch/elasticsearch.yml、/etc/sysconfig/elasticsearch等),避免降级后配置丢失。
- 备份索引数据(建议通过
- 确认版本兼容性
- 6.8.23 支持 JDK 8(不支持 JDK 11),需确保环境中已安装 JDK 8 并配置正确。
降级步骤
下载 6.8.23 版本的 RPM 包
1 | wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.23.rpm |
覆盖安装旧版本
使用 rpm -Uvh --oldpackage 命令强制安装低版本,覆盖现有 7.x 版本:
1 | rpm -Uvh --oldpackage elasticsearch-6.8.23.rpm |
--oldpackage选项允许 RPM 安装比当前版本更低的包。
配置 JAVA_HOME(6.x 版本依赖外部 JDK)
Elasticsearch 7.x 自带 JDK,而 6.x 需依赖系统安装的 JDK 8,需手动配置:
编辑
/etc/sysconfig/elasticsearch文件:1
vi /etc/sysconfig/elasticsearch
添加 JDK 路径(替换为实际 JDK 安装目录):
1
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk # 示例路径,需根据实际情况修改
修复目录权限问题
降级后可能出现日志或数据目录权限错误,需确保 elasticsearch 用户拥有读写权限:
1 | 调整日志目录权限 |
清理集群状态文件(解决版本冲突)
7.x 版本的集群状态文件(如 cluster_uuid_committed)与 6.x 不兼容,会导致启动失败,需手动清理:
进入节点状态文件目录:
1
cd /var/lib/elasticsearch/nodes/0/_state/
删除所有
.st后缀的状态文件(这些文件记录了 7.x 版本的集群元数据):1
rm -f *.st
启动 Elasticsearch 并验证
1 | 启动服务 |
成功响应示例:
1 | { |
常见问题解决
- 启动报错:
Cannot open file /var/log/elasticsearch/gc.log due to Permission denied- 原因:日志目录权限不足。
- 解决:执行
chown -R elasticsearch:elasticsearch /var/log/elasticsearch/修复权限。
- 启动报错:
Unexpected field [cluster_uuid_committed]- 原因:7.x 版本的集群状态文件与 6.x 不兼容。
- 解决:删除
/var/lib/elasticsearch/nodes/0/_state/目录下的.st文件,重启服务。
- JDK 版本不兼容(如提示
Unsupported major.minor version 55.0)- 原因:6.8.23 不支持 JDK 11(版本 55.0 对应 JDK 11)。
- 解决:安装 JDK 8 并在
/etc/sysconfig/elasticsearch中正确配置JAVA_HOME。
注意事项
- 数据兼容性:6.8.23 可读取 7.x 版本的索引数据,但需注意 7.x 中已移除的功能(如 Type)可能导致部分索引无法正常使用,建议降级前通过
reindex迁移数据至兼容格式。 - 配置文件差异:7.x 的部分配置项(如
discovery.type: single-node)在 6.x 中不支持,需参考 6.x 官方文档调整配置。 - 安全更新:6.8.23 包含 log4j2 漏洞修复,降级后需确保系统其他组件(如 Kibana、Logstash)也同步降级至 6.8.23,避免版本不兼容