web-dev-qa-db-fra.com

Comment ajouter un nouveau nœud à mon cluster Elasticsearch

Mon cluster a une santé yellow car il n'a qu'un seul nœud, les réplicas restent donc non affectés simplement parce qu'aucun autre nœud n'est disponible pour les contenir.

Je veux donc créer/ajouter un autre nœud pour qu'Elasticsearch puisse commencer à lui allouer des répliques. Je n'ai qu'une seule machine et je suis exécutant ES en tant que service .

J'ai trouvé des tonnes de sites avec des informations mais aucun d'eux ne me donne clairement comment puis-je ajouter un autre nœud à ES.

Quelqu'un peut-il m'expliquer quels fichiers dois-je modifier et quelles commandes dois-je lancer pour créer un autre nœud dans mon cluster? Dois-je exécuter deux instances ES? Comment puis-je faire ceci?

Merci d'avance.

21
Avión

CONSEILS POUR AJOUTER UN AUTRE NOEUD:

1) VERSIONS:

Il est conseillé de vérifier l'état de tous vos nœuds: http: // élastique-nœud1: 9200 /

Gardez à l'esprit que dans la plupart des cas: LA VERSION DOIT ÊTRE LA MÊME, MÊME MINEURE

{
"name" : "node2",
"cluster_name" : "xxxxxxxxxxx",
"cluster_uuid" : "n-xxxxxxxxxxxxxxx",
"version" : {
  "number" : "5.2.2",
  "build_hash" : "xxxx",
  "build_date" : "20-02-24T17:26:45.835Z",
  "build_snapshot" : false,
  "lucene_version" : "6.4.1"
},
"tagline" : "You Know, for Search"
}

Gardez à l'esprit que si vous voyez un numéro de version différent dans node1, par exemple.

  "number" : "5.2.1"

dans ce cas, vous devez mettre à jour votre nœud vers la version 5.2.2 (identique à nœud1).

2) NOEUDS ET RÉPLIQUE:

Quelle est l'utilité du nœud? Pour 3 nœuds, je ferais ceci:

curl -XPUT 'localhost:9200/_cluster/settings?pretty' -H 'Content-Type: application/json' -d'
{
  "transient": {
    "discovery.zen.minimum_master_nodes": 3
  }
}
'

Encore mieux est de modifier les paramètres dans le fichier de configuration d'Elasticsearch:

/etc/elasticsearch/elasticsearch.yml 

# need to be changed on each node (has to be unique for each node):
node.name: node1

# need to be the same in all nodes:
cluster.name: my_cluster
discovery.zen.ping.unicast.hosts: ["IP_ADDRESS_OR_HOSTNAME1", "IP_ADDRESS_OR_HOSTNAME2", "IP_ADDRESS_OR_HOSTNAME3"]

Et si vous avez 3 nœuds, voulez-vous deux répliques et une principale?

curl -XPUT 'localhost:9200/_settings?pretty' -H 'Content-Type: application/json' -d'
{
    "index" : {
        "number_of_replicas" : 2
    }
}'

3) ASSUREZ-VOUS QUE LES NŒUDS SONT ACTIVÉS

Il existe un moyen de lancer un nœud:

curl -XPUT localhost:9200/_cluster/settings -d '{
  "transient" :{
      "cluster.routing.allocation.exclude._ip" : "NODE_TO_REMOVE_IP_ADDRESS_OR_HOSTNAME"
   }
}';echo

Donc, si vous avez fait cela et que vous souhaitez maintenant ajouter le nœud: https://www.elastic.co/guide/en/elasticsearch/guide/current/_rolling_restarts.html

vous pouvez le faire avec la demande suivante (veuillez lire attentivement le lien mentionné ci-dessus):

curl -XPUT localhost:9200/_cluster/settings -d '{
  "transient" :{
        "cluster.routing.allocation.enable" : "all"
   }
}';echo

4) N'OUBLIEZ JAMAIS, RÉSEAUTAGE:

Pare-feu, réseau ... Pouvez-vous atteindre le nouveau nœud au port 9200? Le voyez-vous sur votre navigateur Web?

Peut tu

curl http://your-elasticsearch-hostname:9200/

?

CONSEILS POUR SUPPRIMER LE NOEUD DU CLUSTER:

1) SUPPRIMER AVEC L'API

curl -XPUT 'http://localhost:9200/_cluster/settings?pretty' -d '
{
  "transient" : {
    "cluster.routing.allocation.exclude._name" : "node3"
  }
}'

2) VÉRIFIEZ VOTRE FICHIER DE CONFIGURATION

Vérifiez le fichier de configuration sous: /etc/elasticsearch/elasticsearch.yml

et ne laisser que les nœuds que vous souhaitez conserver:

discovery.zen.ping.unicast.hosts:["IP_ADDRESS_OR_HOSTNAME1", "IP_ADDRESS_OR_HOSTNAME2"]

