当前位置: 首页 > article >正文

ElasticSearch-集群

本篇文章依据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: elasticsearchnode.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

相关文章:

ElasticSearch-集群

本篇文章依据ElasticSearch权威指南进行实操和记录 1,空集群 即不包含任何节点的集群 集群大多数分为两类,主节点和数据节点 主节点 职责:主节点负责管理集群的状态,例如分配分片、添加和删除节点、监控节点故障等。它们不直接…...

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

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

记录心态和工作变化

忙中带闲的工作 其实工作挺忙的, 总是在赶各种功能点. 好巧的是iOS那边因为上架的问题耽搁了一些时间, 从而让Android的进度有了很大的调整空间. 更巧的是后端那边因为对客户端的需求不是很熟悉, 加上Android海外这块的业务他也是第一次接触. 所以需要给他留一些时间把各个环节…...

深入理解 TypeScript 中的 unknown 类型:安全处理未知数据的最佳实践

在 TypeScript 的类型体系中,unknown 是一个极具特色的类型。它与 any 看似相似,却在安全性上有着本质差异。本文将从设计理念、核心特性、使用场景及最佳实践等方面深入剖析 unknown,帮助开发者在处理动态数据时既能保持灵活性,又…...

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

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

Helm配置之为特定Deployment配置特定Docker仓库(覆盖全局配置)

文章目录 Helm配置之为特定Deployment配置特定Docker仓库(覆盖全局配置)需求方法1:使用Helm覆盖值方法2: 在Lens中临时修改Deployment配置步骤 1: 创建 Docker Registry Secret步骤 2: 在 Deployment 中引用 Secret参考资料Helm配置之为特定Deployment配置特定Docker仓库(覆…...

【Spring】Spring中的适配器模式

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

GO学习指南

GO学习指南 主题一 go语言基础知识讲解 go语言面向对象编程 go语言接口详解 go语言协程 主题二 web基础知识 后续内容请大家持续关注,每月一主题,让各位读者能零基础、零成本学习go语言...

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

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

MySQL面试知识点详解

一、MySQL基础架构 1. MySQL逻辑架构 MySQL采用分层架构设计,主要分为: 连接层:处理客户端连接、授权认证等 服务层:包含查询解析、分析、优化、缓存等 引擎层:负责数据存储和提取(InnoDB、MyISAM等&am…...

小白入门:GitHub 远程仓库使用全攻略

一、Git 核心概念 1. 三个工作区域 工作区(Working Directory):实际编辑文件的地方。 暂存区(Staging Area):准备提交的文件集合(使用git add操作)。 本地仓库(Local…...

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去获取对应商品的详细信息,但是产品服务和订单服…...

如何保证RabbitMQ消息的顺序性?

保证RabbitMQ消息的顺序性是一个常见的需求,尤其是在处理需要严格顺序的消息时。然而,默认情况下,RabbitMQ不保证消息的全局顺序,因为消息可能会通过不同的路径(例如不同的网络连接或线程)到达队列&#xf…...

FPGA学习知识(汇总)

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

c语言 写一个五子棋

c语言 IsWin判赢 display 画 10 x 10 的棋盘 判断落子的坐标是否已有棋子 判断落子坐标范围是否超出范围 // 五子棋 #include <stdio.h> #include <stdlib.h>// 画棋盘 10 x 10的棋盘&#xff0c;len为行数 void display(char map[][10], int len) {system(&q…...

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

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

Python爬虫实战:研究源码还原技术,实现逆向解密

1. 引言 在网络爬虫技术实际应用中,目标网站常采用各种加密手段保护数据传输和业务逻辑。传统逆向解密方法依赖人工分析和调试,效率低下且易出错。随着 Web 应用复杂度提升,特别是 JavaScript 混淆技术广泛应用,传统方法面临更大挑战。 本文提出基于源码还原的逆向解密方法…...

WordPress Relevanssi插件时间型SQL注入漏洞(CVE-2025-4396)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...

Adobe Illustrator学习备忘

1.移动画板&#xff1a;需按住空格键加鼠标一块才能拖动 2.放大缩小画板&#xff1a;按住Alt键加鼠标滚轮 3.撤回&#xff1a;CtrlZ 4.钢笔练习网站&#xff1a;The Bzier Game...

C#中的dynamic与var:看似相似却迥然不同

在C#编程的世界里&#xff0c;var和dynamic这两个关键字常常让初学者感到困惑。它们看起来都在定义变量时省略了显式类型声明&#xff0c;但实际上它们的工作方式和应用场景有着天壤之别。今天&#xff0c;让我们一起揭开这两个关键字的神秘面纱。 var&#xff1a;编译时的类型…...

求职困境:开发、AI、运维、自动化

文章目录 问&#xff1a;我的技术栈是web全栈&#xff08;js&#xff0c;css&#xff0c;html&#xff0c;react&#xff0c;typscript&#xff09;&#xff0c;C开发&#xff0c;python开发&#xff0c;音视频图像开发&#xff0c;神经网络深度学习开发&#xff0c;运维&#…...

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

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

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

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

docker compose up -d 是一个用于 通过 Docker Compose 在后台启动多容器应用 的命令

docker compose 表示调用 Docker Compose 工具&#xff0c;用于管理基于 YAML 文件定义的多容器应用。 up 核心指令&#xff0c;作用是根据 docker-compose.yml 文件中的配置&#xff0c;创建并启动所有定义的服务、网络、卷等资源。 如果容器未创建&#xff0c;会先构建镜像&…...

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

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

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

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

Problem E: List练习

1.题目描述 运用List完成下面的要求: 1) 创建一个List&#xff0c;在List中增加三个工人&#xff0c;基本信息如下&#xff1a; 姓名 年龄 工资 Tom 18 3000 Peter 25 3500 Mark 22 3200 2) 插入一个工人&#xff0c;信息为&#xff1a;姓名&#xff1a;Robert&#xff0…...