Elasticsearch,无法获取节点锁定,以下位置是可写的

Cen*_*tAu 50 elasticsearch

Elasticsearch不会开始使用./bin/elasticsearch.它引发了以下异常:

- ElasticsearchIllegalStateException[Failed to obtain node lock, is the following location writable?: [/home/user1/elasticsearch-1.4.4/data/elasticsearch]
Run Code Online (Sandbox Code Playgroud)

我检查了同一位置的权限,该位置拥有777权限,并由user1拥有.

ls -al /home/user1/elasticsearch-1.4.4/data/elasticsearch
Run Code Online (Sandbox Code Playgroud)
drwxrwxrwx  3 user1 wheel 4096 Mar  8 13:24 .
drwxrwxrwx  3 user1 wheel 4096 Mar  8 13:00 ..
drwxrwxrwx 52 user1 wheel 4096 Mar  8 13:51 nodes
Run Code Online (Sandbox Code Playgroud)

问题是什么?

尝试在没有root访问权限的情况下在linux上运行elasticsearch 1.4.4.

kui*_*ro5 53

我有一个与Elasticsearch相关的孤立java进程.杀死它解决了锁定问题.

ps aux | grep 'java'
kill -9 <PID>
Run Code Online (Sandbox Code Playgroud)

  • 这也适用于 Dockerized Elasticsearch。我的主机没有显示任何 Elasticsearch 容器,但似乎最后一次守护进程重新启动使主机进程处于孤立状态,甚至没有在“docker ps -a”中显示。这解决了这个问题。谢谢 (2认同)

Dar*_*cks 28

我得到了同样的错误消息,但事情安装正常,权限都正确分配.

事实证明,我有一个'孤儿'的弹性搜索过程,并没有被正常的停止命令杀死.

我不得不手动杀死进程,然后重新启动elasticsearch再次工作.


Ima*_*deh 17

原因是另一个实例正在运行!
首先找到运行弹性的id.

ps aux | grep 'elastic'
Run Code Online (Sandbox Code Playgroud)

然后杀死使用kill -9 <PID_OF_RUNNING_ELASTIC>.
删除node.lock文件有一些答案,但这没有帮助,因为正在运行的实例将再次使用它!


ole*_*sii 10

在我的情况下,我在ES dir文件夹上有错误的权限.设置正确的所有者解决了它

# change owner
chown -R elasticsearch:elasticsearch /data/elasticsearch/

# to validate
ls /data/elasticsearch/ -la
# prints    
# drwxr-xr-x 2 elasticsearch elasticsearch 4096 Apr 30 14:54 CLUSTER_NAME
Run Code Online (Sandbox Code Playgroud)

  • 在 OSX 上,使用 brew,节点锁是写在`/usr/local/var/elasticsearch/nodes` 下某处的文件.lock` 文件或去核和 `rm -rf` `nodes` 文件夹。 (3认同)

Sco*_*nan 8

与这里回复的许多其他人一样,这是由目录权限错误引起的(不属于elasticsearch用户)。在我们的例子中,这是由于卸载 Elasticsearch 并重新安装(通过 yum,使用官方存储库)引起的。

截至目前,存储库nodes在卸载时不会删除该目录,但会删除elasticsearch拥有该目录的用户/组。因此,当重新安装 Elasticsearch 时,elasticsearch会创建一个新的、不同的用户/组,旧nodes目录仍然存在,但由旧 UID/GID 拥有。这就会发生冲突并导致错误。

@oleksii 提到的递归 chown 是解决方案。


Tob*_*ann 7

在我将 elasticsearch docker-image 从版本 5.6.x 升级到 6.3.y 后,由于上述错误,容器将不再启动

获取节点锁失败

在我的情况下,错误的根本原因是缺少文件权限

elasticsearch 使用的数据文件夹从主机系统挂载到容器中(在 docker-compose.yml 中声明):

    volumes:
      - /var/docker_folders/common/experimental-upgrade:/usr/share/elasticsearch/data
Run Code Online (Sandbox Code Playgroud)

由于我根本不明白的原因,elasticsearch 无法再访问该文件夹。在我为此文件夹和所有子文件夹设置非常宽松的文件权限后,容器确实再次启动

我不想重现命令来在挂载的 docker-folder 上设置那些非常宽松的访问权限,因为这很可能是一个非常糟糕的做法和安全问题。我只是想分享一个事实,即它可能不是运行 elasticsearch 的第二个进程,而实际上只是缺少对已安装文件夹的访问权限。

也许有人可以详细说明为 docker-container 中的挂载文件夹设置的适当权限?


Wal*_*owe 5

您已经运行了 ES。要证明该类型:

curl 'localhost:9200/_cat/indices?v'

如果你想在同一个机器上运行另一个实例,你可以将 elasticsearch.yml 中的 node.max_local_storage_nodes 设置为大于 1 的值。