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
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
有什么问题?
尝试在没有root访问权限的情况下在linux上运行elasticsearch 1.4.4。
答案 0 :(得分:42)
我有一个与Elasticsearch相关的孤立java进程。杀死它解决了锁定问题。
ps aux | grep 'java'
kill -9 <PID>
答案 1 :(得分:26)
我收到了同样的错误消息,但事情安装得很好并且权限都已正确分配。
事实证明我有一个'孤儿'弹性搜索过程没有被正常停止命令杀死。
我不得不手动终止进程,然后重新启动elasticsearch再次工作。
答案 2 :(得分:14)
原因是另一个实例正在运行!
首先找到运行弹性的id。
ps aux | grep 'elastic'
然后使用kill -9 <PID_OF_RUNNING_ELASTIC>
进行杀戮
删除node.lock文件有一些答案,但这没有用,因为正在运行的实例将再次创建它!
答案 3 :(得分:9)
在我的情况下,我在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
答案 4 :(得分:3)
你已经在运行ES了。要证明这种类型:
curl&#39; localhost:9200 / _cat / indices?v&#39;
如果要在同一个框中运行另一个实例,可以将elasticsearch.yml中的node.max_local_storage_nodes设置为大于1的值。
答案 5 :(得分:3)
在将elasticsearch docker-image从5.6.x版本升级到6.3.y之后,由于上述错误,容器将不再启动
无法获取节点锁定
在我的情况下,错误的根本原因是缺少文件权限
elasticsearch使用的数据文件夹已从主机系统安装到容器中(在docker-compose.yml中声明):
volumes:
- /var/docker_folders/common/experimental-upgrade:/usr/share/elasticsearch/data
elasticsearch无法再访问此文件夹,原因我根本不了解。在我对此文件夹设置了非常允许的文件权限以及所有子文件夹后,容器确实重新启动了。
我不想重现该命令来在已安装的docker文件夹上设置那些非常宽松的访问权限,因为这很可能是一种非常糟糕的做法,并且会带来安全问题。我只想分享一个事实,那就是它可能不是第二次运行Elasticsearch,而是实际上只是缺少对已安装文件夹的访问权限。
也许有人可以详细说明在docker-container中设置挂载文件夹的适当权利?
答案 6 :(得分:2)
尝试以下方法:
1.找到端口9200,例如:lsof -i:9200
这将显示哪些进程使用端口9200。
杀死pid,例如对kill -9 pid
的输出在步骤1中显示的每个PID重复lsof
3.重启elasticsearch,例如elasticsearch
答案 7 :(得分:2)
我在同一台计算机上运行了另一个ElasticSearch。
要检查的命令: netstat -nlp | grep 9200 (9200-弹性端口) 结果:tcp 0 0 ::: 9210 ::: * LISTEN 27462 / java
通过以下方式终止该过程: 杀死-9 27462 27462-ElasticSearch实例的PID
开始弹性搜索,它可能现在开始运行。
答案 8 :(得分:1)
就我而言,/var/lib/elasticsearch
是缺少权限的目录 (CentOS 8):
错误:java.io.IOException:无法获得 /var/lib/elasticsearch/nodes/0 的锁
要修复它,请使用:
chown -R elasticsearch:elasticsearch /var/lib/elasticsearch
答案 9 :(得分:0)
就我而言,这个错误是由于未使用&#34; sudo mount&#34;安装用于配置数据目录的设备引起的。
答案 10 :(得分:0)
要添加到上述答案中,可能还会出现其他一些情况,您可能会遇到错误。事实上,我已经将Elasticsearch从5.5更新到6.3,我一直在使用docker compose设置以及命名卷数据目录。我必须执行docker volume prune
来删除陈旧的目录。这样做之后,我不再面对这个问题。
答案 11 :(得分:0)
对我来说,错误是一个简单的错误:我创建了一个新的数据目录/ mnt / elkdata并将所有权更改为弹性用户。然后,我复制了文件,然后忘记再次更改所有权。
这样做之后,重新启动了弹性节点。
答案 12 :(得分:0)
与这里的许多其他答复一样,这是由于目录权限错误(不是Elasticsearch用户所有)引起的。在我们的案例中,这是由卸载Elasticsearch并重新安装(通过yum,使用官方存储库)引起的。
目前,存储库在卸载时不会删除nodes
目录,但是会删除拥有它的elasticsearch
用户/组。因此,当重新安装Elasticsearch时,将创建一个新的不同的elasticsearch
用户/组,而旧的nodes
目录仍然存在,但由旧的UID / GID拥有。然后这会发生冲突并导致错误。
@oleksii提到的递归chown是解决方案。
答案 13 :(得分:0)
chown -R elasticsearch:elasticsearch / var / lib / elasticsearch
它直接表明它无权获取锁。因此需要授予权限。
答案 14 :(得分:0)
检查这些选项
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/
答案 15 :(得分:0)
如果有人看到这是由以下原因引起的:
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_local_storage_nodes
node.max_local_storage_nodes: 2
The docs 说在您的开发机器上将此设置为大于 1 的数字
<块引用>默认情况下,Elasticsearch 配置为防止多个节点共享同一数据路径。要允许多个节点(例如,在您的开发机器上),请使用设置 node.max_local_storage_nodes 并将其设置为大于 1 的正整数。
我认为 Elasticsearch 需要有第二个可用节点才能启动新实例。每当我尝试在 Docker 容器内重新启动 Elasticsearch 时,就会发生这种情况。如果我重新启动我的容器,那么 Elasticsearch 将在没有此设置的情况下第一次正常启动。