0%

elasticsearch降级

Elasticsearch 降级操作指南:从 7.x 降至 6.8.23

由于 Elasticsearch 7.x 与 6.x 版本差异较大(如移除 Type、API 变更等),若需兼容旧系统或修复特定漏洞(如 log4j2 漏洞),可能需要降级至 6.8.23(6.x 系列的最后一个安全更新版本)。以下是详细的降级步骤及问题解决方法。

降级前准备

  1. 备份数据与配置
    • 备份索引数据(建议通过 snapshot API 创建快照,存储至外部仓库)。
    • 备份原 7.x 版本的配置文件(/etc/elasticsearch/elasticsearch.yml/etc/sysconfig/elasticsearch 等),避免降级后配置丢失。
  2. 确认版本兼容性
    • 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,需手动配置:

  1. 编辑 /etc/sysconfig/elasticsearch 文件:

    1
    vi /etc/sysconfig/elasticsearch
  2. 添加 JDK 路径(替换为实际 JDK 安装目录):

    1
    JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk  # 示例路径,需根据实际情况修改

修复目录权限问题

降级后可能出现日志或数据目录权限错误,需确保 elasticsearch 用户拥有读写权限:

1
2
3
4
5
# 调整日志目录权限
chown -R elasticsearch:elasticsearch /var/log/elasticsearch/

# 调整数据目录权限
chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/

清理集群状态文件(解决版本冲突)

7.x 版本的集群状态文件(如 cluster_uuid_committed)与 6.x 不兼容,会导致启动失败,需手动清理:

  1. 进入节点状态文件目录:

    1
    cd /var/lib/elasticsearch/nodes/0/_state/
  2. 删除所有 .st 后缀的状态文件(这些文件记录了 7.x 版本的集群元数据):

    1
    rm -f *.st

启动 Elasticsearch 并验证

1
2
3
4
5
6
7
8
# 启动服务
systemctl start elasticsearch

# 查看状态(确保为 active (running))
systemctl status elasticsearch

# 验证版本(应显示 6.8.23)
curl http://localhost:9200?pretty

成功响应示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"name" : "node-1",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "xxxxxxxxxxxx",
"version" : {
"number" : "6.8.23",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "4f67856",
"build_date" : "2022-01-06T21:30:50.087716Z",
"build_snapshot" : false,
"lucene_version" : "7.7.3",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}

常见问题解决

  1. 启动报错:Cannot open file /var/log/elasticsearch/gc.log due to Permission denied
    • 原因:日志目录权限不足。
    • 解决:执行 chown -R elasticsearch:elasticsearch /var/log/elasticsearch/ 修复权限。
  2. 启动报错:Unexpected field [cluster_uuid_committed]
    • 原因:7.x 版本的集群状态文件与 6.x 不兼容。
    • 解决:删除 /var/lib/elasticsearch/nodes/0/_state/ 目录下的 .st 文件,重启服务。
  3. 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,避免版本不兼容

欢迎关注我的其它发布渠道