Poner a correr Elasticsearch

3/16

Lectura

Paso 1 - Instalar Postman

Para instalar Postman accedes a la URL https://www.postman.com/downloads/ la cual te provee con el instalador de tu sistema operativo.

Windows

Para la instalación en Windows, bajamos el archivo *.exe. Luego lo abrimos y finalizamos la instalación.

image6.png
Postman soporta Windows desde la versión 7 en adelante en las arquitecturas x86 y x64.

Mac

image2.png
La versión mínima soportada es MacOS 10.9.

Para la instalación en Mac bajamos el archivo *.zip que contiene el instalador. Luego descomprimes este archivo y te queda un instalador llamado Postman 2.

image5.png

Haces doble clic sobre instalador y aparece una ventana recordando que es un ejecutable bajado de internet, le das clic en abrir.

image4.png

Luego el instalador te pregunta si quieres mover la aplicación al folder de Applications, le das que sí quieres moverla y enseguida tendrás la aplicación abierta y lista para usar.

image3.png

Paso 2 - Crear archivo de configuración

Para crear el archivo de configuración te recomiendo utilices un directorio personalizado para este curso, en el cual puedas guardar todos los archivos que usarás. Entonces lo primero será crear este directorio y entrar en él.

Nota: los siguientes comandos se deben ejecutar en una terminal

$ mkdir curso-elastic-platzi
$ cd curso-elastic-platzi

Ahora abres un editor de texto (te recomiendo Visual Studio Code) y creas un archivo dentro de este directorio. El nombre del archivo es docker-compose.yml

image1.png

Una vez creado el archivo, le vas a agregar la siguiente configuración:

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - cluster.initial_master_nodes=es01
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic

volumes:
  data01:
    driver: local

networks:
  elastic:
    driver: bridge

Este archivo es basado en las configuraciones recomendadas para correr Elasticsearch con Docker. Esta guía se puede consultar en https://www.elastic.co/guide/en/elasticsearch/reference/7.6/docker.html.

Acá un breve repaso de lo que hace este archivo:

  1. Le dice a Docker que use la imagen de Elasticsearch con versión 7.6.0. Esta es la versión que vas a usar durante el curso.
  2. Le dice que el nombre del contenedor será es01.
  3. Le indica unas configuraciones para crear el cluster y el nodo por defecto.
  4. Le indica que el puerto sobre el que corre Elasticsearch es el 9200. A su vez le dice que exponga ese mismo puerto a tu máquina para que puedas usar el servicio bajo el puerto estándar.

Por último guardamos el archivo.

Paso 3 - Levantar el servicio

Luego de tener el archivo listo, le dices a Docker que levante el servicio ejecutando el siguiente comando:

$ docker-compose up

Este comando se encarga de ejecutar las directivas que especificamos en el archivo dejando el servicio de Elasticsearch funcionando correctamente en el puerto 9200. Esto puede tomar unos segundos mientras se configura el contenedor y se levanta el servicio.

Para comprobar que Elasticsearch ya está corriendo sobre tu máquina, abres Postman y ejecutas un GET sobre la url http://localhost:9200. Si todo salió, correctamente verás un resultado similar a este:

image7.png

¡Listo! te veo en la siguiente clase.

Aportes 31

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Si alguien tiene GNU/Linux y le sale un error como este al intentar levantar el servicio con docker-compose:

