ElasticSearch-集群

news2025/5/20 4:40:20

本篇文章依据ElasticSearch权威指南进行实操和记录

1,空集群

即不包含任何节点的集群

集群大多数分为两类,主节点和数据节点

主节点

  1. 职责:主节点负责管理集群的状态,例如分配分片、添加和删除节点、监控节点故障等。它们不直接处理搜索或数据存储任务,但它们对于集群的健康和性能至关重要。

  2. 选举过程:在Elasticsearch中,主节点是通过选举产生的。默认情况下,集群中的任何节点都可以成为主节点候选者。这意味着任何一个节点都可以发起成为主节点的请求,然后与其他节点竞争以决定谁是新的主节点。

  3. 资源需求:主节点通常不需要太多的资源来处理其任务,因为它不直接处理数据。但是,它需要稳定的网络连接和足够的CPU来处理集群状态管理任务。

数据节点

  1. 职责:数据节点负责存储数据、搜索数据和处理与数据相关的操作,如索引和搜索请求。数据节点是执行实际数据存储和检索任务的地方。

  2. 资源需求:数据节点需要大量的资源来存储和处理数据。这包括大量的内存(用于缓存)、磁盘空间(用于存储数据)以及CPU资源(用于处理搜索和聚合查询)。

  3. 配置:在Elasticsearch中,默认情况下,每个节点都是数据节点。但是,你可以通过配置来指定哪些节点应该仅作为主节点或仅作为数据节点运行

空集群即启动节点且不包含任何数据和索引,由于集群中必有一个主节点,所以空集群比定为主节点

2,集群健康

集群健康是集群监控系统数据中的其中一项,而且最为重要

输入如下指令

GET /_cluster/health

返回

可以看到status返回了yellow

status状态

status指示着当前集群在总体上是否工作正常。包括三种颜色,green:所有的主分片和副本分片都正常运行,yellow:所有的主分片都正常运行,但不是所有的副本分片都正常运行,red:有主分片没能正常运行。

全部字段含义

{
  "cluster_name": "elasticsearch", //集群名称
  "status": "green", //集群状态  
  "timed_out": false, //检查是否因超时中断,false表示检查完整完成
  "number_of_nodes": 2, //集群中节点总数(当前为2个)
  "number_of_data_nodes": 2, //具备数据存储功能的节点数量(当前为2个)
  "active_primary_shards": 42, //活跃的主分片数(42个)
  "active_shards": 84,//总分片数(含副本,84个)
  "relocating_shards": 0, //正在迁移的分片数(0表示无迁移)
  "initializing_shards": 0, //初始化中的分片数
  "unassigned_shards": 0, //未分配的分片数
  "unassigned_primary_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 //活跃分片百分比,100表示全部分片正常
}

3,添加索引

索引之前这篇文章简单介绍过ElasticSeach快速上手笔记-入门篇-CSDN博客​​​​​​

es的索引指的是存储相关数据的数据结构,可以类比成mysql的数据表,es索引会存储不同的数据结构key和value的关系

分片是一个 Lucene 的实例,以及它本身就是一个完整的搜索引擎。 我们的文档被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互

分片可以把数据分散存储在es的集群中

同样分片也分为主分片和副分片

主分片:每个索引被划分成若干个主分片,每个主分片都是一个独立的索引。主分片负责处理所有的读和写操作‌,主分片的数量在索引创建时确定,之后不能更改‌,主分片是数据存储的基本单位,每个主分片存储索引的一部分数据‌

副分片:副本分片是主分片的完整复制,位于不同的节点上,副本的数量可以在索引运行时动态调整‌,副本分片用于提高系统的可用性和容错性。如果某个节点故障,系统仍然能够通过副本分片提供服务‌

新建索引

接下来参考权威指南在空集群新建一个索引

PUT /blogs
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}

返回

可以看到成功新建

再次查看集群健康状态

可以看到status=yellow,集群状态主分片全部正常运行,但是副分片未全部正常,

unassigned_shards=5,这里处于未被分配状态的分片数量有5个,除了最开始的2个,刚才又新建了2个,所以有5个

注意分片要不只存储原始数据,要不只存储副本数量,无需既存储原始数据又存储副本数据,这样会在数据丢失的时候原始数据和副本全部丢失

4,添加故障转移

