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

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

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

相关文章

LG P9844 [ICPC 2021 Nanjing R] Paimon Segment Tree Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​),有 m m m 次修改 ( l , r , v ) (l,r,v) (l,r,v): 对每个 i ∈ [ l , r ] i\in[l,r] i∈[l,r],令 a i ← a i v a_i\gets a_iv ai​←…

Google Prompt Tuning:文本嵌入优化揭秘

Google Research Prompt Tunin :from_embedded_string 在 Google Research 的 Prompt Tuning 项目代码库 中,from_embedded_string 函数主要用于基于字符串文本初始化提示词的嵌入向量,其调用场景通常与提示词优化或任务适配相关。 1. 核心代码位置 from_embedded_string …

网页 H5 微应用接入钉钉自动登录

ℹ️关于云审批 云审批(cloud approve) ,一款专为小微企业打造,支持多租户的在线审批神器。它简化了申请和审批流程,让您随时随地通过手机或电脑完成请款操作。员工一键提交申请,审批者即时响应&#xff0c…

idea无法识别Maven项目

把.mvn相关都删除了 导致Idea无法识别maven项目 或者 添加导入各个模块 最后把父模块也要导入

飞桨paddle import fluid报错【已解决】

跟着飞桨的安装指南安装了paddle之后 pip install paddlepaddle有一个验证: import paddle.fluid as fluid fluid.install check.run check()报错情况如下,但是我在pip list中,确实看到了paddle安装上了 我import paddle别的包&#xff0c…

现代化SQLite的构建之旅——解析开源项目Limbo

现代化SQLite的构建之旅——解析开源项目Limbo 在当今飞速发展的技术世界中,轻量级且功能强大的数据库已成为开发者的得力助手。当我们谈论轻量级数据库时,SQLite无疑是一个举足轻重的名字。然而,随着技术的进步,我们对数据库的需求也变得更加多样化。这正是Limbo项目诞生…

MinIO:从入门到精通,解锁云原生存储的奥秘

一、引言:为什么 MinIO 正在重塑存储世界? 在云计算和大数据时代,传统存储系统面临扩展性差、成本高、兼容性不足等挑战。MinIO 凭借其 S3 兼容性、分布式架构、高性能存储 等特性,成为企业构建现代化存储基础设施的首选。 本文…

vscode怎么关闭自动定位文件

关闭自动定位文件功能 方式1 在设置中搜索: explorer.autoReveal 方式2 直接在settings.json中增加"explorer.autoReveal": false 添加类似jetbrains IDE的文件定位功能 可以直接安装插件市场搜索niushuaibing.vs-location, 安装后会有文件定位按钮, 点击后即可…

学习路之uniapp--unipush2.0推送功能--给自己发通知

学习路之uniapp--unipush2.0推送功能--给自己发通知 一、绑定云空间及创建云函数二、编写发送界面三、效果后期展望: 一、绑定云空间及创建云函数 package.json {"name": "server-push","dependencies": {},"main": "…

什么是VR展示?VR展示的用途

随着科技的迅猛发展,我们步入一个全新的数字时代。在这个时代,虚拟现实(VR)技术崭露头角,逐步改变我们对世界的认知。全景展示厅作为VR技术与传统展览艺术的完美结合,以独特的全景视角,引领我们…

抖音IP属地跟无线网有关吗?如何更改

IP属地显示功能让许多用户感到好奇——为什么自己的位置信息有时准确,有时却显示在其他城市?这时,用户会疑惑:抖音IP属地跟无线网有关系吗?抖音的IP属地显示与其所使用的网络类型(包括无线网)密…

JESD204 ip核使用与例程分析(二)

JESD204 ip核使用与例程分析(二) JESD204时钟方案专用差分时钟对例程分析jesd204_0_transport_layer_demapperjesd204_0_sig_chkjesd204_0_clockingjesd204_0 ip核port寄存器AXI-LITE寄存器配置jesd204_phy ip核JESD204时钟方案 图3-1所示为最通用、灵活的时钟解决方案。在图…

微软全新开源的Agentic Web网络项目:NLWeb,到底是什么 ?

目录 1、背景 2、NLWeb是什么? 3、NLWeb是如何工作的? 3.1 技术原理 3.2 对发布者的价值 3.3 核心团队与合作伙伴 4、快速入门指南 5、延伸阅读 Agentic:Agent的形容词,Agentic指系统由大型语言模型(LLM&#…

前端性能优化的秘密武器:Preload 与 Prefetch 的深度解析

前端性能优化的秘密武器:Preload 与 Prefetch 的深度解析 在前端开发中,页面加载速度直接影响用户体验和业务转化率。而“资源预加载”技术,正是优化加载性能的核心手段之一。本文将深入浅出地讲解 Preload 与 Prefetch 这两项技术&#xff…

App Builder技术选型指南:从AI编程到小程序容器,外卖App开发实战

在2025年快速迭代的技术生态中,开发者构建App的路径愈发多样化。本文以开发一个同城外卖App为例,对比当前主流的AI编程工具(如Cursor、GitHub Copilot、Trae)与小程序容器技术(如FinClip)的优劣势、难易度及…

深度学习入门到实战:用PyTorch打通数学、张量与模型训练全链路​

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 一. 人工智能、机器学习与深度学习的关系 1.1 概念层次解析 人工智能(AI):使机器模拟人类智能的广义领域 机器学…

windows服务器部署jenkins工具(一)

jenkins作为一款常用的构建发布工具,极大的简化了项目部署发布流程。jenkins通常是部署在linux服务上,今天给大家分享的是windows服务器上如何搭建jenkins发布工具。 1.首先第一步还是看windows安装docker 这篇文章哈,当然也可以不采用docke…

前端开发规范性利器系列之:ESLint

前言 我是一名从事低代码平台研发的前端CV程序猿,有几十名像我一样的小伙伴协同研发。在长期的多人协作和滚动迭代中,不出意外,代码中会充斥各种“坏味道”,如代码风格不统一、扩展性和灵活性降低等问题。我们是如何解决这些问题的…

数据结构知识点汇总

1、在数据结构中,随机访问是指能够直接访问任一元素,而不需要从特定的起始位置开始,也不需要按顺序访问其他元素。这种访问方式通常不涉及遍历。例如,数组(array)支持随机访问,你可以直接通过索…

ubuntu中上传项目至GitHub仓库教程

一、到github官网注册用户 1.注册用户 地址:https://github.com/ 2.安装Git 打开终端,输入指令git,检查是否已安装Git 如果没有安装就输入指令 sudo apt-get install git 二、上传项目到github 1.创建项目仓库 进入github主页,点击号…