networking - remote - elasticsearch yml host
¿Cuál es la diferencia entre bind_host y publish_host en ElasticSearch? (5)
Es posible establecerlos en diferentes valores y realmente útil en algunos casos. Aquí está mi uso:
Tengo una red local en un centro de datos donde ejecuto el clúster elasticsearch compuesto de diferentes nodos. Esto significa que cada máquina de elasticsearch tiene dos direcciones IP, una para acceder a ella desde una máquina externa y la otra para conectarse localmente a otras máquinas en la misma red.
La ip interna (eth1) se utiliza para permitir que diferentes nodos de elasticsearch se comuniquen, descubran, etc. entre sí y la dirección ip externa (eth0) es la que mi aplicación web, que está en otra red, realiza las solicitudes.
Entonces, en palabras simples, bind_host (tanto ip en mi caso, como el valor predeterminado 0.0.0.0 que une todas las interfaces) es donde elasticsearch escucha y publish_host (ip interna en mi caso) es donde elasticsearch se comunica con otros componentes del clúster.
De esta manera, al estar mi aplicación web en otra red, puede acceder al clúster ES desde la dirección bind_host, mientras que elasticsearch se comunica con el clúster con publish_host.
Desde la configuración de red de este documento, sé que publish_host es el host al que se comunicarán otros nodos del clúster. Pero no entiendo la funcionalidad de bind_host , lo que significa que:
La configuración de network.bind_host permite controlar los diferentes componentes de red del host. De forma predeterminada, el host de enlace será anyLocalAddress (normalmente 0.0.0.0 o :: 0).
Y el network.host establecerá network.bind_host y network.publish_host en el mismo valor.
Entonces, quiero saber por qué es necesario configurar network.bind_host y si es posible configurar network.bind_host y network.publish_host a diferentes valores.
La configuración bind_host controla en qué interfaz de red escucha Elasticsearch. Por lo tanto, en una máquina que tiene varias NIC, esto le permitirá controlar a qué ES se enlazará. El valor predeterminado de 0.0.0.0 básicamente significa "enlazar a todos".
La configuración publish_host controla qué dirección IP anuncia Elasticsearch a otros miembros. Esta tiene que ser una dirección IP real y es lo que los demás miembros del clúster usarán para comunicarse con el nodo ES.
Puede establecer bind_host y publish_host en diferentes valores si necesita hacer algo especial en un servidor de múltiples servidores. Sin embargo, la mayoría de los casos de uso no serán necesarios, por lo tanto la configuración de la red.
La siguiente configuración debería hacer el truco. Acepta conexiones de cualquier IP (enlace) y configura su auto ip al primer non-loopback en la primera interfaz de red disponible.
network.bind_host: "0.0.0.0"
network.publish_host: _non_loopback:ipv4_
Para ver más opciones, revisa los docs .
Para comprobar este valor, a través de la API:
curl http://ES:9200/_cat/master
Preste atención a que el nombre de host se resolverá (por lo que nunca se expondrá).
Por lo que entiendo, y para usar una analogía de llamadas telefónicas:
-
publish_host
significa: "Llámame a este número" -
bind_host
significa: "Voy a responder en este número"
Y publish_host: _non_loopback:ipv4_
puede entenderse como: "Llámame al número que sea del que te estoy llamando"