2017-08-31 1 views
0

La configuration de production pour ElasticSearch dans docker se présente comme suit selon le fonctionnaire websiteDocker: Comment fonctionnent les deux containers de recherche élastique?

version: '2' 
services: 
    elasticsearch1: 
    image: docker.elastic.co/elasticsearch/elasticsearch:5.5.2 
    container_name: elasticsearch1 
    environment: 
     - cluster.name=docker-cluster 
     - bootstrap.memory_lock=true 
     - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 
    ulimits: 
     memlock: 
     soft: -1 
     hard: -1 
    mem_limit: 1g 
    volumes: 
     - esdata1:/usr/share/elasticsearch/data 
    ports: 
     - 9200:9200 
    networks: 
     - esnet 
    elasticsearch2: 
    image: docker.elastic.co/elasticsearch/elasticsearch:5.5.2 
    environment: 
     - cluster.name=docker-cluster 
     - bootstrap.memory_lock=true 
     - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 
     - "discovery.zen.ping.unicast.hosts=elasticsearch1" 
    ulimits: 
     memlock: 
     soft: -1 
     hard: -1 
    mem_limit: 1g 
    volumes: 
     - esdata2:/usr/share/elasticsearch/data 
    networks: 
     - esnet 

volumes: 
    esdata1: 
    driver: local 
    esdata2: 
    driver: local 

networks: 
    esnet: 

Elasticsearch1 est exposé, et il est également connecté à Elasticsearch2 par le réseau docker, mais ils ont leur propre stockage. Maintenant, c'est ma question. Comment fonctionne cette configuration? Est-ce que ES2 (elasticsearch2) ne fait rien jusqu'à ce que ES1 (elasticsearch1) tombe en panne, ou est-ce qu'il réplique tout? Parce que quand j'utilise l'API je vais toujours me connecter avec localhost:9200 donc j'accèderai toujours à ES1. Je ne sais pas ce que fait ES1 avec cette information par rapport à ES2.

Une autre affaire est dans mon logstash.conf je dois définir la destination de ma sortie:

output { 
    elasticsearch { hosts => ["elasticsearch1:9200"] } 
    xxx 
} 

Je garde interne sur le réseau docker (logstash est liée à elasticsearch1) mais je ne sais pas si je dois aussi définir elasticsearch2? Ou ce qui se passe maintenant.

Comment elasticsearch1 et elasticsearch2 fonctionnent-ils ensemble?

Répondre

0

Les deux instances agissent comme un cluster. Même si vous interrogez un seul nœud, votre requête est transmise en interne à tous les nœuds du cluster (2 dans votre cas) car les données sont partagées entre eux. Jetez un oeil à cette page officielle pour plus de détails: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/_basic_concepts.html

+0

Merci, je l'ai lu. Donc, si je comprends bien, c'est bien de faire toutes mes commandes/trucs sur 1 des 2 nœuds que j'ai dans mon 'cluster' ES? Je ne vois toujours pas une explication très claire sur la manipulation des données, mais j'ai vu le mot réplique? Si j'envoie des journaux à ES1, ils seront également stockés dans le volume de données de ES2? – DenCowboy

+0

C'est une chose sous le capot. Le fait est que vous pouvez atteindre n'importe laquelle des instances car il s'agissait d'une seule grande instance. La façon dont les données sont réparties entre eux dépend de la configuration, mais elle est en quelque sorte transparente pour le client. – whites11

+0

donc dans une situation idéale, il y a une sorte d'équilibreur de charge au-dessus de ES, donc je peux toucher 1 URL dans mes configurations et le load balancer l'acheminera vers l'un de mes ES. Si l'un est en panne, il utilisera l'autre – DenCowboy