tutorial - requerimientos elasticsearch
Cómo agregar un nuevo nodo a mi clúster de Elasticsearch (5)
Mi clúster tiene un estado yellow
, ya que solo tiene un único nodo, por lo que las réplicas permanecen sin firmar simplemente porque no hay ningún otro nodo disponible para contenerlas.
Así que quiero crear / agregar otro nodo para que Elasticsearch pueda comenzar a asignarle réplicas. Solo tengo una máquina y estoy ejecutando ES como un servicio .
He encontrado toneladas de sitio con algo de información, pero ninguno de ellos me da claramente cómo puedo agregar otro nodo a ES.
¿Alguien me puede explicar qué archivos debo editar y qué comandos debo iniciar para crear otro nodo en mi clúster? ¿Tengo que ejecutar dos instancias ES? ¿Cómo puedo hacer esto?
Gracias por adelantado.
CONSEJOS PARA AGREGAR OTRO NODO:
1) VERSIONES:
Es un buen consejo revisar todos los nodos para ver el estado: http://elastic-node1:9200/
Tenga en cuenta que, en la mayoría de los casos, la versión debe ser la misma, incluso menor.
{
"name" : "node2",
"cluster_name" : "xxxxxxxxxxx",
"cluster_uuid" : "n-xxxxxxxxxxxxxxx",
"version" : {
"number" : "5.2.2",
"build_hash" : "xxxx",
"build_date" : "20-02-24T17:26:45.835Z",
"build_snapshot" : false,
"lucene_version" : "6.4.1"
},
"tagline" : "You Know, for Search"
}
Tenga en cuenta que si ve un número de versión diferente en el nodo 1, por ejemplo
"number" : "5.2.1"
tienes que actualizar tu nodo en ese caso a la versión 5.2.2 (igual que node1).
2) NODOS Y REPLICA:
¿Cuál es el caso de uso del nodo? Para 3 nodos haría esto:
curl -XPUT ''localhost:9200/_cluster/settings?pretty'' -H ''Content-Type: application/json'' -d''
{
"transient": {
"discovery.zen.minimum_master_nodes": 3
}
}
''
Aún mejor es cambiar la configuración en el archivo de configuración de Elasticsearch:
/etc/elasticsearch/elasticsearch.yml
# need to be changed on each node (has to be unique for each node):
node.name: node1
# need to be the same in all nodes:
cluster.name: my_cluster
discovery.zen.ping.unicast.hosts: ["IP_ADDRESS_OR_HOSTNAME1", "IP_ADDRESS_OR_HOSTNAME2", "IP_ADDRESS_OR_HOSTNAME3"]
Y si tiene 3 nodos, ¿desea dos réplicas y una primaria?
curl -XPUT ''localhost:9200/_settings?pretty'' -H ''Content-Type: application/json'' -d''
{
"index" : {
"number_of_replicas" : 2
}
}''
3) ASEGÚRESE DE QUE LOS NODOS ESTÁN HABILITADOS
Hay una manera de patear un nodo:
curl -XPUT localhost:9200/_cluster/settings -d ''{
"transient" :{
"cluster.routing.allocation.exclude._ip" : "NODE_TO_REMOVE_IP_ADDRESS_OR_HOSTNAME"
}
}'';echo
Entonces, si hizo eso, y ahora desea agregar el nodo nuevamente: https://www.elastic.co/guide/en/elasticsearch/guide/current/_rolling_restarts.html
puede hacerlo con la siguiente solicitud (lea el enlace mencionado anteriormente):
curl -XPUT localhost:9200/_cluster/settings -d ''{
"transient" :{
"cluster.routing.allocation.enable" : "all"
}
}'';echo
4) NUNCA OLVIDAR, LA REDES
Cortafuegos, red ... ¿Puede llegar al nuevo nodo en el puerto 9200? ¿Puedes verlo en tu navegador web?
Puedes
curl http://your-elasticsearch-hostname:9200/
?
CONSEJOS PARA ELIMINAR NODO DEL GRUPO:
1) QUITAR CON API
curl -XPUT ''http://localhost:9200/_cluster/settings?pretty'' -d ''
{
"transient" : {
"cluster.routing.allocation.exclude._name" : "node3"
}
}''
2) COMPRUEBE SU ARCHIVO DE CONFIGURACIÓN
Verifique el archivo de configuración en: /etc/elasticsearch/elasticsearch.yml
y deja solo los nodos que quieras conservar:
discovery.zen.ping.unicast.hosts:["IP_ADDRESS_OR_HOSTNAME1", "IP_ADDRESS_OR_HOSTNAME2"]
* VERIFIQUE SU ESTADO *
Consulte http://elk-pipeline:9200/_cat/shards ¿Cuál es su estado? Puede ver: INICIALIZANDO Eso probablemente significa que los datos se transfieren. Entonces, si sus datos son grandes, (y no en SSD), espere.
NO OLVIDES
Puede ver si sus datos se están moviendo actualmente escribiendo:
[watch] du /var/lib/elasticsearch/
Eso es todo por ahora. Intentaré agregar más información aquí de vez en cuando.
Por favor, siéntase libre de cambiar / agregar.
Los pasos completos en Windows Box son:
- descomprima elástico, digamos, a C: / ELK / elastic / run command
bin/service install elastic-search-x64-node01
que creará un servicio llamadoelastic-search-x64-node01
Editar archivo de configuración
elasticsearch.yml
:cluster.name: Animals node.name: Snake node.master: true node.data: true path.data: C:/ELK/storage/data path.logs: C:/ELK/storage/logs http.port: 9200 discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
ejecute el
service manager elastic-search-x64-node01
y configure sus reglas de servicios e inicie el serviciodescomprima elástico, digamos, a C: / ELK / elastic2 / run comando
bin/service install elastic-search-x64-node02
que creará un servicio llamadoelastic-search-x64-node02
Editar archivo de configuración
elasticsearch.yml
:cluster.name: Animals node.name: Baboon node.master: false node.data: true path.data: C:/ELK/storage/data path.logs: C:/ELK/storage/logs http.port: 9201 discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
ejecute el
service manager elastic-search-x64-node02
y configure sus reglas de servicios e inicie el servicio
En este punto, tiene 2 nodos separados (almacenan datos en la misma carpeta, pero estoy demasiado relajado para editar path.data para el segundo nodo) como 2 Servicios de Windows separados y GET http://localhost:9200/_cluster/health
muestra algo como:
{
"cluster_name": "Animals",
"status": "green",
"timed_out": false,
"number_of_nodes": 2,
"number_of_data_nodes": 2,
"active_primary_shards": 4,
"active_shards": 8,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 100
}
No tengo claro cuál es tu pregunta aquí. Hay dos posibilidades para las que vas.
1) Tiene dos nodos y desea que se puedan ver entre sí. Hay una gran cantidad de documentación para esto por todas partes. Si este es el caso, sugeriría que realice una prueba para asegurarse de que cada host pueda hablar con el otro, es decir, ssh en el host A e intente curlear el host B: 9200, y viceversa. También querrá asegurarse de que las configuraciones estén configuradas correctamente.
2) Desea configurar un ''clúster'' en su máquina local. En este caso, necesitará dos archivos de configuración separados, y deberá iniciar elasticsearch utilizando un archivo de configuración específico para su segundo ''nodo'' (así como modificar la segunda configuración para usar diferentes puertos, etc.). Es posible que desee revisar este enlace: http://www.concept47.com/austin_web_developer_blog/elasticsearch/how-to-run-multiple-elasticsearch-nodes-on-one-machine/
Pero sí, en última instancia, debe ejecutar los procesos de elasticsearch, ya sea que ambos estén en la misma máquina, o si depende de dos máquinas diferentes.
Primero, puede eliminar las réplicas para volver a un estado verde, puede hacerlo incluso después de haber creado el índice y agregado documentos.
Así es como establece el recuento de réplicas en 0:
curl -XPUT ''localhost:9200/my_index/_settings'' -d ''
{
"index" : {
"number_of_replicas" : 0
}
}''
Si desea simplemente agregar otro nodo a su grupo, deberá editar el elasticsearch.yml
, preferiblemente en ambos nodos con estos cambios:
cluster.name: my-cluster
node.name: node01
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["192.168.0.5"]
Configure los hosts de unidifusión en cada nodo para que hagan referencia al otro, establezca que el nombre del clúster sea el mismo en ambos nodos y asigne un nombre único a cada nodo, luego reinicie ambas instancias de ES y su clúster debe estar en línea.
Si está ejecutando Elasticsearch n local, vaya a otro terminal y ejecute elasticsearch
nuevamente. De esta manera tendrás dos instancias.
Verá el siguiente mensaje en la instancia recién ejecutada:
[Black Widow] detected_master [N''Garai]
En instancia ya en ejecución ( master node)
[N''Garai] added {[Black Widow]
Suponiendo que [N''Garai]
y {[Black Widow]
sean nombres de nodo aleatorios.