【问题标题】:Elasticsearch - Bootstrap checks failingElasticsearch - 引导检查失败
【发布时间】:2019-07-24 21:44:20
【问题描述】:

我正在尝试使用 Flink 5.x Elasticsearch sink 连接器将数据插入到托管在微型 VM 上的 ES 5.2.1 实例中。

由于这是一个处于开发模式的小型 VM,我无法在启动检查失败的情况下启动它以接受 9300 上的 TransportClient 远程客户端连接。

[2017-02-17T09:02:48,581][INFO ][o.e.n.Node               ] [Z_fiBnl] starting ...
[2017-02-17T09:02:48,866][INFO ][o.e.t.TransportService   ] [Z_fiBnl] publish_address {xxxxxx:9300}, bound_addresses {127.0.0.1:9300}
[2017-02-17T09:02:48,878][INFO ][o.e.b.BootstrapChecks    ] [Z_fiBnl] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks
ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max number of threads [1024] for user [xxx] is too low, increase to at least [2048]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

我尝试过以下设置,但无法启动(9200 上的 http 客户端工作正常)

transport.publish_host: 0.0.0.0
transport.bind_host: 0.0.0.0
http.host: "xxx"
http.host: 169.117.72.167
network.host: 0.0.0.0
network.publish_host: 0.0.0.0

