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

相关推荐
云起无垠6 分钟前
“AI+Security”系列第4期(一)之“洞” 见未来:AI 驱动的漏洞挖掘新范式
人工智能
forestsea7 分钟前
【Elasticsearch】分片与副本机制:优化数据存储与查询性能
大数据·elasticsearch·搜索引擎
开着拖拉机回家14 分钟前
【Ambari】使用 Knox 进行 LDAP 身份认证
大数据·hadoop·gateway·ambari·ldap·knox
运维&陈同学18 分钟前
【Beats01】企业级日志分析系统ELK之Metricbeat与Heartbeat 监控
运维·elk·elasticsearch·云原生·kibana·heartbeat·metricbeat
地球资源数据云20 分钟前
全国30米分辨率逐年植被覆盖度(FVC)数据集
大数据·运维·服务器·数据库·均值算法
QQ_77813297425 分钟前
基于深度学习的图像超分辨率重建
人工智能·机器学习·超分辨率重建
INFINI Labs35 分钟前
Elasticsearch filter context 的使用原理
大数据·elasticsearch·jenkins·filter·querycache
chengpei14736 分钟前
Elasticsearch介绍及安装部署
elasticsearch·搜索引擎
清 晨37 分钟前
Web3 生态全景:创新与发展之路
人工智能·web3·去中心化·智能合约
公众号Codewar原创作者1 小时前
R数据分析:工具变量回归的做法和解释,实例解析
开发语言·人工智能·python