当前咱的集群只有一个节点,这样当前节点宕机等异常的时候会导致数据丢失

所以可以部署新的节点来解决这个问题

准备新节点

首先复制一份es文件

同时把data文件删除掉

修改elasticsearch.yml文件

cluster.name: elasticsearch
 
node.name: node-1
http.port: 9303

cluster.name:集群名字,确认两个节点保持相同

node.name:节点名称,不同的节点名称唯一

http.port:端口号,各个节点均不同

启动新节点

./bin/elasticsearch

进入es文件下 和之前启动节点相同执行以上指令

kibana查看节点数量

输入指令

GET /_cat/nodes?v

返回

可以看到当前集群下有两个节点

查看集群健康状态

GET /_cluster/health

返回

可以看到这个时候的status=green了 表明所有的节点都在正常运行

同时unassigned_shards的数量变成了0

表明所有的分片都分配好了

分片分布情况

节点一分片数量3个,节点二数量3个

可以看到两个节点的分片是均匀分布的

5,水平扩容

在了解水平扩容之前,先了解下扩容有几类

水平扩容:水平扩容是指增加更多的节点到集群中,而不是增加单个节点的资源。这种方式可以显著提高系统的容量和处理能力

垂直扩展:垂直扩展是指增加单个节点的资源,比如增加CPU、内存或者存储空间。这种方式通常通过升级单个节点的硬件来实现。

当开发的项目量级逐渐增加,需要的存储的数据越来越多,只有两个节点是远远不够的,所以需进行水平扩容

增加节点3

参考之前部署节点部署节点3

可以看到节点3成功启动了

重新查看当前集群的节点情况

GET /_cat/nodes?v

返回

可以看到这个时候多了节点node-3,共有3个节点

分片分布情况

node-1

node-1的分片有2个

node-3

node-3的分片有2个

默认节点

默认节点同样有2个

作用

之前每个节点拥有3个分片,现在每个节点拥有2个分片

每个节点的硬件资源(CPU, RAM, I/O)将被更少的分片所共享,每个分片的性能将会得到提升

现在拥有6个分片(3个主分片和3个副本分片)的索引可以最大扩容6个节点,每个节点上存在一个分片,并且每个分片拥有所在节点的全部资源

继续扩容

权威指南里指出当需要的节点数量超过了当前的分片数量的时候,该咋办

这时候可以通过增加分片的数量进而进行水平扩容

增加分片可以选择主分片和副本分片,但主分片在索引新建的时候已确定了,但副本分片可以进行读操作和搜索操作可以动态修改

修改副本分片数量为2个

PUT /blogs/_settings
{
   "number_of_replicas" : 2
}

返回

再次查看分片分布情况

node-1

node-3

默认节点

这个时候分片数量扩容到了9个,因此节点数量可以扩容到9个

注意这个时候咱只是新建了3个节点,没有提高性能,单分片能够从节点中获取的资源更少,所以需拿到更好的水平得把节点数量扩容到分片数量保持相同

当然现在在不增加节点的情况下,可以保证部分节点宕机的情况下,数据不会丢失

6,应对故障

现在来测试下宕机的情况下,节点之间的处理逻辑

查看节点情况

这个时候关闭主节点之后,而集群中必定有个主节点,所以会新选举出来一个新的主节点

同时主分片会丢失,但不会影响es的正常工作

同时这个主分片对应的副本分片会变成主分片

指令

查看节点的id

GET /_cat/nodes?v&h=id,name,ip,node.role,master

返回

id   name                     ip        node.role   master
O3QH local 127.0.0.1 cdfhilmrstw *
Y-Pa node-2                   127.0.0.1 cdfhilmrstw -
qqxZ node-3                   127.0.0.1 cdfhilmrstw -

这个时候主节点为local

其它的两个节点为从节点

原节点主副分片分配情况

index shard prirep state   docs store dataset ip        node
blogs 0     r      STARTED    0  249b    249b 127.0.0.1 node-2
blogs 0     p      STARTED    0  249b    249b 127.0.0.1 node-3
blogs 0     r      STARTED    0  249b    249b 127.0.0.1 local
blogs 1     r      STARTED    0  249b    249b 127.0.0.1 node-2
blogs 1     r      STARTED    0  249b    249b 127.0.0.1 node-3
blogs 1     p      STARTED    0  249b    249b 127.0.0.1 local
blogs 2     p      STARTED    0  249b    249b 127.0.0.1 node-2
blogs 2     r      STARTED    0  249b    249b 127.0.0.1 node-3
blogs 2     r      STARTED    0  249b    249b 127.0.0.1 local

