【问题标题】:ElasticSearch 5.0.0-aplha4 won't start without setting vm.max_map_count如果不设置 vm.max_map_count,ElasticSearch 5.0.0-aplha4 将无法启动
【发布时间】:2016-12-14 06:28:59
【问题描述】:

我希望将我的 ES 版本从 2.3 更新到 5.0.0-alpha4,以便能够使用 Ingest 节点并删除 Logstash。但是,如果没有我将 vm.max_map_count 设置为 262144,似乎 ES 5.x 版本将无法启动。我不想设置该值..我可以使用默认值 65530。谁能指导我如何获得 ES 5。 x 开始时根本没有篡改内存设置。我无权访问我希望安装 ES 的主机上的 root 用户。
错误:

java.lang.UnsupportedOperationException: seccomp unavailable: CONFIG_SECCOMP not compiled into kernel, CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER are needed
at org.elasticsearch.bootstrap.Seccomp.linuxImpl(Seccomp.java:347)
at org.elasticsearch.bootstrap.Seccomp.init(Seccomp.java:616)
[2016-08-08 07:49:55,436][INFO ][node ] [data-cum-ingest-node] initializing ...
[2016-08-08 07:49:56,048][INFO ][plugins ] [data-cum-ingest-node] modules [percolator, lang-mustache, lang-painless, reindex, aggs-matrix-stats, lang-expression, ingest-common, lang-groovy], plugins []
[2016-08-08 07:49:56,601][INFO ][env ] [data-cum-ingest-node] heap size [7.9gb], compressed ordinary object pointers [true]
[2016-08-08 07:49:57,582][INFO ][node ] [data-cum-ingest-node] initialized
[2016-08-08 07:49:57,582][INFO ][node ] [data-cum-ingest-node] starting ...
[2016-08-08 07:49:57,635][ERROR][bootstrap ] [data-cum-ingest-node] Exception
java.lang.RuntimeException: bootstrap checks failed
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
at org.elasticsearch.bootstrap.BootstrapCheck.check(BootstrapCheck.java:125)
at org.elasticsearch.bootstrap.BootstrapCheck.check(BootstrapCheck.java:85)
at org.elasticsearch.bootstrap.BootstrapCheck.check(BootstrapCheck.java:65)
at org.elasticsearch.bootstrap.Bootstrap$5.validateNodeBeforeAcceptingRequests(Bootstrap.java:178)
at org.elasticsearch.node.Node.start(Node.java:373)
at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:193)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:252)
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:96)
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:91)
at org.elasticsearch.cli.SettingCommand.execute(SettingCommand.java:54)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:91)
at org.elasticsearch.cli.Command.main(Command.java:53)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:70)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:63)
Suppressed: java.lang.IllegalStateException: max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at org.elasticsearch.bootstrap.BootstrapCheck.check(BootstrapCheck.java:126)

【问题讨论】:

    标签: elasticsearch logstash elastic-stack filebeat


    【解决方案1】:

    从 ES 5 开始,有一些 bootstrap checks 被强制执行。

    其中一项检查是Maximum map count check(仅在 Linux 上),它需要 262144 个内存映射区域,否则它将拒绝启动。

    请注意,无论 ES 在什么环境(开发或产品)中运行,都会强制执行此检查

    【讨论】:

    • 有没有办法绕过 ES 5.x 强制执行的所有检查。我正在使用 ES 5.x 来尝试使用 Ingest Nodes 功能,以便我可以删除 Logstash,因为它很重并且没有给我想要的性能?
    • 不相关,但您是否通过Logstash performance guidelines
    • 是的,我已经通过了指导方针..但是 Logstash 的调整需要更多的硬件和高端配置机器..我想知道这篇文章是否正确sematext.com/blog/2016/04/25/… 那么我可能不需要购买新的硬件。 Logstash 确实是 CPU 广泛的,如果我部署到我们的产品..它可能会消耗 CPU 性能
    • 更新:我在 5.1.1 上尝试过,即使在开发模式下,它仍然会进行检查。这使我无法在 travis.ci 中运行测试 :( 有人知道如何覆盖它吗?
    【解决方案2】:

    来自文档:

    如果 Elasticsearch 处于开发模式,任何引导程序都会检查 失败在 Elasticsearch 日志中显示为警告。如果 Elasticsearch 是 在生产模式下,任何失败的引导检查都会导致 Elasticsearch 拒绝启动。

    再次从那里:

    因此,如果 Elasticsearch 处于开发模式,我们认为它处于开发模式 不绑定也不发布到外部接口(默认),并且是 否则在生产模式下,如果它确实绑定或发布到外部 界面。

    要完全禁用检查,只需尝试将 bootstrap.ignore_system_bootstrap_checks 设置为 true

    https://www.elastic.co/guide/en/elasticsearch/reference/master/bootstrap-checks.html

    【讨论】:

    • 你指的是network.host属性。我已经将它设置为global。不确定是哪个绑定。有没有办法绕过 ES 5.x 强制执行的所有检查。我正在使用 ES 5.x 来尝试使用 Ingest Nodes 功能,以便我可以删除 Logstash,因为它很重并且没有给我想要的性能
    • 是的,那个属性。默认情况下它应该绑定到 loopback 并且 elasticsearch 将在开发模式下启动,任何自定义设置都会让 es 在生产模式下启动:elastic.co/guide/en/elasticsearch/reference/master/…
    • 如果我将该属性设置为 localhost.. 那么它可能不接受来自我希望通过 filebeat 发送日志的其他主机的连接。愚弄 ES 是否有任何 hack 或后门?
    • 进一步搜索只需尝试将bootstrap.ignore_system_bootstrap_checks 设置为true
    • 好找到@alpert!
    【解决方案3】:

    开发模式:如果您在开发模式下运行弹性搜索,我们不需要设置 max_map_count。如下运行即可

    docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:5.6.4

    生产模式::如果您在生产中运行,则需要如下设置属性。

    Linux

    vm.max_map_count 设置应该在 /etc/sysctl.conf 中永久设置:

    grep vm.max_map_count /etc/sysctl.conf

    vm.max_map_count=262144

    sysctl -w vm.max_map_count=262144

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-29
      • 2015-07-14
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 2015-12-08
      相关资源
      最近更新 更多