请注意,ES 仅出于开发目的而在小型 VM 上运行,我无权更改 ex。此框的文件描述符限制。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    elasticsearch 进程的最大文件描述符 [4096] 太低, 至少增加到 [65536]

    ulimit -n 65536 
    

    或在/etc/security/limits.conf 中将nofile 设置为65536

    用户 [xxx] 的最大线程数 [1024] 太低,增加到 at 至少 [2048]

    ulimit -u 2048
    

    或者在启动elasticsearch之前将/etc/security/limits.conf中的nproc值设置为2048或以上。

    最大虚拟内存区域 vm.max_map_count [65530] 太低,增加 至少 [262144]

    /etc/sysctl.conf 中设置vm.max_map_count=262144 然后做sysctl -p

    如果您想在引导检查失败的情况下在开发环境中运行 elasticsearch:

    elasticsearch.yml中设置以下内容

    transport.host: 127.0.0.1
    http.host: 0.0.0.0
    

    请注意,您不能在开发模式下形成集群。 不要在生产环境中使用无法通过引导检查的 elasticsearch!

    【讨论】:

    • 谢谢,但我没有权限在 Unix 主机上更改 ex 的 ulimit。有没有办法设置开发模式,以便引导检查不会被调用并且传输客户端服务绑定到公共网络接口?
    • 我了解生产模式,我只是想在 Linux 上设置一个远程 ES 进程,然后使用基于 Windows 的 IDE 开发基于 TransportClient 服务的客户端?看起来我不能这样做,因为引导检查将发布主机限制为仅本地 IP?
    • 是的,很遗憾你不能在 dev 模式下这样做,只有 http 端点可以暴露在 dev 中。
    • @FarhadFarahi 第一个问题没有解决。我们需要额外的步骤吗?
    【解决方案2】:

    尝试以这种方式配置您的 elasticsearch.yml 文件:

    network.host: 0.0.0.0 http.port: 9200 transport.host: localhost transport.tcp.port: 9300

    【讨论】:

    • 谢谢,有了这个设置,我不必设置任何额外的设置,比如增加操作系统级别的文件描述符设置,这是由于启动 elasticsearch 时抱怨引导失败而需要的
    • 这就像一个魅力,你能告诉我们如何以及为什么?我认为这些设置应该默认设置。这是制作环境吗?还是只在开发中?谢谢一百万。
    【解决方案3】:

    问题是“最大虚拟内存区域 vm.max_map_count [65530] 太低,至少增加到 [262144]”

    vm.max_map_count 非常低,增加其数量即可解决问题

    1。 Linux

    检查 /etc/sysctl.conf 中的 vm.max_map_count 设置:

    grep vm.max_map_count /etc/sysctl.conf
    

    输出:vm.max_map_count=262144

    如果输出小于 262144,Apply new count as elasticsearch expects,我们有两个选项可以永久添加或临时修复。

    将变量添加到 /etc/sysctl.conf

    vm.max_map_count=262144
    

    sysctl -w vm.max_map_count=262144
    

    2。 OSX 与 Docker for Mac

    vm.max_map_count 设置必须在 xhyve 虚拟机中设置:

    screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
    

    使用 root 登录,无需密码。然后像在 Linux 上一样配置 sysctl 设置:

    sysctl -w vm.max_map_count=262144
    

    3。 OSX 与 Docker 工具箱

    vm.max_map_count 设置必须通过 docker-machine 设置:

    docker-machine ssh
    
    sudo sysctl -w vm.max_map_count=262144
    

    【讨论】:

    • 这是在 MacOS 上使用 Minikube 的解决方案github.com/kubernetes/minikube/issues/2367
    • @AndyCarlson,这是弹性搜索中max_map_count 的非常普遍的问题。与 minikube 无关。
    • 是的,我知道这不是 Minikube 错误。您的回答很棒,如果有人在 Minikube 设置中遇到此问题,我只想提供解决方案。我在尝试在 Minikube 中运行 Elasticsearch 容器时遇到了这个错误,由于解决它的步骤与使用 Docker Machine 或 Docker for Mac 有点不同,我想链接这个解决方案以帮助其他人节省一些时间。跨度>
    【解决方案4】:

    我只是添加

    transport.host: 本地主机

    它对我有用。

    【讨论】:

      【解决方案5】:

      对于弹性搜索过程的最大文件描述符[4096]太低,增加到至少[65536]

      1. 检查ulimit -n,应该是4096。
      2. 编辑/etc/security/limits.conf 并添加以下行:

        * soft nofile 65536

        * hard nofile 65536

        root soft nofile 65536

        root hard nofile 65536

      3. 编辑/etc/pam.d/common-session并添加这一行session required pam_limits.so
      4. 编辑/etc/pam.d/common-session-noninteractive并添加这一行session required pam_limits.so
      5. 重新加载会话并检查 ulimit -n,它将是 65536。

      对于最大虚拟内存区域 vm.max_map_count [65530] 太低,至少增加到 [262144]

      1. 运行以下命令sudo sh -c "echo 'vm.max_map_count=262144' >> /etc/sysctl.conf"

      参考文献

      1. https://underyx.me/2015/05/18/raising-the-maximum-number-of-file-descriptors
      2. https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html

      【讨论】:

      • 如何检查 ulimin -n ?请问我在哪里使用支票?在终端上,还是在哪个文件中?
      【解决方案6】:

      以下步骤帮助我们开始使用 ES 5.5.2。在 Azure 上使用 Ubuntu 服务器,具有 3 个主节点、3 个客户端和 8 个数据节点

      1. 确保在“/etc/security/limits.conf”中进行以下配置

      *soft memlock 无限制

      *硬内存无限制

      1. ulimit -l 无限

      2. ulimit -n 65536

      3. sudo sysctl -w vm.max_map_count=262144

      4. 确保 elasticsearch.yml 有以下配置参数

      transport.tcp.compress: true

      transport.tcp.port: 9300

      注意我们还必须停止“apparmor”服务来修复节点之间的连接问题。

      【讨论】:

        【解决方案7】:

        我能够通过使用自 ES 5.2 以来可用的以下设置来做到这一点 discovery.type:单节点 (https://www.elastic.co/guide/en/elasticsearch/reference/current/bootstrap-checks.html)

        一旦我使用该设置启动了 ES 节点,我就能够使用来自非本地主机客户端的传输客户端进行连接,这在以前是个问题。

        【讨论】:

        【解决方案8】:

        为此一直在搜索谷歌并应用不同的建议,但我认为这是一般的解决方案:

        检查进程运行时的实际限制(尽管很短):

        cat /proc/<pid>/limits
        

        你会发现类似这样的行:

        Limit                     Soft Limit           Hard Limit           Units     
        Max cpu time              unlimited            unlimited            seconds   
        Max file size             unlimited            unlimited            bytes     
        Max data size             unlimited            unlimited            bytes     
        Max stack size            8388608              unlimited            bytes     
        Max core file size        0                    unlimited            bytes 
        <truncated>    
        

        然后依赖runner或容器(在我的例子中是supervisord的minfds值),你可以解除实际的限制配置。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-11-10
          • 1970-01-01
          • 2016-06-17
          • 1970-01-01
          • 1970-01-01
          • 2018-07-11
          • 1970-01-01
          相关资源
          最近更新 更多