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

ES / JVM Memory Locking in Unpriv. Linux Container (LXD/LXC)

我已经了解了一些关于 docker 设置等使用非私有容器 运行ning ES 的内容。基本上,我不想设置一个简单的 "prod cluster"。总共有两个节点,一个物理节点(用于数据),一个用于 Injest/Master(LXD 容器)。

我 运行 遇到的问题是使用 bootstrap.memory_lock: true 作为配置选项来锁定我的 容器 上的内存(避免交换)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 用户无法在主机上调整 ulimits,这是有道理的。鉴于我对此有足够的了解是危险的,如果主机上没有 ES 用户,是否有 way/how 我可以确保我的 unpriv 容器可以锁定它需要的内存?

我将称之为已解决 - 在父级上设置 swapoff,并在容器中将该设置保留为默认值。不是我在问题中所说的 "the right way",但 good/close 就足够了。