深入了解Elasticsearch集群:Elasticsearch集群的工作原理与优化策略


🎬 鸽芷咕个人主页
🔥 个人专栏 : 《C++干货基地》《粉丝福利》

⛺️生活的理想,就是为了理想的生活!


引言

ELasticsearch作为一个分布式搜索引擎,能够出色地支持集群模式、动态水平扩容、故障转移等分布式系统特性,这是其作为全文搜索引擎首选的重要原因,今天我们就来看看集群的配置和扩容过程,让你Elasticsearch集群的工作原理彻底理解。

文章目录

一、集群配置

Elasticsearch集群的配置是确保其稳定运行的基础。下面我们将介绍不同类型的Elasticsearch集群配置,并包含代码介绍以及使用。

1.1 空集群

空集群是指没有存储任何数据的集群。在实际应用中,我们通常会通过添加节点来构建空集群。

bash 复制代码
# 初始化集群
bin/elasticsearch -Des.cluster.name=my-empty-cluster

当我们启动了一个Elasticsearch节点,默认就是创建了一个Elasticsearch集群,只是这个集群只有一个节点。此时如果没有创建索引,则集群处于一种"空"的状态。

此时通过_cluster API查看集群状态,可以看到status为green,节点数量number_of_nodes为1,数据节点数量number_of_data_nodes也为1,因为没有创建索引,所以分片数目为0。

  • 而status字段指示着当前集群在总体上是否工作正常

  • 以下是他的三种含义

  • green 所有的主分片和副本分片都正常运行

  • yellow 所有的主分片都正常运行,但不是所有的副本分片都正常运行。

  • red 有主分片没能正常运行。

而我们上面创建的空集群当前不存在主分片也不存在副本分片没正常运行的,通过_cluster API查看集群状态时所显示的状态为green。

bash 复制代码
{
  "cluster_name" : "elasticsearch",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "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.0
}

1.2 单节点集群

单节点集群是最简单的集群形式,它由单个Elasticsearch节点组成。这种集群适用于开发和测试环境,但不建议用于生产环境。

bash 复制代码
# 启动单节点集群
bin/elasticsearch -Des.cluster.name=my-single-node-cluster

为当前集群添加索引,指定主分片数量为3,副本分片数量为1

bash 复制代码
$ curl -X PUT "localhost:9200/cumstomer?pretty" -H 'Content-Type: application/json' -d'
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}
'

此时再次查看集群的状态可以看到此时活动的主分片数量为3,未分片的分片数量也为3,未分配的分片主要是三个主分片对应的副本分片,由于主分片与副本分片不能存在于同个节点,所以副本分片无法分配,此时集群的状态为yellow。

bash 复制代码
{
  "cluster_name" : "elasticsearch",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 3,
  "active_shards" : 3,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 3,
  "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" : 50.0
}

1.3 两节点集群

两节点集群是由两个Elasticsearch节点组成的。这种集群可以提供基本的冗余和故障转移能力,适用于小型生产环境。

bash 复制代码
# 启动第一个节点
bin/elasticsearch -Des.cluster.name=my-two-node-cluster
# 启动第二个节点,确保与第一个节点的网络可以互相通信

二、水平扩容

水平扩容是Elasticsearch集群的一个重要特性,它允许我们通过添加更多节点来增加集群的性能和容量。

2.1 主分片的扩容

主分片是Elasticsearch中数据的主要副本。扩容主分片可以通过增加新节点来实现,从而提高集群的存储和处理能力。

bash 复制代码
# 创建索引时指定主分片数量
curl -X PUT "localhost:9200/my-index?pretty" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "number_of_shards": 3
  }
}'

2.2 副本分片的扩容

副本分片是主分片的备份,用于提供数据冗余和故障转移。通过扩容副本分片,我们可以增加集群的可用性和可靠性。

bash 复制代码
# 创建索引时指定副本分片数量
curl -X PUT "localhost:9200/my-index?pretty" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "number_of_replicas": 2
  }
}'

三、故障转移

故障转移是Elasticsearch集群在面对节点故障时的关键特性。它确保了即使在节点失效的情况下,集群也能继续正常运行。

bash 复制代码
# 重启节点,使其加入已存在的集群
bin/elasticsearch -Des.cluster.name=my-cluster -Des.node.name=new-node

四、分布式索引和搜索

Elasticsearch集群的一个核心特性是分布式索引和搜索。通过分布式索引,我们可以将数据均匀地分布到集群中的所有节点上。而分布式搜索则允许我们跨多个节点执行搜索操作,从而获得更高的查询性能。

bash 复制代码
# 创建文档并索引
curl -X POST "localhost:9200/my-index/_doc" -H 'Content-Type: application/json' -d'
{
  "field1": "value1",
  "field2": "value2"
}'
# 执行搜索操作
curl -X GET "localhost:9200/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match_all": {}
  }
}'

以上就是这篇文章的全部内容,希望这篇文章能帮助您对Elasticsearch集群的工作原理有一个全面的认识。

相关推荐
Lethehong1 分钟前
探索高效工作流的秘密:GLM-4.7 与 Dify 平台深度集成实践
大数据·人工智能·算法
Yeats_Liao3 分钟前
微调决策树:何时使用Prompt Engineering,何时选择Fine-tuning?
前端·人工智能·深度学习·算法·决策树·机器学习·prompt
传说故事3 分钟前
【论文自动阅读】GREAT MARCH 100:100项细节导向任务用于评估具身AI agent
人工智能·具身智能
大鳥4 分钟前
第一章 - 数据仓库是什么
大数据·数据库·hive
李昊哲小课6 分钟前
基于NLP的检索式聊天机器人
人工智能·自然语言处理·机器人
听麟9 分钟前
HarmonyOS 6.0+ PC端智能监控助手开发实战:摄像头联动与异常行为识别落地
人工智能·深度学习·华为·harmonyos
20130924162710 分钟前
1986年《通过误差反向传播学习表示》:连接主义的觉醒与深度学习的基石
搜索引擎
_周游11 分钟前
Java8 API 文档搜索引擎_2.索引模块(实现细节)
java·搜索引擎·intellij-idea
wasp52012 分钟前
【开源】Banana Slide:一个基于nano banana pro[特殊字符]的原生AI PPT生成应用,迈向真正的"Vibe PPT"
人工智能·开源
说私域13 分钟前
破局互联网产品开发困境:开源AI智能名片链动2+1模式S2B2C商城小程序的实践与启示
人工智能·小程序·开源·私域运营