ElasticSearch es muy potente(En lo que se refiere a rendimiento), pero si aún así, requerís para vuestro proyecto un cluster que os proporcione escalabilidad y alta disponibilidad aquí vamos a ver como implementarlo con Docker.
ElasticSearch viene, por defecto, con todo lo necesario para trabajar en cluster. Cuando detecta nuevos nodos(O los pierde) el mismo se gestiona(Copia replicas, crea másters, etc.). Solamente tenemos que configurar lo siguiente en el fichero ‘elasticsearch.yml’:
# Para que conteste desde cualquier host network.host: 0.0.0.0 # Lista de posible nodos a los que hacer ping al arrancar discovery.zen.ping.unicast.hosts: ["172.17.0.2", "172.17.0.3", "172.17.0.4", "172.17.0.5", "172.17.0.6", "172.17.0.7", "172.17.0.8"] # Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1): discovery.zen.minimum_master_nodes: 2
A continuación os dejo el Dockerfile que generará nuestra imagen, de la que podremos arrancar tantos contenedores como queramos. La única complejidad es que desde(no me acuerdo de que versión ElasticSearch) ElasticSearch no arranca como root.
FROM ubuntu:latest RUN apt-get update RUN apt-get -y install openjdk-8-jdk COPY ./soft /opt RUN chmod -R 777 /opt # Add none root user RUN useradd usr && echo "usr:usr" | chpasswd && adduser usr sudo USER usr CMD /opt/start.sh
Como veis es, partiendo de un Ubuntu, instalar Java, copiar ElasticSearch, crear el nuevo usuario que no es root y arrancar ‘/opt/start.sh’. El fichero ‘start.sh’ es tan simple como lo siguiente:
#!/bin/bash /opt/elasticsearch-6.3.0/bin/elasticsearch
Y ya está, ya podéis crearos vuestro ejercito de nodos ElasticSearch.