web-dev-qa-db-fra.com

Comment configurer un seul noeud pour un seul cluster (cluster autonome) ElasticSearch

J'ai installé la recherche élastique sur mon ordinateur local, je veux le configurer comme seul noeud du cluster (serveur autonome). cela signifie que chaque fois que je crée un nouvel index, il ne sera disponible que sur mon serveur. Il ne sera pas accessible au serveur des autres. 

Mon scénario actuel, ces index sont disponibles pour d'autres serveurs (les serveurs sont formés dans un cluster), et ils peuvent apporter des modifications à mes index. Mais je n'en veux pas. 

J'ai parcouru d'autres blogs mais je n'ai pas trouvé la meilleure solution. Alors pouvez-vous s'il vous plaît laissez-moi savoir les étapes pour les mêmes? 

31
channa ly

J'ai eu la réponse de http://elasticsearch-users.115913.n3.nabble.com/How-to-isolate-elastic-search-node-from-other-nodes-td3977389.html .

Kimchy: Vous définissez le nœud sur local (true), cela signifie qu'il ne détectera pas d'autres nœuds utilisant le réseau, mais uniquement au sein de la même machine virtuelle.

dans le fichier elasticsearch/bin/elasticsearch.yml 

node.local: true # disable network
56
channa ly

Si vous utilisez un transport réseau dans votre code, cela ne fonctionnera pas, car node.local vous donne un transport local uniquement:

http://www.elasticsearch.org/guide/fr/elasticsearch/reference/current/modules-transport.html#_local_transport

L'astuce consiste alors à définir

discovery.zen.ping.multicast: false

dans votre elasticsearch.yml, ce qui empêchera votre nœud de rechercher d’autres nœuds.

http://www.elasticsearch.org/guide/fr/elasticsearch/reference/current/modules-discovery-zen.html#multicast

Je ne suis pas sûr que cela empêche les autres nœuds de découvrir le vôtre; J'avais seulement besoin que cela affecte un groupe de nœuds avec les mêmes paramètres sur le même réseau.

14
sync

Voici des informations pertinentes pour ElasticSearch 5:

Selon changelog , pour activer le mode local sur ES 5, vous devez ajouter transport.type: local à votre elasticsearch.yml au lieu de node.local: true.

14
Felix Borzik

Je voulais faire cela sans avoir à écrire/écraser un elasticsearch.yml dans mon conteneur. Ici c'est sans fichier de configuration

Définissez une variable d'environnement avant de lancer elasticsearch:

discovery.type=single-node

https://www.elastic.co/guide/fr/elasticsearch/reference/current/docker.html

3
John Culviner

Tout cela ne m'a pas aidé (et malheureusement, je n'ai pas lu la réponse de bhdrkn). Ce qui a bien fonctionné pour moi, c’était de changer le nom du cluster d’elasticsearch à chaque fois que j’avais besoin d’une instance distincte, où les nouveaux noeuds ne sont pas ajoutés automatiquement par le biais de la multidiffusion. 

Il suffit de changer cluster.name: {{elasticsearch.clustername}} dans elasticsearch.yml, par exemple. via Ansible. Ceci est particulièrement utile lors de la création d'étapes distinctes telles que Dev, Assurance qualité et Production (qui est un cas d'utilisation standard dans les environnements d'entreprise).

Et si vous utilisez logstash pour obtenir vos données dans elasticsearch, n’oubliez pas de mettre le même nom de cluster dans la section de sortie, comme suit:

output {
    elasticsearch {
        cluster => "{{ elasticsearch.clustername }}"
    }
}

Sinon, votre "logstash - *" - index ne sera pas construit correctement ...

1
jonashackt

Cela résout votre problème:

PUT /_all/_settings
{"index.number_of_replicas":0}

Testé avec ES version 5.

1
Rohlik

Si vous avez l'intention d'exécuter Elasticsearch sur un nœud unique et de pouvoir le lier à une adresse IP publique, deux paramètres importants sont les suivants:

network.Host: <PRIVATE IP OF Host>
discovery.type: single-node
0
Chandan