83 votes

Comment mettre en place un cluster ES ?

Je suppose que j'ai 5 machines sur lesquelles je veux faire tourner un cluster elasticsearch, et qu'elles sont toutes connectées à un disque partagé. Je place une copie unique d'elasticsearch sur ce disque partagé afin que les trois machines puissent le voir. Est-ce que je peux démarrer elasticsearch sur ce disque partagé sur toutes mes machines et le clustering fera automatiquement son travail ? Ou dois-je configurer des paramètres spécifiques pour que elasticsearch se rende compte qu'il fonctionne sur 5 machines ? Si c'est le cas, quels sont les paramètres à prendre en compte ? Est-ce que je dois me préoccuper de la configuration des répliques ou est-ce que c'est géré automatiquement ?

54voto

Transact Charlie Points 1070

C'est très facile.

Vous aurez besoin que chaque machine ait sa propre copie d'ElasticSearch (copiez simplement celle que vous avez maintenant) - la raison est que chaque machine / nœud va garder ses propres fichiers qui sont partagés à travers le cluster.

La seule chose à faire est d'éditer le fichier de configuration pour y inclure le nom du cluster.

Si toutes les machines ont 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/en/elasticsearch/guide/current/deploy.html

Lorsque vous créez des index (là où vont les données), vous définissez à ce moment-là le nombre de répliques que vous souhaitez (elles seront réparties dans le cluster).

53voto

KannarKK Points 191

Elle est généralement traitée automatiquement.

Si l'autodécouverte ne fonctionne pas. Modifier le fichier de configuration d'elastic search, en activant la découverte unicast

Nœud 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"]

Nœud 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 les nœuds 3, 4 et 5. Le nœud 1 est le nœud maître et les autres sont uniquement des nœuds de données.

Editer : Veuillez noter qu'en vertu de la règle du SE, si vous avez N puis par convention, N/2+1 doivent être des maîtres pour les mécanismes de basculement Ils peuvent ou non être des nœuds de données.

Par ailleurs, si la découverte automatique ne fonctionne pas, la raison la plus probable est que le réseau ne l'autorise pas (et qu'elle est donc désactivée). Si un trop grand nombre de pings de découverte automatique a lieu sur plusieurs serveurs, les ressources nécessaires pour gérer ces pings empêcheront d'autres services de fonctionner correctement.

Prenons l'exemple d'un cluster de 10 000 nœuds et de l'ensemble des 10 000 nœuds qui effectuent les "auto-pings".

7voto

Carrot Points 133

Elastic Search 7 a modifié les configurations pour l'initialisation du cluster. Il est important de noter que les instances ES communiquent en interne en utilisant la couche Transport (TCP) et non le protocole HTTP qui est normalement utilisé pour effectuer des opérations sur les indices. Voici un exemple de configuration pour un cluster de 2 machines.

cluster.name: cluster-new
node.name: node-1
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.211
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes: 
        - "node-1"
        - "node-2”

Machine 2 config:-

cluster.name: cluster-new
node.name: node-2
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.212
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes: 
        - "node-1"
        - "node-2”

cluster.name : Il doit être le même pour toutes les machines qui feront partie d'un cluster.

node.name : Identifiant de l'instance ES. Le nom de la machine est utilisé par défaut s'il n'est pas indiqué.

node.master : spécifie si cette instance ES sera maître ou non

node.data : spécifie si cette instance ES va être un nœud de données ou non (conserver les données).

bootsrap.memory_lock : Vous pouvez démarrer le cluster sans paramétrer ce drapeau. Mais il est recommandé d'activer le verrou : https://www.elastic.co/guide/en/elasticsearch/reference/master/setup-configuration-memory.html

réseau.hôte : 0.0.0.0 si vous souhaitez exposer l'instance ES sur le réseau. 0.0.0.0 est différent de 127.0.0.1 ( alias localhost ou adresse loopback). Il s'agit de toutes les adresses IPv4 de la machine. Si la machine possède plusieurs adresses IP et qu'un serveur écoute sur 0.0.0.0, le client peut atteindre la machine à partir de n'importe laquelle des adresses IPv4.

http.port : port sur lequel cette instance ES écoutera les requêtes HTTP

transport.host : L'adresse IPv4 de l'hôte (elle sera utilisée pour communiquer avec d'autres instances ES fonctionnant sur des machines différentes). Plus d'informations : https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html

transport.tcp.port : 9300 (le port où la machine acceptera les connexions tcp)

discovery.seed_hosts : Cela a été modifié dans les versions récentes. Initialiser toutes les adresses IPv4 avec le port TCP (important) des instances ES qui feront partie de ce cluster. Ce sera la même chose pour toutes les instances ES qui font partie de ce cluster.

cluster.initial_master_nodes : les noms des nœuds (node.name) des machines ES qui vont participer à l'élection du maître (prise de décision basée sur le quorum :-). https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-quorums.html#modules-discovery-quorums )

5voto

Somum Points 31

J'ai essayé les étapes suggérées par @KannarKK sur ES 2.0.2, mais je n'ai pas réussi à faire fonctionner le cluster. De toute évidence, j'ai compris quelque chose, car j'avais défini le numéro de port tcp sur le maître, sur la configuration de l'esclave discovery.zen.ping.unicast.hosts a besoin du numéro de port du maître avec l'adresse IP ( numéro de port tcp ) pour la découverte. Ainsi, lorsque j'essaie la configuration suivante, cela fonctionne pour moi.

Nœud 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"]

Nœud 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"]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X