Elasticsearch es un motor de búsqueda y análisis distribuido. Su principio de administración de clústeres se basa en la arquitectura distribuida de fragmentos y réplicas.
En Elasticsearch, cada índice se divide en varios fragmentos y cada fragmento es un índice de Lucene independiente. Los fragmentos se pueden distribuir entre diferentes nodos para escalamiento horizontal y alta disponibilidad. Para mejorar la redundancia de datos y la tolerancia a fallas, cada fragmento puede tener una o más copias, que son copias de fragmentos idénticas y pueden ejecutarse en el mismo nodo o en nodos diferentes.
El objetivo principal de la administración de clústeres de Elasticsearch es habilitar la asignación y redistribución automáticas de fragmentos y réplicas para garantizar una alta disponibilidad y equilibrio de carga. Cuando un nuevo nodo se une al clúster, Elasticsearch asigna automáticamente algunos fragmentos al nuevo nodo y replica las réplicas en el nuevo nodo. Si un nodo deja de funcionar o falla, Elasticsearch reasigna automáticamente fragmentos y réplicas para garantizar la disponibilidad e integridad de los datos.
El siguiente es un diagrama de arquitectura de administración de clústeres de Elasticsearch simple, que muestra un clúster de Elasticsearch que consta de tres nodos:
+----------+ +----------+ +----------+
| Node 1 | | Node 2 | | Node 3 |
| | | | | |
| Data | | Data | | Data |
| Master +----------+ Master | | Master |
| Node | | Node +----------+ Node |
| | | | | |
+----------+ +----------+ +----------+
En esta arquitectura, cada nodo tiene algunos fragmentos de datos y algunas réplicas. Entre ellos, cada nodo tiene un nodo maestro (Master Node), y el nodo maestro es responsable de coordinar la asignación y redistribución de fragmentos, así como la administración general del clúster. Cuando un nuevo nodo se une al clúster, el nodo principal asigna automáticamente algunos fragmentos al nuevo nodo y replica las réplicas en el nuevo nodo. Si un nodo deja de funcionar o falla, el nodo principal reasigna automáticamente fragmentos y réplicas para garantizar la disponibilidad y la integridad de los datos.
El siguiente es un ejemplo simple de implementación de la administración de clústeres de Elasticsearch:
- Inicie el clúster de Elasticsearch
Primero, se deben iniciar al menos dos nodos de Elasticsearch para formar un clúster. Ambos nodos se pueden iniciar con el siguiente comando:
bin/elasticsearch -E node.name=node1 -E cluster.name=my_cluster -E path.data=data1 -E path.logs=log1
bin/elasticsearch -E node.name=node2 -E cluster.name=my_cluster -E path.data=data2 -E path.logs=log2
Entre ellos, node.name
especifique el nombre del nodo, cluster.name
especifique el nombre del clúster path.data
y path.logs
especifique las rutas de almacenamiento de datos y registros, respectivamente.
- agregar nodo
Para agregar un nodo al clúster, se puede usar el siguiente comando:
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "all"
}
}
Esto habilitará la asignación automática de fragmentos para que los nuevos nodos puedan recibir fragmentos. Luego, inicie un nuevo nodo y especifique el mismo nombre de clúster, y el nuevo nodo se unirá automáticamente al clúster.
- Ver el estado del clúster
Para ver el estado y la información del clúster, puede usar el siguiente comando:
GET /_cluster/health
GET /_cluster/stats
Esto devolverá información sobre el estado del clúster, la cantidad de nodos, la cantidad de fragmentos, la cantidad de índices, etc.
- administrar índice
Para administrar índices, puede usar los siguientes comandos:
- Crear un índice:
PUT /my_index
- Eliminar el índice:
DELETE /my_index
- Obtener información del índice:
GET /my_index/_stats
- Cambiar la configuración del índice:
PUT /my_index/_settings
{
"index": {
"refresh_interval": "30s"
}
}
- Añadir documentos al índice:
POST /my_index/_doc
{
"title": "Elasticsearch Tutorial",
"content": "This is a tutorial on Elasticsearch",
"tags": ["elasticsearch", "tutorial"]
}
- Índice de búsqueda:
GET /my_index/_search
{
"query": {
"match": {
"title": "Elasticsearch"
}
}
}
- nodo de gestión
Para administrar los nodos, se pueden usar los siguientes comandos:
- Ver información del nodo:
GET /_nodes
- Ver información específica del nodo:
GET /_nodes/node1
- Apague el nodo:
POST /_cluster/nodes/node1/_shutdown
Esto apagará node1
el nodo llamado . Después de que un nodo se apaga, sus fragmentos se redistribuirán automáticamente a otros nodos.
La administración de clústeres de Elasticsearch se usa comúnmente en los siguientes escenarios:
- Manejar datos a gran escala: Elasticsearch puede manejar una gran cantidad de datos estructurados y no estructurados, y es adecuado para escenarios de aplicaciones que necesitan procesar datos a gran escala.
- Alta disponibilidad: a través de la asignación y reasignación automática de fragmentos y copias, Elasticsearch puede lograr una alta disponibilidad y tolerancia a fallas, lo cual es adecuado para escenarios de aplicaciones que requieren alta disponibilidad.
- Realice el equilibrio de carga: el clúster de Elasticsearch puede distribuir solicitudes automáticamente a diferentes nodos y fragmentos para lograr el equilibrio de carga y la optimización del rendimiento.
Aquí hay algunos enlaces a la literatura sobre la gestión de clústeres de Elasticsearch:
- Documentación oficial de Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html
- Introducción a los principios de la gestión de clústeres de Elasticsearch: https://www.elastic.co/cn/blog/a-deep-dive-into-elasticsearch-cluster-management
- Mejores prácticas de administración de clústeres de Elasticsearch: https://www.elastic.co/cn/blog/elasticsearch-cluster-management-best-practices
- Tamaño del clúster de Elasticsearch y optimización del rendimiento: https://www.elastic.co/cn/blog/how-many-shards-should-i-have-in-my-elasticsearch-cluster
- Supervisión y depuración de clústeres de Elasticsearch: https://www.elastic.co/cn/blog/monitoring-and-debugging-elasticsearch-performance-and-health