web-dev-qa-db-fra.com

Comment configurer un cluster ES?

En supposant que j'ai 5 machines sur lesquelles je souhaite exécuter un cluster elasticsearch et qu'elles sont toutes connectées à un lecteur partagé. J'ai mis une copie unique d'elasticsearch sur ce lecteur partagé afin que les trois puissent le voir. Est-ce que je commence juste la recherche elastics sur ce lecteur partagé sur toutes mes machines et le regroupement fonctionnerait automatiquement de manière magique? Ou devrais-je configurer des paramètres spécifiques pour que elasticsearch réalise qu'il fonctionne sur 5 machines? Si oui, quels sont les paramètres pertinents? Dois-je m'inquiéter de la configuration des répliques ou est-ce que cela est géré automatiquement?

77
Rolando

c'est super facile.

Vous aurez besoin que chaque machine ait sa propre copie d'ElasticSearch (copiez simplement celle que vous avez maintenant). La raison en est que chaque machine/noeud, quel qu'il soit, conserve ses propres fichiers qui sont fragmentés dans le cluster.

La seule chose à faire est de modifier le fichier de configuration pour inclure le nom du cluster.

Si toutes les machines portent le même nom de cluster, elasticsearch fera le reste automatiquement (tant que les machines sont sur le même réseau).

Lisez ici pour commencer: https://www.elastic.co/guide/fr/elasticsearch/guide/current/deploy.html

Lorsque vous créez des index (où se trouvent les données), vous définissez le nombre de réplicas souhaités (ils seront répartis dans le cluster).

51
Transact Charlie

Il est généralement traité automatiquement.

Si la découverte automatique ne fonctionne pas. Editez le fichier de configuration de la recherche élastique en activant la découverte unicast

Noeud 1:

    cluster.name: mycluster
    node.name: "node1"
    node.master: true
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["node1.example.com"]

Noeud 2:

    cluster.name: mycluster
    node.name: "node2"
    node.master: false
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["node1.example.com"]

et ainsi de suite pour le noeud 3,4,5. Définissez le nœud 1 en maître et le reste en tant que nœuds de données.

Edit: Veuillez noter que par règle ES, si vous avez N noeuds, puis par convention, N/2+1 Les nœuds doivent être maîtres des mécanismes de basculement. Ils peuvent être ou non des nœuds de données.

De plus, si la détection automatique ne fonctionne pas, la raison la plus probable est que le réseau ne l’autorise pas (et donc, elle est désactivée). Si trop de pings de découverte automatique ont lieu sur plusieurs serveurs, les ressources permettant de gérer ces pings empêcheront d'autres services de s'exécuter correctement.

Par exemple, imaginez un cluster de 10 000 nœuds et les 10 000 nœuds effectuant les auto-pings.

52
KannarKK

J'ai essayé les étapes suggérées par @KannarKK sur ES 2.0.2, mais je ne pouvais pas mettre le cluster en marche. Évidemment, j'ai découvert quelque chose, comme j'avais défini le numéro de port TCP sur le maître, sur la configuration Slave discovery.zen.ping.unicast.hosts a besoin du numéro de port du maître ainsi que de l'adresse IP (numéro de port TCP) pour la découverte. Donc, lorsque j'essaie de suivre la configuration, cela fonctionne pour moi.

Noeud 1

cluster.name: mycluster
node.name: "node1"
node.master: true
node.data: true
http.port : 9200
tcp.port : 9300
discovery.zen.ping.multicast.enabled: false
# I think unicast.Host on master is redundant.
discovery.zen.ping.unicast.hosts: ["node1.example.com"]

Noeud 2

cluster.name: mycluster
node.name: "node2"
node.master: false
node.data: true
http.port : 9201
tcp.port : 9301
discovery.zen.ping.multicast.enabled: false
# The port number of Node 1
discovery.zen.ping.unicast.hosts: ["node1.example.com:9300"]
4
Somum