elasticsearch 启动时,指定jdk的版本

本文介绍如何在CentOS 6环境下配置Elasticsearch 6.0.0使用JDK 1.8,通过修改启动脚本指定JDK路径,确保Elasticsearch能够正确运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境

服务器:centos6
操作系统:win7
工具:CRT
elasticsearch:6.0.0

场景

拿我公司举例,我公司目前都是使用jdk1.7,并且线上已经有很多程序在跑啦!所以通过修改环境的方式,肯定是不行,而启动elasticsearch.6.0,有需要jdk8

修改启动脚本

这种情况下,我们就需要在启动elasticsearch时,就需要指定jdk版本。
即修改elasticsearch的启动脚本(elasticsearch_HOME/bin/elasticsearch

[root@master01 elasticsearch-6.0.0]# vim bin/elasticsearch
# 添加以下代码
export JAVA_HOME=/home/yutao/jdk1.8.0_121/
export PATH=$JAVA_HOME/bin:$PATH

if [ -x "$JAVA_HOME/bin/java" ]; then
        JAVA="/home/yutao/jdk1.8.0_121/bin/java"
else
        JAVA=`which java`
fi

这里我也给我完整的文件:

#!/bin/bash

# CONTROLLING STARTUP:
#
# This script relies on a few environment variables to determine startup
# behavior, those variables are:
#
#   ES_PATH_CONF -- Path to config directory
#   ES_JAVA_OPTS -- External Java Opts on top of the defaults set
#
# Optionally, exact memory values can be set using the `ES_JAVA_OPTS`. Note that
# the Xms and Xmx lines in the JVM options file must be commented out. Example
# values are "512m", and "10g".
#
#   ES_JAVA_OPTS="-Xms8g -Xmx8g" ./bin/elasticsearch
# 我添加的 start
export JAVA_HOME=/home/yutao/jdk1.8.0_121/
export PATH=$JAVA_HOME/bin:$PATH
# 我添加的 end
source "`dirname "$0"`"/elasticsearch-env

parse_jvm_options() {
  if [ -f "$1" ]; then
    echo "`grep "^-" "$1" | tr '\n' ' '`"
  fi
}

ES_JVM_OPTIONS="$ES_PATH_CONF"/jvm.options

ES_JAVA_OPTS="`parse_jvm_options "$ES_JVM_OPTIONS"` $ES_JAVA_OPTS"

# 我添加的 start
if [ -x "$JAVA_HOME/bin/java" ]; then
        JAVA="/home/yutao/jdk1.8.0_121/bin/java"
else
        JAVA=`which java`
fi
# 我添加的 end

# manual parsing to find out, if process should be detached
if ! echo $* | grep -E '(^-d |-d$| -d |--daemonize$|--daemonize )' > /dev/null; then
  exec \
    "$JAVA" \
    $ES_JAVA_OPTS \
    -Des.path.home="$ES_HOME" \
    -Des.path.conf="$ES_PATH_CONF" \
    -cp "$ES_CLASSPATH" \
    org.elasticsearch.bootstrap.Elasticsearch \
    "$@"
else
  exec \
    "$JAVA" \
    $ES_JAVA_OPTS \
    -Des.path.home="$ES_HOME" \
    -Des.path.conf="$ES_PATH_CONF" \
    -cp "$ES_CLASSPATH" \
    org.elasticsearch.bootstrap.Elasticsearch \
    "$@" \
    <&- &
  retval=$?
  pid=$!
  [ $retval -eq 0 ] || exit $retval
  if [ ! -z "$ES_STARTUP_SLEEP_TIME" ]; then
    sleep $ES_STARTUP_SLEEP_TIME
  fi
  if ! ps -p $pid > /dev/null ; then
    exit 1
  fi
  exit 0
fi

exit $?

这样就修改完毕;

启动时,不要用root用户,被官方禁止啦!会报错的!

还有我发现,有时修改明明对了,启动时,还是报:

[yutao@master01 elasticsearch-6.0.0]# bin/elasticsearch
the minimum required Java version is 8; your Java version from [/usr/java/jdk1.7.0_51/jre] does not meet this requirement

有时又正常啦,不明白!

参考地址:

http://blog.youkuaiyun.com/liubenlong007/article/details/54708107

<think>嗯,用户询问的是如何在Elasticsearch中配置特定JDK版本。这个问题很实用,因为ElasticsearchJDK版本有严格要求,特别是生产环境需要精确控制。 用户可能正在部署Elasticsearch集群,遇到了JDK版本不兼容的问题。从引用内容看,用户应该已经查阅过一些资料,但需要系统化的解决方案。考虑到Elasticsearch 7.x及以上版本自带JDK的特性,需要区分两种情况说明。 第一种是使用自带JDK的情况。其实Elasticsearch从6.5版本开始就捆绑了OpenJDK,但很多用户不知道如何启用这个特性。关键点在于修改bin/elasticsearch启动脚本,通过ES_JAVA_HOME变量指向ES自带的jdk目录。这里有个细节:Linux系统需要添加export ES_JAVA_HOME=$ES_HOME/jdk/,而Windows则是set ES_JAVA_HOME=%ES_HOME%\jdk\。 第二种自定义JDK的情况更常见。用户可能有自己的JDK安装路径,或者需要特定版本JDK。这里要注意环境变量设置的优先级问题:ES_JAVA_HOME的优先级高于JAVA_HOME。在配置时需要明确说明,对于Linux系统,修改elasticsearch启动脚本时应该把export JAVA_HOME=/path/to/jdk放在脚本靠前位置,确保后续的PATH变量能正确引用。 用户可能忽略的要点是权限问题。引用[4]提到非root用户运行的要求,这在配置JDK时同样重要。如果使用自定义JDK路径,必须确保运行ES的用户对该JDK目录有读取和执行权限。另外补充一个诊断技巧:通过./elasticsearch -V命令可以验证实际使用的JDK版本,比查看日志更直接。 关于Windows用户的特殊说明也很必要。引用[5]提到bat脚本闪退问题,其实除了cmd命令行运行查看错误,还可以在elasticsearch-env.bat中插入echo语句调试JAVA路径。不过建议用户优先使用elasticsearch-service.bat注册服务,这样可以通过系统事件查看器获取更完整的错误日志。 最后想到用户可能遇到的典型报错:"could not find java; set JAVA_HOME"。这个错误通常有三个原因:JAVA_HOME路径包含空格、权限不足、或者32/64位JDK不匹配。应该在常见问题里特别说明。</think>在 Elasticsearch 中配置使用特定 JDK 版本主要有两种方法,核心在于设置正确的环境变量或修改启动脚本: ### 🛠 方法一:设置 `ES_JAVA_HOME` 环境变量(推荐) 1. **永久生效(系统级/用户级)**: * **Linux/macOS**: ```bash # 编辑 ~/.bashrc 或 ~/.bash_profile (用户级) 或 /etc/profile (系统级) export ES_JAVA_HOME=/path/to/your/jdk # 替换为你的 JDK 安装路径 export PATH=$ES_JAVA_HOME/bin:$PATH ``` 执行 `source ~/.bashrc` 使配置生效。 * **Windows**: 1. 打开“系统属性” -> “高级” -> “环境变量” 2. 新建系统变量: * 变量名:`ES_JAVA_HOME` * 变量值:`C:\Path\To\Your\JDK` (替换为你的 JDK 安装路径) 3. 将 `%ES_JAVA_HOME%\bin` 添加到 `Path` 变量的开头。 2. **临时生效(会话级)**: * 在启动 Elasticsearch **之前**,直接在终端设置: ```bash # Linux/macOS export ES_JAVA_HOME=/path/to/your/jdk ./bin/elasticsearch ``` ```batch rem Windows set ES_JAVA_HOME=C:\Path\To\Your\JDK .\bin\elasticsearch.bat ``` **原理**:Elasticsearch 启动脚本 (`bin/elasticsearch` 或 `bin/elasticsearch.bat`) 会优先检查 `ES_JAVA_HOME` 环境变量,并使用该路径下的 `java` 命令[^1][^3]。 ### 📝 方法二:直接修改 Elasticsearch 启动脚本 如果无法设置系统环境变量,可以直接编辑启动脚本: 1. **Linux/macOS**: * 打开 `bin/elasticsearch` 文件 * 在脚本开头附近(通常在 `#!/bin/bash` 之后,任何逻辑之前)添加: ```bash # 强制指定 JDK 路径 export JAVA_HOME=/path/to/your/jdk # 替换为你的 JDK 安装路径 export PATH=$JAVA_HOME/bin:$PATH ``` * 或者更精确地修改脚本中查找 Java 的部分(通常在 `if [ -x "$JAVA_HOME/bin/java" ]; then ...` 附近),直接将 `JAVA` 变量指向完整路径[^2][^3]: ```bash # 找到类似以下部分进行修改 # 替换为你的 JDK bin/java 绝对路径 JAVA="/path/to/your/jdk/bin/java" ``` 2. **Windows**: * 打开 `bin\elasticsearch.bat` 文件 * 在脚本开头附近(`@echo off` 之后)添加: ```batch rem 强制指定 JDK 路径 set JAVA_HOME=C:\Path\To\Your\JDK set PATH=%JAVA_HOME%\bin;%PATH% ``` * 或者修改设置 `JAVA` 变量的部分: ```batch rem 找到类似以下部分进行修改 set "JAVA=C:\Path\To\Your\JDK\bin\java.exe" ``` ### 🔍 验证 JDK 版本 启动 Elasticsearch 后,可以通过以下方式验证: 1. 检查启动日志(`logs/<cluster-name>.log`),开头会明确记录使用的 Java 版本和路径。 2. 使用命令行: ```bash curl -X GET "localhost:9200/_nodes/jvm?pretty" ``` 在返回的 JSON 中查找 `using_bundled_jdk` 字段(`false` 表示使用外部 JDK)和 `version` 字段。 ### ⚠ 重要注意事项 1. **权限**:确保运行 Elasticsearch 的用户(非 root 用户,如 `es` 用户)对指定JDK 目录有读取和执行权限[^4]。 2. **版本兼容性**:严格遵循 [Elasticsearch 官方文档](https://www.elastic.co/support/matrix#matrix_jvm) 要求的 JDK 版本(通常要求 LTS 版本如 8, 11, 17)。 3. **`ES_JAVA_HOME` 优先**:Elasticsearch 优先使用 `ES_JAVA_HOME`,其次是 `JAVA_HOME`。如果同时设置,`ES_JAVA_HOME` 生效[^1][^3]。 4. **Windows 闪退**:如果双击 `.bat` 文件闪退,在命令提示符 (`cmd`) 中运行 `elasticsearch.bat` 可直接查看错误信息[^5]。 ### 📚 引用说明 [^1]: Elasticsearch 启动脚本会优先检查 `ES_JAVA_HOME` 环境变量,如果找到有效的 `java` 可执行文件则使用它。 [^2]: 通过修改启动脚本并设置 `JAVA_HOME` 和 `PATH`,可以强制指定 JDK 路径。 [^3]: 最直接的方法是在脚本中找到设置 `JAVA` 变量的位置,将其指向所需 JDK 的 `java` 命令的绝对路径。 [^4]: 必须使用非 root 用户运行 ES,并确保该用户对自定义 JDK 目录有访问权限。 [^5]: Windows 下双击 `.bat` 闪退时,应在命令行中运行以查看具体错误信息。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山鬼谣me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值