如何在同一台服务器上运行自定义堆大小的两个版本的ElasticSearch?

时间:2017-03-10 13:55:41

标签: elasticsearch

我需要在同一台服务器(Widows 2012 R2)上并排运行两个ElasticSearch实例(版本1.7和版本5.2.2)。当我尝试运行较新版本时,收到错误:

PS C:\Program Files\Elasticsearch\elasticsearch-5.2.2\bin> .\elasticsearch.bat
Error: encountered environment variables that are no longer supported
Use jvm.options or ES_JAVA_OPTS to configure the JVM
ES_HEAP_SIZE=8g: set -Xms8g and -Xmx8g in jvm.options or add "-Xms8g -Xmx8g" to ES_JAVA_OPTS

这是因为堆大小设置方式存在重大变化(described here)。在以前版本的ElasticSearch(1.7)中,它由环境变量设置:

ES_HEAP_SIZE = 8g

我尝试设置另一个env变量:

ES_JAVA_OPTS = -Xms8g -Xmx8g

我还通过添加

编辑了jvm.options文件
-Xms8g
-Xmx8g

但我仍然遇到同样的错误。

有没有办法在ElasticSearch 5.2.2中配置堆大小而不删除ES_HEAP_SIZE环境变量(我需要保持1.7版本并运行)?如果没有,是否可以在旧版本中设置堆大小,以便允许新版本运行?

2 个答案:

答案 0 :(得分:1)

编辑:鉴于jvm.options不是一个选项,我唯一看到的是修改你的elasticsearch/bin/elasticsearch脚本,主要是行:

ES_JAVA_OPTS="$(parse_jvm_options "$ES_JVM_OPTIONS") $ES_JAVA_OPTS" #default

于:     ES_JAVA_OPTS =“ - Xms myXmsValue -Xmx myXmxValue -someOtherOptions someValue”

根据您的需要使用其他选项和值。

答案 1 :(得分:1)

这是我发现的:

事实证明,我遇到的错误不是由ElasticSearch本身引发的,而是由运行ElasticSearch(bin\elasticsearch.bat)的批处理脚本引发的。有问题的行是:

if not "%ES_HEAP_SIZE%" == "" set bad_env_var=1
(...)
if %bad_env_var% == 1 (
    echo Error: encountered environment variables that are no longer supported
    echo Use jvm.options or ES_JAVA_OPTS to configure the JVM
    (...)
    if not "%ES_HEAP_SIZE%" == "" echo ES_HEAP_SIZE=%ES_HEAP_SIZE%: set -Xms%ES_HEAP_SIZE% and -Xmx%ES_HEAP_SIZE% in jvm.options or add "-Xms%ES_HEAP_SIZE% -Xmx%ES_HEAP_SIZE%" to ES_JAVA_OPTS
    (...)
    exit /b 1
)

据我所知,这个检查是为了帮助人们从旧版本迁移到更新版本,指出他们设置堆大小的新方法。除此之外,脚本中没有提到环境变量ES_HEAP_SIZE,所以它的'存在不应该影响ElasticSearch 5.2.2实例。根据这些观察结果,最简单的修复似乎只是简单地勾勒出支票:

rem if not "%ES_HEAP_SIZE%" == "" set bad_env_var=1

我试了一下,现在ElasticSearch的两个实例都没有问题并排运行。

要避免的另一个陷阱是不在文件和ES_JAVA_OPTS中设置堆大小,这会在部署时导致duplicate min heap size settings found错误。只需坚持文件配置。

非常感谢@asettouf,他的回答让我找到了正确的解决方案!