ES / JVM 内存锁定。 Linux 容器 (LXD/LXC)

问题描述 投票:0回答:2

我已经看到了很多关于使用运行 ES 的 unpriv 容器进行 docker 设置等的内容。基本上,我不想建立一个简单的“产品集群”。总共有两个节点,一个物理节点(用于数据),一个用于 Injest/Master(LXD 容器)。

我遇到的问题是使用

bootstrap.memory_lock: true
作为配置选项来锁定我的 container master/injest 节点上的内存(避免交换)。

[2018-02-07T23:28:51,623][WARN ][o.e.b.JNANatives         ] Unable to lock JVM Memory: error=12, reason=Cannot allocate memory
[2018-02-07T23:28:51,624][WARN ][o.e.b.JNANatives         ] This can result in part of the JVM being swapped out.
[2018-02-07T23:28:51,625][WARN ][o.e.b.JNANatives         ] Increase RLIMIT_MEMLOCK, soft limit: 65536, hard limit: 65536
[2018-02-07T23:28:51,625][WARN ][o.e.b.JNANatives         ] These can be adjusted by modifying /etc/security/limits.conf, for example: 
    # allow user 'elasticsearch' mlockall
    elasticsearch soft memlock unlimited
    elasticsearch hard memlock unlimited
...
[1]: memory locking requested for elasticsearch process but memory is not locked

现在,鉴于 ES 用户无法调整主机上的 ulimit,这是有道理的。鉴于我对此有足够的了解,这是危险的,鉴于主机上没有 ES 用户,有没有办法/如何确保我的 unpriv 容器可以锁定它所需的内存?

elasticsearch jvm ubuntu-16.04 lxc lxd
2个回答
0
投票

我将调用此解决方案 - 在父级上设置交换,并将该设置保留为容器中的默认值。不是我在问题中所说的“正确的方式”,但足够好/接近。


0
投票

一个实际的解决方案是授予容器权限:

lxc config set container-name limits.kernel.memlock unlimited
© www.soinside.com 2019 - 2024. All rights reserved.