¿Cómo configurar el clúster ES?

81

Suponiendo que tengo 5 máquinas en las que quiero ejecutar un clúster de búsqueda elástica, y todas están conectadas a una unidad compartida. Puse una única copia de elasticsearch en esa unidad compartida para que los tres puedan verla. ¿Debo iniciar la búsqueda elástica en esa unidad compartida en todas mis máquinas y la agrupación en clúster funcionará automáticamente? ¿O tendría que configurar ajustes específicos para que elasticsearch se dé cuenta de que se está ejecutando en 5 máquinas? Si es así, ¿cuáles son las configuraciones relevantes? ¿Debo preocuparme por la configuración de réplicas o se maneja automáticamente?

Rolando
fuente
3
No va a utilizar la carpeta compartida para el índice, ¿verdad?
javanna

Respuestas:

53

es super fácil.

Necesitará que cada máquina tenga su propia copia de ElasticSearch (simplemente copie la que tiene ahora); la razón es que cada máquina / nodo mantendrá sus propios archivos que están fragmentados en todo el clúster.

Lo único que realmente necesita hacer es editar el archivo de configuración para incluir el nombre del clúster.

Si todas las máquinas tienen el mismo nombre de clúster, elasticsearch hará el resto automáticamente (siempre que las máquinas estén todas en la misma red)

Lea aquí para comenzar: https://www.elastic.co/guide/en/elasticsearch/guide/current/deploy.html

Cuando crea índices (dónde van los datos), define en ese momento cuántas réplicas desea (se distribuirán por el clúster)

Transact Charlie
fuente
9
Además, instale el complemento principal. Hace que monitorear el estado de sus índices sea mucho más fácil. mobz.github.io/elasticsearch-head
Transact Charlie
1
¿Por qué necesita tener copias separadas en cada máquina? Según lo que he visto para las máquinas de un solo nodo, puede cambiar el nombre del nodo para que se ejecuten varias instancias con la misma copia: concept47.com/austin_web_developer_blog/elasticsearch/… ¿Esto no es aplicable cuando tiene máquinas separadas con una sola unidad compartida? ? Pensaría que si establezco un nombre de clúster para la copia única, podría hacer que cada una de las máquinas ejecute esa copia única, por lo que el nombre del clúster teóricamente sería el mismo, ¿o soy incorrecto?
Rolando
Cada máquina (o nodo) necesitará su propio espacio de archivos para escribir archivos de índice lucene. si cambia el archivo de configuración (verifique el enlace) para que apunte a otro directorio en el nodo local, entonces puede funcionar.
Transact Charlie
Tenía la impresión de que los diferentes nombres de nodo de cada clúster, ya que una sola instancia de elasticsearch podría indicar automáticamente que otra instancia ya se está ejecutando, elasticsearch crearía directorios separados basados ​​en node. (corrígeme si esta no es la suposición correcta)
Rolando
1
¿Por qué no simplemente intentarlo? ¿Siempre puedes limpiarlo? Informe, me interesaría. En el pasado, tuve una instalación ejecutándose en cada máquina porque parecía más redundante y segura.
Transact Charlie
53

Suele tratarse de forma automática.

Si el descubrimiento automático no funciona. Edite el archivo de configuración de búsqueda elástica habilitando el descubrimiento de unidifusión

Nodo 1:

    cluster.name: mycluster
    node.name: "node1"
    node.master: true
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["node1.example.com"]

Nodo 2:

    cluster.name: mycluster
    node.name: "node2"
    node.master: false
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["node1.example.com"]

y así sucesivamente para el nodo 3,4,5. Convierta el nodo 1 en maestro y el resto solo como nodos de datos.

Editar: tenga en cuenta que, según la regla ES, si tiene Nnodos, por convención, los N/2+1nodos deben ser maestros para los mecanismos de conmutación por error. Sin embargo, pueden o no ser nodos de datos.

Además, en caso de que el descubrimiento automático no funcione, la razón más probable es que la red no lo permita (y por lo tanto esté deshabilitado). Si se producen demasiados pings de detección automática en varios servidores, los recursos para administrar esos pings evitarán que otros servicios se ejecuten correctamente.

Por ejemplo, piense en un clúster de 10,000 nodos y los 10,000 nodos haciendo los pings automáticos.

