深入了解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集群的工作原理有一个全面的认识。

相关推荐
智能汽车人1 分钟前
自动驾驶---SD图导航的规划策略
人工智能·机器学习·自动驾驶
mengyoufengyu11 分钟前
DeepSeek11-Ollama + Open WebUI 搭建本地 RAG 知识库全流程指南
人工智能·深度学习·deepseek
Tianyanxiao12 分钟前
华为×小鹏战略合作:破局智能驾驶深水区的商业逻辑深度解析
大数据·人工智能·经验分享·华为·金融·数据分析
rit843249939 分钟前
基于BP神经网络的语音特征信号分类
人工智能·神经网络·分类
一点.点44 分钟前
AlphaDrive:通过强化学习和推理释放自动驾驶中 VLM 的力量
人工智能·机器学习·自动驾驶
科技小E1 小时前
口罩佩戴检测算法AI智能分析网关V4工厂/工业等多场景守护公共卫生安全
网络·人工智能
说私域1 小时前
基于定制开发开源AI智能名片S2B2C商城小程序的首屏组件优化策略研究
人工智能·小程序·开源·零售
vlln1 小时前
2025年与2030年AI及AI智能体 (Agent) 市场份额分析报告
人工智能·深度学习·神经网络·ai
栗克1 小时前
Halcon 图像预处理②
人工智能·计算机视觉·halcon
互联网全栈架构2 小时前
遨游Spring AI:第一盘菜Hello World
java·人工智能·后端·spring