* VÉRIFIEZ VOTRE STATUT *

Vérifiez http: // elk-pipeline: 9200/_cat/shards Quel est votre statut? Vous pouvez voir: INITIALISATION Cela signifie probablement que les données sont transférées. Donc, si vos données sont volumineuses (et non sur SSD), attendez.

N'OUBLIEZ PAS

Vous pouvez voir si vos données sont actuellement en mouvement en tapant:

[watch] du /var/lib/elasticsearch/

C'est tout pour le moment. J'essaierai d'ajouter de temps en temps plus d'informations ici.

N'hésitez pas à modifier/ajouter.

13
Nimitack

Les étapes complètes sur Windows Box sont les suivantes:

  1. décompressez élastique, par exemple, dans la commande C:\ELK\élastique\run bin\service install elastic-search-x64-node01 qui créera un service nommé elastic-search-x64-node01
  2. modifier elasticsearch.yml fichier de configuration:

    cluster.name: Animals
    node.name: Snake
    node.master: true
    node.data: true
    path.data: C:\ELK\storage\data
    path.logs: C:\ELK\storage\logs
    http.port: 9200
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
    
  3. courir service manager elastic-search-x64-node01 et configurez vos règles de services et démarrez le service

  4. décompressez élastique, par exemple, à C:\ELK\élastique2\exécutez la commande bin\service install elastic-search-x64-node02 qui créera un service nommé elastic-search-x64-node02

  5. modifier elasticsearch.yml fichier de configuration:

    cluster.name: Animals
    node.name: Baboon
    node.master: false
    node.data: true
    path.data: C:\ELK\storage\data
    path.logs: C:\ELK\storage\logs
    http.port: 9201
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
    
  6. courir service manager elastic-search-x64-node02 et configurez vos règles de services et démarrez le service

À ce stade, vous avez 2 nœuds distincts (ils stockent des données dans le même dossier, mais je suis trop paresseux pour modifier path.data pour le deuxième nœud) en tant que 2 services Windows distincts et GET http://localhost:9200/_cluster/health montre quelque chose comme:

{
  "cluster_name": "Animals",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 2,
  "number_of_data_nodes": 2,
  "active_primary_shards": 4,
  "active_shards": 8,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 100
}
8
laggerok19

Tout d'abord, vous pouvez supprimer les répliques pour revenir à un état vert, vous pouvez le faire même après avoir créé l'index et y ajouté des documents.

Voici comment définir le nombre de réplicas à 0:

curl -XPUT 'localhost:9200/my_index/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}'

Si vous souhaitez simplement ajouter un autre nœud à votre cluster, vous devrez modifier le elasticsearch.yml, de préférence sur vos deux nœuds avec ces modifications:

cluster.name: my-cluster
node.name: node01
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["192.168.0.5"]

Définissez les hôtes unicast sur chaque nœud pour référencer l'autre, définissez le nom du cluster sur les deux nœuds et donnez à chaque nœud un nom unique, puis redémarrez les deux instances ES et votre cluster doit être en ligne.

6
Or Weinberger

Je ne sais pas quelle est votre question ici. Vous avez deux possibilités.

1) Vous avez deux nœuds et vous voulez qu'ils puissent se voir. Il y a beaucoup de documentation pour cela partout dans le monde. Si tel est le cas, je vous suggère de tester pour vous assurer que chaque hôte peut parler à l'autre, c'est-à-dire: ssh dans l'hôte A et essayer de boucler l'hôte B: 9200, et vice versa. Vous voudrez également vous assurer que vos configurations sont définies correctement.

2) Vous souhaitez configurer un "cluster" sur votre machine locale. Dans ce cas, vous aurez besoin de deux fichiers de configuration distincts, et vous devrez démarrer elasticsearch en utilisant un fichier de configuration spécifique pour votre deuxième `` nœud '' (ainsi que modifier la deuxième configuration pour utiliser différents ports, etc.). Vous voudrez peut-être consulter ce lien: http://www.concept47.com/austin_web_developer_blog/elasticsearch/how-to-run-multiple-elasticsearch-nodes-on-one-machine/

Mais oui, en fin de compte, vous devez exécuter les processus Elasticsearch, qu'ils soient tous deux sur la même machine ou que deux machines différentes dépendent de vous.

1
sinneduy

Si vous exécutez Elasticsearch n local, allez simplement sur un autre terminal et réexécutez elasticsearch. De cette façon, vous aurez deux instances.

Vous verrez le message suivant sur la nouvelle instance exécutée:

[Black Widow] detected_master [N'Garai]

Sur une instance déjà en cours d'exécution (master node)

[N'Garai] added {[Black Widow]

En supposant [N'Garai] et {[Black Widow] pour être des noms de nœuds aléatoires.

0
Richa