es01    | [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
es01    | ERROR: Elasticsearch did not exit normally - check the logs at /usr/share/elasticsearch/logs/es-docker-cluster.log
es01    | {"type": "server", "timestamp": "2020-06-26T01:04:28,625Z", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "es-docker-cluster", "node.name": "es01", "message": "stopping ..." }
es01    | {"type": "server", "timestamp": "2020-06-26T01:04:28,649Z", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "es-docker-cluster", "node.name": "es01", "message": "stopped" }
es01    | {"type": "server", "timestamp": "2020-06-26T01:04:28,649Z", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "es-docker-cluster", "node.name": "es01", "message": "closing ..." }
es01    | {"type": "server", "timestamp": "2020-06-26T01:04:28,666Z", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "es-docker-cluster", "node.name": "es01", "message": "closed" }
es01    | {"type": "server", "timestamp": "2020-06-26T01:04:28,668Z", "level": "INFO", "component": "o.e.x.m.p.NativeController", "cluster.name": "es-docker-cluster", "node.name": "es01", "message": "Native controller process has stopped - no new native processes can be started" }
es01 exited with code 78

Es por falta de memoria en el host, para solucionar el problema deben aumentar la memoria disponible en el host de la corriendo el siguiente comando en consola:

sudo sysctl -w vm.max_map_count=262144

Sí, ya sé que modificar el host mata por completo el propósito de estar usando Docker pero es justamente lo que recomiendan en la página oficial de elasticsearch, espero modifiquen su postura en el futuro.

Para el problema vm.max_map_count is too low en Windows con docker desktop me funcionó la siguiente solución:
(btw, hay que tener wsl activo)

Usando Powershell ejecuto el siguiente comando para que use la distribución de docker-desktop :

wsl -d docker-desktop

Consulto el valor de memoria asignada actual (debe ser 65530) con el comando:

wsl -d docker-desktop cat /proc/sys/vm/max_map_count

Luego el reasigno el valor con:

wsl -d docker-desktop sysctl -w vm.max_map_count=262144

Repito el paso dos para confirmar el valor reasignado, debe ser 262144. Luego vuelvo a ejecutar el comando con docker-compose up. En mi caso no fue necesario reiniciar el docker desktop pero si no ejecuta prueben esta opción y ya me ejecuta la petición en Postman.

segui la ayuda de @jamarin_ y deje el docker-compose.yml de la siguiente forma y funciono:

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - bootstrap.memory_lock=true
      - discovery.type=single-node
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic

volumes:
  data01:
    driver: local

networks:
  elastic:
    driver: bridge

En Windows he tenido problemas para arrancar ElasticSearch sobre docker. He podido arrancarlo al modificar el environment con los siguientes parámetros:
` - node.name=es01

  • cluster.name=es-docker-cluster
  • bootstrap.memory_lock=true
  • discovery.type=single-node
  • “ES_JAVA_OPTS=-Xms1G -Xmx1G”`

Básicamente he eliminado cluster.initial_master_nodes=es01 y he añadido discovery-type=single-node, para hacer que ElasticSearch utilice clúster de un solo nodo en su almacenamiento.

He visto que varias personas han tenido problemas para poner a correr Elasticsearch en Windows, les paso un tutorial que hice sobre otra manera que encontre de hacerlo, espero les sirva https://platzi.com/tutoriales/1912-intro-elasticsearch/9839-otra-forma-de-usar-elasticsearch-en-windows/ c:

Nota personal, no olvides que docker debe estar funcionando antes de docker-compose up

Hola, si alguien tiene problemas con las ultimas versiones de elastic comparto esta configuración que me funcionó.

version: "3.7"
services:
    es01:
        image: elasticsearch:7.4.2
        container_name: es01
        environment:
            - node.name=es01
            - cluster.name=es-docker-cluster
            - discovery.type=single-node
        volumes:
            - elastic:/usr/share/elasticsearch/data
        networks:
            - elastic
        ports:
            - 9200:9200
            - 9300:9300
networks:
  elastic:
    driver: bridge
volumes:
  elastic:

Saludos, no me funciona. Dic de 2020.
Hice todos los pasos, al momento de ejecutar el docker, no aparece nada en el localhost 9200 y en la consola docker no quiere subir, intenta, pero luego aparece inactivo. No aparecen errores.
Yo creo que faltó un video con estos pasos, no puedo avanzar en el curso ahora.

Perfect.

Gracias!

Aca les dejo una version simplificada del docker-compose…

version: '3.1'

services:
  elastic:
    image: elasticsearch:7.14.2
    container_name: elastic
    environment:
      - discovery.type=single-node
    volumes:
      - ./data:/usr/share/elasticsearch/data
    ports:
      - 9300:9300
      - 9200:9200
    networks:
      - elastic

networks:
  elastic:
    driver: bridge

Esto es siguiendo la doc de la imagen oficial en DockerHub

para ejecutar esto solo necesitar crear una carpeta data jutno a su archivo docker-compose.yml y darle permisos de acceso de la siguiente forma:

mkdir data && sudo chmod -R 777 data

Despues podran ejecutar docker-compose up sin ningun problema.

Solucion al error al compilar en Windows/Linux en 3 simples pasos:

  1. Si tenes Windows, instala la terminal GNU/Linux que prefieras:

Ubuntu 20.04 LTS
openSUSE Leap 15.1
SUSE Linux Enterprise Server 15 SP1
Kali Linux
Debian GNU/Linux

  1. Corre el codigo:
sudo sysctl -w vm.max_map_count=262144
  1. Compila.

Saludos xD

Si os da un error de memoria (es01 exited with code 78)
probar lo que pone en la documentación:
https://www.elastic.co/guide/en/elasticsearch/reference/7.12/docker.html#_set_vm_max_map_count_to_at_least_262144

$ sudo sysctl -w vm.max_map_count=262144
$ sudo docker-compose up

Hola!
Yo tuve problemas para realizar la instalación y encontré la solución poniendo este docker-compose, espero sea de utilidad:

version: '2.2'

services:

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
    container_name: elasticsearch
    environment:
      - node.name=elasticsearch
      - discovery.seed_hosts=elasticsearch
      - cluster.initial_master_nodes=elasticsearch
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200

  kibana:
    image: docker.elastic.co/kibana/kibana:7.8.0
    container_name: kibana
    environment:
      ELASTICSEARCH_URL: ""
    ports:
      - 5601:5601
    depends_on:
      - elasticsearch

volumes:
  esdata1:
    driver: local

Para ello tuve que borrar todas las imágenes ya hechas anteriormente y luego correrlo con docker-compose up

Completé todos los pasos, pero no he podido levantar el servicio. Probé algunas soluciones de otros compañeros, pero ninguna me funcionó. ¿Alguien que me ayude?

Para detener el servicio:

docker stop es01

Para subir el servicio:

docker start es01

Funcionando en w10 sin problemas

si necesitan correr ES solo usando docker run, solo cambien a su versión favorita:
docker run -d -p 9200:9200 -e “http.host=0.0.0.0” -e “transport.host=127.0.0.1” -e “xpack.security.enabled=false” docker.elastic.co/elasticsearch/elasticsearch:6.0.1

Para que funcione en MAC con Chip M1 tuve que hacer algunas modificaciones al archivo de Docker.

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2-arm64
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - cluster.initial_master_nodes=es01
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic

volumes:
  data01:
    driver: local

networks:
  elastic:
    driver: bridge

Aquí les comparto unas urls para consultar el estado del servicio de Elasticsearch:

  • Clusters: localhost:9200/_cat/nodes?v&pretty
  • Disk space usage: localhost:9200/_cat/allocation?v&pretty
  • Nodes & shards: localhost:9200/_cat/shards?v&pretty


Por cierto, configuración del servicio en Mac exitosa (ENE-2022).

localhost:9200/_cat/nodes?v&pretty

con esta ruta pueden ver el mensaje en postman formateado

Estaba tratando de ejecutar docker-compose up conecada a una VPN y obtenía

Creating network "cursoelasticplatzi_elastic" with driver "bridge"

Simplemente me desconecté

Buen día, alguien tendrá la forma de realizar esta instalación mas simplificada, estoy intentando seguir los pasos pero no se como continuar.

Hola a todos.

mi sistema operativo (Windows 8) no soporta Docker. Alguien me puede por favor ayudar a buscar una alternativa

👍👍👍👍👍👍👍👍

Estoy habilitando un servidor en la nube, como puedo hacer para restringir el acceso? en este momento cualquier persona que averigue la IP puede conectarse.

Perfecto lo instale sin problemas.

hola, tengo un problema, cuando ejecuto el ultimo codigo (docker-compose up ) este ( Can’t find a suitable configuration file in this directory or any parent. Are you in the right directory? ), me sale este esto alguien sabria como podria solucionarlo?

Todo ok.

{
  "name": "es01",
  "cluster_name": "es-docker-cluster",
  "cluster_uuid": "g-TwtD0vSmGlyMXKuWeL2g",
  "version": {
    "number": "7.6.0",
    "build_flavor": "default",
    "build_type": "docker",
    "build_hash": "7f634e9f44834fbc12724506cc1da681b0c3b1e3",
    "build_date": "2020-02-06T00:09:00.449973Z",
    "build_snapshot": false,
    "lucene_version": "8.4.0",
    "minimum_wire_compatibility_version": "6.8.0",
    "minimum_index_compatibility_version": "6.0.0-beta1"
  },
  "tagline": "You Know, for Search"
}```

Todo funcionó perfecto en MacOS.
2020-07-30

MI configuración de docker compose

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:${ELK_VERSION}
    container_name: es01
    env_file: ./.env
    environment:
      - node.name=${ELASTIC_NODE_NAME}
      - cluster.name=${ELASTIC_CLUSTER_NAME}
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms${ELASTICSEARCH_HEAP} -Xmx${ELASTICSEARCH_HEAP}"
      - ELASTIC_USERNAME=${ELASTIC_USERNAME}
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 200000
        hard: 200000
    restart: unless-stopped
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - elastic

¡Funcionando bien en Mac!