elasticsearch Elasticsearch无法获取节点锁,以下位置是否可写,elasticsearch,elasticsearch" /> elasticsearch Elasticsearch无法获取节点锁,以下位置是否可写,elasticsearch,elasticsearch" />

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

elasticsearch Elasticsearch无法获取节点锁,以下位置是否可写,elasticsearch,elasticsearch,Elasticsearch不会开始使用/bin/Elasticsearch。 它引发了以下异常: - ElasticsearchIllegalStateException[Failed to obtain node lock, is the following location writable?: [/home/user1/elasticsearch-1.4.4/data/elasticsearch] 我检查了同一位置的权限,该位置有777个权限,由user1拥有 ls -al /home/

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

- ElasticsearchIllegalStateException[Failed to obtain node lock, is the following location writable?: [/home/user1/elasticsearch-1.4.4/data/elasticsearch]
我检查了同一位置的权限,该位置有777个权限,由user1拥有

ls -al /home/user1/elasticsearch-1.4.4/data/elasticsearch
有什么问题


正在尝试在linux上运行elasticsearch 1.4.4,但没有根访问权限

在我的情况下,我对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

在我的例子中,此错误是由于没有使用“sudo mount”装载用于配置数据目录的设备造成的。

我收到了相同的错误消息,但装载情况良好,权限分配正确

原来我有一个“孤立”的elasticsearch进程,它没有被正常的stop命令终止


我不得不手动终止该进程,然后重新启动elasticsearch。我有一个与elasticsearch相关的孤立Java进程。杀死它解决了锁的问题

ps aux | grep 'java'
kill -9 <PID>
ps aux | grep'java'
杀死-9

您已经在运行ES。要证明这一类型:

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


如果要在同一个框中运行另一个实例,可以将elasticsearch.yml中的node.max\u local\u storage\u nodes设置为大于1的值。

原因是另一个实例正在运行
首先找到running elastic的id

ps aux | grep 'elastic'
然后使用
kill-9

有一些关于删除node.lock文件的答案,但这没有帮助,因为正在运行的实例将再次删除node.lock文件

尝试以下操作: 1.查找端口9200,例如:
lsof-i:9200
这将显示哪些进程使用端口9200。 2.关闭pid,例如,对步骤1中显示的
lsof
输出的每个pid重复
kill-9 pid

3.重新启动elasticsearch,例如,
elasticsearch

我在同一台机器上运行了另一个elasticsearch

要检查的命令:netstat-nlp | grep9200(9200-弹性端口) 结果:tcp 0 0:::9210:::*侦听27462/java

通过, 杀死-927462 27462-ElasticSearch实例的PID


启动elastic search,它现在可能会运行。

要添加到上述答案,可能还有其他一些情况下会出现错误。事实上,我已经将elasticsearch从5.5更新到了6.3。我一直在使用docker compose设置,为数据目录命名卷。我必须执行
docker卷修剪
,以删除陈旧的。这样做之后,我就不再面临这个问题。

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

无法获取节点锁

在我的例子中,错误的根本原因是缺少文件权限

elasticsearch使用的数据文件夹已从主机系统装入容器(在docker compose.yml中声明):

由于我完全不理解的原因,elasticsearch无法再访问此文件夹。在我对该文件夹和所有子文件夹设置了非常许可的文件权限后,容器再次启动

我不想复制命令来设置挂载docker文件夹上的那些非常允许的访问权限,因为这很可能是一个非常糟糕的做法和安全问题。我只是想告诉大家,这可能不是elasticsearch运行的第二个过程,但实际上只是缺少对已装入文件夹的访问权限


也许有人可以详细说明为docker容器中已装入的文件夹设置的适当权限?

对我来说,错误很简单:我创建了一个新的数据目录/mnt/elkdata,并将所有权更改为elastic用户。然后我复制了文件,后来又忘了更改所有权


执行此操作并重新启动elastic节点后,它开始工作。

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

此时,repo在卸载
节点时不会删除
目录,但会删除拥有它的
elasticsearch
用户/组。因此,当重新安装Elasticsearch时,将创建一个新的、不同的
Elasticsearch
用户/组,使旧的
节点
目录仍然存在,但属于旧UID/GID。这会产生冲突并导致错误


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

chown-R elasticsearch:elasticsearch/var/lib/elasticsearch

它直接表明它没有获得锁的权限。因此需要授予权限。

检查这些选项

sudo chown 1000:1000 <directory you wish to mount>
# With docker
sudo chown 1000:1000 /data/elasticsearch/ 
OR
# With VM
sudo chown elasticsearch:elasticsearch /data/elasticsearch/

sudo chown 1000:1000
#和码头工人
sudo chown 1000:1000/数据/弹性搜索/
或
#用虚拟机
sudo chown elasticsearch:elasticsearch/data/elasticsearch/

在我的例子中,
/var/lib/elasticsearch
是缺少权限的目录(CentOS 8):

错误:java.io.IOException:无法获取/var/lib/elasticsearch/nodes/0上的锁

要修复它,请使用:

chown-R elasticsearch:elasticsearch/var/lib/elasticsearch

如果有人认为这是由以下原因引起的:

Caused by: java.lang.IllegalStateException: failed to obtain node locks, tried [[/docker/es]] with lock id [0]; maybe these locations are not writable or multiple nodes were started without increasing [node.max_local_storage_nodes] (was [1])?
解决方案是在elasticsearch.yml中设置
max\u local\u storage\u节点

node.max_local_storage_nodes: 2
在您的开发机器上,将其设置为大于1的数字

默认情况下,Elasticsearch配置为防止多个节点共享同一数据路径。要允许多个节点(例如,在开发机器上),请使用设置node.max_local_storage_nodes并将其设置为大于1的正整数

我认为那很有弹性
Caused by: java.lang.IllegalStateException: failed to obtain node locks, tried [[/docker/es]] with lock id [0]; maybe these locations are not writable or multiple nodes were started without increasing [node.max_local_storage_nodes] (was [1])?
node.max_local_storage_nodes: 2