KannarKK
fuente
Para aclarar, ¿todos los "unicast.hosts" deben ser la IP / FQDN del maestro? Parece ser lo que indica su ejemplo.
harperville
De acuerdo con los comentarios elasticsearch.yml en 1.7.x, si ajusta "node.master: true" entonces el nodo nunca convertirse en un maestro ....
Jonesome Restablecer Mónica
@Jonesome: mi ejemplo ilustra un maestro y> 1 nodos de datos. Si no desea que un nodo actúe nunca como maestro, debería estar bien si establece la propiedad como falsa. Sin embargo, si alguna vez desea que su nodo se convierta en maestro, esta propiedad nunca debe tocarse.
KannarKK
@KannarKK Pero con ES, si establece "node.master: false" en todos los nodos excepto en 1, si el maestro deja de funcionar, ¿no caerá todo el clúster? ¿No anula eso uno de los objetivos principales del clúster? ¿Por qué no dejar "node.master" completamente fuera del yml (que por defecto es verdadero) para que si el maestro muere, otro nodo puede convertirse en maestro?
Jonesome reinstala a Monica
@Jonesome: ya he incluido esta información en la respuesta: .... Tenga en cuenta que según la regla ES, si tiene N nodos, por convención, N / 2 + 1 nodos deben ser maestros para los mecanismos de conmutación por error. o puede que no sean nodos de datos. Por lo tanto, si tiene más de 1 maestro, agregue toda su información en la lista de hosts
KannarKK
5

Probé los pasos que sugirió @KannarKK en ES 2.0.2, sin embargo, no pude poner el clúster en funcionamiento. Evidentemente, descubrí algo, ya que había configurado el número de puerto tcp en el maestro, en la configuración del esclavo discovery.zen.ping.unicast.hosts necesita el número de puerto del maestro junto con la dirección IP (número de puerto tcp) para el descubrimiento. Entonces, cuando intento seguir la configuración, me funciona.

Nodo 1

cluster.name: mycluster
node.name: "node1"
node.master: true
node.data: true
http.port : 9200
tcp.port : 9300
discovery.zen.ping.multicast.enabled: false
# I think unicast.host on master is redundant.
discovery.zen.ping.unicast.hosts: ["node1.example.com"]

Nodo 2

cluster.name: mycluster
node.name: "node2"
node.master: false
node.data: true
http.port : 9201
tcp.port : 9301
discovery.zen.ping.multicast.enabled: false
# The port number of Node 1
discovery.zen.ping.unicast.hosts: ["node1.example.com:9300"]
Somum
fuente
4

Elastic Search 7 cambió las configuraciones para la inicialización del clúster. Lo que es importante tener en cuenta es que las instancias de ES se comunican internamente utilizando la capa de transporte (TCP) y no el protocolo HTTP que normalmente se utiliza para realizar operaciones en los índices. A continuación se muestra la configuración de muestra para el clúster de 2 máquinas.

cluster.name: cluster-new
node.name: node-1
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.211
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes: 
        - "node-1"
        - "node-2

Configuración de la máquina 2: -

cluster.name: cluster-new
node.name: node-2
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.212
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes: 
        - "node-1"
        - "node-2”

cluster.name: debe ser el mismo en todas las máquinas que van a formar parte de un clúster.

node.name: Identificador de la instancia ES. Por defecto, el nombre de la máquina si no se proporciona.

node.master: especifica si esta instancia de ES va a ser maestra o no

node.data : especifica si esta instancia de ES va a ser un nodo de datos o no (retener datos)

bootsrap.memory_lock: deshabilita el intercambio. Puede iniciar el clúster sin configurar este indicador. Pero se recomienda configurar el bloqueo.Más información: https://www.elastic.co/guide/en/elasticsearch/reference/master/setup-configuration-memory.html

network.host: 0.0.0.0 si desea exponer la instancia de ES a través de la red. 0.0.0.0 es diferente de 127.0.0.1 (también conocido como localhost o dirección de loopback). Significa todas las direcciones IPv4 en la máquina. Si la máquina tiene varias direcciones IP con un servidor escuchando en 0.0.0.0, el cliente puede llegar a la máquina desde cualquiera de las direcciones IPv4.

http.port: puerto en el que esta instancia de ES escuchará las solicitudes HTTP

transport.host: la dirección IPv4 del host (se utilizará para comunicarse con otras instancias de ES que se ejecutan en diferentes máquinas). Más información: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html

transport.tcp.port: 9300 (el puerto donde la máquina aceptará las conexiones tcp)

discovery.seed_hosts: esto fue cambiado en versiones recientes. Inicialice todas las direcciones IPv4 con el puerto TCP (importante) de las instancias ES que van a formar parte de este clúster. Esto será igual en todas las instancias de ES que forman parte de este clúster.

cluster.initial_master_nodes: nombres de nodo (node.name) de las máquinas ES que van a participar en la elección maestra. (Toma de decisiones basada en quórum: - https://www.elastic.co/guide/en/elasticsearch/reference/current /modules-discovery-quorums.html#modules-discovery-quorums )

Zanahoria
fuente