主节点拥有 1个主节点p1、2个副分片r0和r2

从节点node-2 拥有r0、r1、p2

从节点node-3拥有 p0、r1、r2

删除主节点

首先看主节点的PID

GET /_nodes/process

返回

可以看到PID为74142

关闭该节点

kill -9 74142 

重新启动节点1

可以看到主节点变成了节点3

id   name                     ip        node.role   port master
qqxZ node-3                   127.0.0.1 cdfhilmrstw 9302 *
O3QH local                    127.0.0.1 cdfhilmrstw 9300 -
Y-Pa node-2                   127.0.0.1 cdfhilmrstw 9301 -

再次关闭节点3

可以看到节点2被选举成为了主节点

当主节点关闭,其余的从节点会选举成为新的主节点

新分片分布情况

node-2分片:p0、p1、p2

节点1:r0、r1、r2

这个时候查看集群健康状态

GET /_cluster/health

返回

可以看到状态status=yellow

由于这个时候关闭了节点3,有3个副本分片没有被分配,但集群仍然会正常运行,由于节点1存储这个所有主分片的副本分片

重新启动节点3

看分片情况

节点1:r0、r1、r2

节点2:p0、p1、p2

节点3:r0、r1、r2

这个时候未分配的副本分片重新分配给了节点3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2379713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文掌握工业相机选型计算

目录 一、基本概念 1.1 物方和像方 1.2 工作距离和视场 1.3 放大倍率 1.4 相机芯片尺寸 二、公式计算 三、实例应用 一、基本概念 1.1 物方和像方 在光学领域,物方(Object Space)是与像方(Image Space)相对的…

LabVIEW机械振动信号分析与故障诊断

利用 LabVIEW 开发机械振动信号分析与故障诊断系统,融合小波变换、时频分布、高阶统计量(双谱)等先进信号处理技术,实现对齿轮、发动机等机械部件的非平稳非高斯振动信号的特征提取与故障诊断。系统通过虚拟仪器技术将理论算法转化…

【Spring】Spring中的适配器模式

欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 欢迎评论交流,感谢您的阅读😄。 目录 适配器模式Spring MVC的适配器模式 适配器模式 适配器模式(Adapter Pattern&a…

2、ubuntu系统配置OpenSSH | 使用vscode或pycharm远程连接

1、OpenSSH介绍 OpenSSH(Open Secure Shell)是一套基于SSH协议的开源工具,用于在计算机网络中提供安全的加密通信。它被广泛用于远程系统管理、文件传输和网络服务的安全隧道搭建,是保护网络通信免受窃听和攻击的重要工具。 1.1…

RPC与SOAP的区别

一.RPC(远程过程调用)和SOAP(简单对象访问协议)均用于实现分布式系统中的远程通信,但两者在设计理念、协议实现及应用场景上存在显著差异。 二.对比 1.设计理念 2.协议规范 3.技术特性 4.典型应用场景 5.总结 三.总结…

Day11-苍穹外卖(数据统计篇)

前言: 今天写day11的内容,主要讲了四个统计接口的制作。看起来内容较多,其实代码逻辑都是相似的,这里我们过一遍。 今日所学: Apache ECharts营业额统计用户统计订单统计销量排行统计 1. Apache ECharts 1.1 介绍 A…

Tomcat简述介绍

文章目录 Web服务器Tomcat的作用Tomcat分析目录结构 Web服务器 Web服务器的作用是接收客户端的请求,给客户端作出响应。 知名Java Web服务器 Tomcat(Apache):用来开发学习使用;免费,开源JBoss&#xff0…

《从零开始:Spring Cloud Eureka 配置与服务注册全流程》​

关于Eureka的学习,主要学习如何搭建Eureka,将order-service和product-service都注册到Eureka。 1.为什么使用Eureka? 我在实现一个查询订单功能时,希望可以根据订单中productId去获取对应商品的详细信息,但是产品服务和订单服…

FPGA学习知识(汇总)

1. wire与reg理解,阻塞与非阻塞 2. 时序取值,时钟触发沿向左看 3. ip核/setup debug 添加 ila 一、ila使用小技巧 二、同步复位、异步复位和异步复位同步释放 设计复位设计,尽量使用 异步复位同步释放;尽管该方法仍然对毛刺敏感…

Redisson分布式锁-锁的可重入、可重试、WatchDog超时续约、multLock联锁(一文全讲透,超详细!!!)

本文涉及到使用Redis实现基础分布式锁以及Lua脚本的内容,如有需要可以先参考博主的上一篇文章:Redis实现-优惠卷秒杀(基础版本) 一、功能介绍 (1)前面分布式锁存在的问题 在JDK当中就存在一种可重入锁ReentrantLock,可重入指的是在同一线…

语言模型:AM-Thinking-v1 能和大参数语言模型媲美的 32B 单卡推理模型

介绍 a-m-team 是北科 (Ke.com) 的一个内部团队,致力于探索 AGI 技术。这是一个专注于增强推理能力的 32B 密集语言模型。 a-m-team / AM-Thinking-v1 是其旗下的一个语言模型,采用低成本的方式能实现和大参数模型媲美。 DeepSe…

ChatGPT:OpenAI Codex—一款基于云的软件工程 AI 代理,赋能 ChatGPT,革新软件开发模式

ChatGPT:OpenAI Codex—一款基于云的软件工程 AI 代理,赋能 ChatGPT,革新软件开发模式 导读:2025年5月16日,OpenAI 发布了 Codex,一个基于云的软件工程 AI 代理,它集成在 ChatGPT 中&#xff0c…

智能视觉检测技术:制造业质量管控的“隐形守护者”

在工业4.0浪潮的推动下,制造业正经历一场以智能化为核心的变革。传统人工质检模式因效率低、误差率高、成本高昂等问题,逐渐难以满足现代生产对高精度、高速度的需求。智能视觉检测技术作为人工智能与机器视觉融合的产物,正成为制造业质量管控…

利用html制作简历网页和求职信息网页

前言 大家好,我是maybe。今天下午初步学习了html的基础知识。做了两个小网页,一个网页是简历网页,一个网页是求职信息填写网页。跟大家分享一波~ 说明:我不打算上传图片。所以如果有朋友按照我的代码运行网页,会出现一个没有图片…

卷积神经网络进阶:转置卷积与棋盘效应详解

【内容摘要】 本文深入解析卷积神经网络中的转置卷积(反卷积)技术,重点阐述标准卷积与转置卷积的计算过程、转置卷积的上采样作用,以及其常见问题——棋盘效应的产生原因与解决方法,为图像分割、超分辨率等任务提供理论…

2025年5月13日第一轮

1.百词斩 2.安全状态和死锁 3.银行家算法和状态图 4.Vue运行 5.英语听力 6.词汇 7.英语 长篇:数学竞赛 8.数学 间断点类型和数量 The rapid development of artificial intelligence has led to widerspareasd concreasns about job displacemant.As AI technology conti…

小结:Android系统架构

https://developer.android.com/topic/architecture?hlzh-cn Android系统的架构,分为四个主要层次:应用程序层、应用框架层、库和运行时层以及Linux内核层。: 1. 应用程序层(Applications) 功能:这一层包…

基于C#的MQTT通信实战:从EMQX搭建到发布订阅全解析

MQTT(Message Queueing Telemetry Transport) 消息队列遥测传输,在物联网领域应用的很广泛,它是基于Publish/Subscribe模式,具有简单易用,支持QoS,传输效率高的特点。 它被设计用于低带宽,不稳定或高延迟的…

ISP中拖影问题的处理

有时候会出现如下的阴影问题该如何处理呢?本文将提供几个思路。 1、降低曝光时间 如果曝光时间过大,会统计整个曝光时间内的图像信息,就会导致拖影的产生,这个时候可以考虑降低一下曝光时间。 2、时域降噪过大 只要明白时域降噪…

SQLMesh 模型管理指南:从创建到验证的全流程解析

本文全面介绍SQLMesh这一现代化数据转换工具的核心功能,重点讲解模型创建、编辑、验证和删除的全生命周期管理方法。通过具体示例和最佳实践,帮助数据工程师掌握SQLMesh的高效工作流程,包括增量模型配置、变更影响评估、安全回滚机制等关键操…