oss elastic compose elasticsearch docker cluster-computing

compose - Elasticsearch en clúster contenedor de ventana acoplable



elasticsearch docker-compose (3)

Quiero ejecutar 2 instancias de ElasticSeach en 2 hosts diferentes. Construí mi propia imagen docker basada en Ubuntu 14.04 y la versión 1.3.2 de elasticsearch. Si ejecuto el contenedor 2 ES en 1 host, cada instancia ve la otra y se puede comunicar, pero cuando ejecuto 2 instancias de ES en 2 host diferentes, no funcionó. El puerto 9300 del contenedor está vinculado al puerto del host 9300.

Mi pregunta es: ¿es posible crear un clúster de ES con mi configuración?

Saludos cordiales, Lucas Rival


Debería poder comunicar los dos contenedores que se ejecutan en hosts diferentes en la medida en que se pueda acceder a las máquinas host entre ellos en los puertos necesarios. Creo que su problema es que está tratando de usar el descubrimiento de multidifusión de ElasticSearch, pero si luego necesita exponer también el puerto 54328 de los contenedores. Si no funciona, también puede intentar configurar ElasticSearch mediante unicast, configurando adecuadamente las IP de las máquinas en su elasticsearch.yml.


Usar docker-compose es mucho más fácil que ejecutarlo manualmente en la línea de comandos:

elasticsearch_master: image: elasticsearch:latest command: "elasticsearch -Des.cluster.name=workagram -Des.node.master=true -Des.node.data=false" environment: - ES_HEAP_SIZE=512m ports: - "9200:9200" - "9300:9300" elasticsearch1: image: elasticsearch:latest command: "elasticsearch -Des.cluster.name=workagram -Des.discovery.zen.ping.unicast.hosts=elasticsearch_master" links: - elasticsearch_master volumes: - "/opt/elasticsearch/data" environment: - ES_HEAP_SIZE=512m elasticsearch2: image: elasticsearch:latest command: "elasticsearch -Des.cluster.name=workagram -Des.discovery.zen.ping.unicast.hosts=elasticsearch_master" links: - elasticsearch_master volumes: - "/opt/elasticsearch/data" environment: - ES_HEAP_SIZE=512m


Pude hacer que el clúster funcionara utilizando unicast en dos hosts de docker. Simplemente estoy usando la imagen de ehazlett/elasticsearch , pero no creo que esto deba importar tanto. El bit realmente importante parece ser establecer la configuración de network.publish_host en una IP pública o enrutable en su host docker.

Configuración

docker-host-01

eth0: 192.168.1.10 Docker version 1.4.1, build 5bc2ff8/1.4.1

docker-host-02

eth0: 192.168.1.20 Docker version 1.4.1, build 5bc2ff8/1.4.1

Construyendo el Clúster

En Docker Host 01

docker run -d / -p 9200:9200 / -p 9300:9300 / ehazlett/elasticsearch / --cluster.name=unicast / --network.publish_host=192.168.1.10 / --discovery.zen.ping.multicast.enabled=false / --discovery.zen.ping.unicast.hosts=192.168.1.20 / --discovery.zen.ping.timeout=3s / --discovery.zen.minimum_master_nodes=1

En Docker Host 02

docker run -d / -p 9200:9200 / -p 9300:9300 / ehazlett/elasticsearch / --cluster.name=unicast / --network.publish_host=192.168.1.20 / --discovery.zen.ping.multicast.enabled=false / --discovery.zen.ping.unicast.hosts=192.168.1.10 / --discovery.zen.ping.timeout=3s / --discovery.zen.minimum_master_nodes=1