web-dev-qa-db-fra.com

Elasticsearch, Impossible d'obtenir le verrouillage du noeud, est l'emplacement inscriptible suivant

Elasticsearch ne commencera pas à utiliser ./bin/elasticsearch. Il soulève l'exception suivante:

- ElasticsearchIllegalStateException[Failed to obtain node lock, is the following location writable?: [/home/user1/elasticsearch-1.4.4/data/elasticsearch]

J'ai vérifié les autorisations sur le même emplacement et l'emplacement dispose de 777 autorisations et appartient à l'utilisateur1.

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

Quel est le problème?

Essayer d'exécuter elasticsearch 1.4.4 sur Linux sans accès root. 

34
CentAu

J'ai eu un processus Java orphelin lié à Elasticsearch. Le tuer a résolu le problème du verrou.

ps aux | grep 'Java'
kill -9 <PID>
37
kuiro5

J'ai eu le même message d'erreur, mais tout a été bien monté et les autorisations ont été correctement attribuées.

Il s'avère que j'avais un processus elasticsearch 'orphelin' qui n'avait pas été tué par la commande normale d'arrêt.

J'ai dû arrêter manuellement le processus, puis le redémarrage d'elasticsearch a de nouveau fonctionné.

24
Darren Hicks

la raison est une autre instance en cours d'exécution!
trouve d’abord l’identifiant d’élastique.

ps aux | grep 'elastic'

puis tuez en utilisant kill -9 <PID_OF_RUNNING_ELASTIC>.
Il y avait quelques réponses pour supprimer le fichier node.lock mais cela n’a pas aidé puisque l’instance en cours le fera à nouveau!

13
Iman Mirzadeh

Dans ma situation, j'avais des autorisations erronées sur le dossier de répertoire ES. Définir le bon propriétaire a résolu le problème.

# 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
5
oleksii

Vous avez déjà ES en cours d'exécution. Pour prouver ce type:

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

Si vous souhaitez exécuter une autre instance sur la même boîte, vous pouvez définir node.max_local_storage_nodes dans elasticsearch.yml sur une valeur supérieure à 1.

3
Walker Rowe

Un autre ElasticSearch fonctionnait sur la même machine.

Commande à vérifier:netstat -nlp | grep 9200(9200 - Elastic Port) Résultat: tcp 0 0 ::: 9210 ::: * LISTEN 27462/Java

Tuez le processus par, kill -9 27462 27462 - PID de l'instance ElasticSearch

Commencez la recherche élastique et elle peut s'exécuter maintenant.

2
Gokul

Après avoir mis à niveau l'image-docker-elasticsearch de la version 5.6.x vers la version 6.3.y, le conteneur ne démarre plus en raison de l'erreur susmentionnée.

Échec d'obtention du verrouillage de noeud

Dans mon cas, la cause fondamentale de l'erreur était les autorisations de fichiers manquantes

Le dossier de données utilisé par elasticsearch a été monté depuis le système hôte dans le conteneur (déclaré dans le fichier docker-compose.yml):

    volumes:
      - /var/docker_folders/common/experimental-upgrade:/usr/share/elasticsearch/data

Elasticsearch ne peut plus accéder à ce dossier pour des raisons que je ne comprenais pas du tout. Après avoir défini des autorisations de fichier très permissives sur ce dossier et tous les sous-dossiers le conteneur a redémarré .

Je ne veux pas reproduire la commande pour définir ces droits d'accès très permissifs sur le dossier du menu fixe monté, car il s'agit très probablement d'une très mauvaise pratique et d'un problème de sécurité. Je souhaitais simplement partager le fait qu'il ne s'agirait peut-être pas d'un deuxième processus d'exécution d'elasticsearch, mais de l'absence des droits d'accès au dossier monté.

Quelqu'un pourrait peut-être préciser les droits appropriés à définir pour un dossier monté dans un conteneur de menus fixes?

2
Tobias Gassmann

Essayez ce qui suit: 1. recherchez le port 9200, par exemple: lsof -i:9200 Cela vous montrera quels processus utilisent le port 9200 . 2. tuer le (s) pid (s), par exemple répétez kill -9 pid pour chaque PID que la sortie de lsof a montré à l'étape 1 3. redémarrez elasticsearch, par exemple elasticsearch

1
Qin Kai

Dans mon cas, cette erreur est due au fait que les périphériques utilisés pour les répertoires de données configurés n’ont pas été montés à l’aide de "Sudo mount".

0
Tom Robinson

Pour moi, l'erreur était simple: j'ai créé un nouveau répertoire de données/mnt/elkdata et modifié le droit de propriété sur l'utilisateur élastique. J'ai ensuite copié les fichiers et oublié de changer de propriétaire par la suite. 

Après avoir fait cela et redémarré le nœud élastique, cela a fonctionné.

0
Faulander

Pour ajouter aux réponses ci-dessus, il peut exister d'autres scénarios dans lesquels vous pouvez obtenir une erreur.En fait, j'avais effectué une mise à jour de 5.5 à 6.3 pour elasticsearch.J'ai utilisé la configuration de composition de docker avec des volumes nommés pour les répertoires de données. Je devais faire un docker volume Prune pour enlever ceux qui étaient périmés. Après cela, je ne faisais plus face au problème.

0
ninjaas