Elasticsearch集群运维,重平衡、分片、宕节点、扩容

个人博客:无奈何杨(wnhyang)

个人语雀:wnhyang

共享语雀:在线知识共享

Github:wnhyang - Overview


参考

探索集群 · Elasticsearch 中文文档

https://www.elastic.co/guide/en/elasticsearch/reference/8.14/fix-common-cluster-issues.html

Elasticsearch运维指南-腾讯云开发者社区-腾讯云

elasticsearch重启后,unassigned索引重新分片失败YELLO、RED恢复处理_es报错分片失败-CSDN博客

磁盘空间不足导致 Elasticsearch 锁定索引无法写入数据 | Anonymity94

Elasticsearch - 随笔分类 - 散尽浮华 - 博客园

尤其是最后这个链接非常建议看一下,太棒了!

命令

小提示

在请求后加上?v触发详细响应信息,拼上?prettyjson美化。

如:curl -X GET localhost:9200/_cat/nodes?pretty响应为

192.168.168.100 66 99 4 0.45 0.22 0.22 mdi - node-2
192.168.168.101 57 99 4 0.35 0.21 0.21 mdi * node-1
192.168.168.102 52 99 4 0.20 0.15 0.18 mdi - node-3

改命令为:curl -X GET localhost:9200/_cat/nodes?v&pretty后响应为

可以看到已经有头信息了。

ip         				heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.168.100   60          	99   				4    0.36    0.21     0.22 	mdi       -      node-2
192.168.168.101   56          	99   				4    0.36    0.23     0.22 	mdi       *      node-1
192.168.168.102   52          	99   				4    0.13    0.13     0.18 	mdi       -      node-3

常用

# 集群健康检查
curl -X GET localhost:9200/_cluster/health# 集群设置
curl -X GET localhost:9200/_cluster/settings# 节点查看
curl -X GET localhost:9200/_cat/nodes# 所有索引查询
curl -X GET localhost:9200/_cat/indices# 指定索引设置查询
curl -X GET lcoalhost:9200/${my_index}/_settings# 所有分片查询
curl -X GET localhost:9200/_cat/shards# 指定索引分片查询
curl -X GET localhost:9200/_cat/shards/${my_index}# 所有别名查询
curl -X GET localhost:9200/_cat/aliases# 指定别名查询
curl -X GET localhost:9200/_cat/aliases/${my_aliases}# 磁盘使用情况
curl -X GET localhost:9200/_cat/allocation# 筛选未分配的分片
curl -X GET localhost:9200/_cat/shards?v | grep UNASSIGNED# 查看allocation失败原因
curl -X GET localhost:9200/_cluster/allocation/explain?pretty

检查集群状态

通常使用curl -X GET localhost:9200/_cluster/health?pretty检查es集群状态,如下面的响应数据。

{"cluster_name": "xxxCluster", "status": "green","timed_out": false,"number_of_nodes": 3,"number_of_data_nodes": 3,"active_primary_shards": 1370,"active_shards": 2724,"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
}

每个字段说明如下:

  • cluster_name:集群的名称。
  • status:集群的整体状态,可能的值有:
    • green:所有主分片和副本分片都处于活动状态。
    • yellow:所有主分片都处于活动状态,但不是所有副本分片都处于活动状态。
    • red:至少有一个主分片不处于活动状态。
  • timed_out:布尔值,指示请求是否超时。
  • number_of_nodes:集群中节点的总数。
  • number_of_data_nodes:集群中数据节点的总数。
  • active_primary_shards:当前活动的主分片数量。
  • active_shards:当前活动的分片总数(包括主分片和副本分片)。
  • relocating_shards:正在迁移的分片数量。
  • initializing_shards:正在初始化的分片数量。
  • unassigned_shards:未分配的分片数量。
  • delayed_unassigned_shards:延迟分配的未分配分片数量。
  • number_of_pending_tasks:等待执行的任务数量。
  • number_of_in_flight_fetch:正在执行的远程获取请求数量。
  • task_max_waiting_in_queue_millis:任务队列中的最长等待时间(以毫秒为单位)。
  • active_shards_percent_as_number:活动分片的百分比。

集群中宕掉一个节点会发生什么

假如有5个节点组成es集群,5个节点分别是node1node2node3node4node5,宕掉了node1

1、假死与节点下线检测

其他节点会尝试与失联节点建立通信。如果节点在一段时间内没有响应,其他节点会将其标记为失联。心跳检测ping超时时间、重试次数等配置查看discovery.zen开头的配置项。

2、重新分配分片

当一个节点失联时,它上面的分片将被重新分配到其他可用节点上,以保持数据的可用性和可靠性。

以其中一个索引来分析,此索引主分片设置5,副本设置2。

查看此索引设置curl -X GET lcoalhost:9200/${my_index}/_settings

查看此索引分片curl -X GET localhost:9200/_cat/shards/${my_index}

index        shard prirep state   docs store  ip  node
xxx-20240530 2     p      STARTED 5043 15.2mb es3 node3
xxx-20240530 2     r      STARTED 5043 15.6mb es5 node5
xxx-20240530 2     r      STARTED 5043 15.6mb es1 node1
xxx-20240530 1     r      STARTED 5164 15.5mb es1 node1
xxx-20240530 1     r      STARTED 5164 15.5mb es3 node3
xxx-20240530 1     p      STARTED 5164 15.5mb es2 node2
xxx-20240530 0     r      STARTED 5042 15.6mb es2 node2
xxx-20240530 0     r      STARTED 5042 15.6mb es4 node4
xxx-20240530 0     p      STARTED 5042 15.6mb es3 node3
xxx-20240530 3     r      STARTED 5164 15.5mb es5 node5
xxx-20240530 3     r      STARTED 5164 15.5mb es2 node2
xxx-20240530 3     p      STARTED 5164 15.5mb es4 node4
xxx-20240530 4     r      STARTED 5042 15.6mb es1 node1
xxx-20240530 4     r      STARTED 5042 15.6mb es4 node4
xxx-20240530 4     p      STARTED 5042 15.6mb es5 node5

索引分片分布如下图,P表示主分片,R表示副本分片,ab只是为了区分副本分片。

node1下线后,其上的分片都变为不可用状态。仅从此索引来看的话就是主分片P2、副本R1.aR4.b不可用,重新分配分片要做的就是重新建立或移动这些分片。

3、主分片的重新选举

如果失联节点上有主分片,其他副本分片会参与选举新的主分片。这确保了即使失联节点上的主分片不可用,集群仍能继续工作。

因为node1下线,此索引主分片P2不在了,所以要从已有R1.aR1.b两个副本分片中选取一个作为主分片。

4、更新集群状态

集群状态会根据重新分配的分片数量和状态更新。如果主分片无法分配,集群状态可能会变为yellowred

在集群状态变为yellowred的同时,通常伴随着其他指标(relocating_shards initializing_shards unassigned_shards)的异常。

集群状态不仅是/_cluster/health看到的集群状态,还包括,索引、分片的状态。

5、副本分片复制

如果失联节点上有副本分片,这些副本分片会被用于重新分配到其他节点上。这保证了数据的冗余性和可靠性。

在上面例子中,node1下线后,索引分片2的主分片P2丢失,在已有R1.aR1.b两个副本分片中选取一个作为主分片后,假如node5上的R1.a晋升为主分片,主分片是有了,但是副本数不够,需要在除node5node3上创建副本分片。除了丢失了主分片的分片需要创建副本,原本因为节点下线而缺少副本分片的也要创建新的副本,例子中分片1、4都需要再新建一个副本。

此时通过/_cluster/health检查集群,因为并没有冗余或是需要平衡的分片,relocating_shards(重定位/转移分片)为0;根据机器性能和es配置情况initializing_shards unassigned_shards和任务数会有差别。

同时/_cat/indices中会存在redyellow索引,/_cat/shards存在UNASSIGNED分片。

关于UNASSIGNED分片,原因有下。

curl XGET 'http://ip:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason' | grep UNASSIGNED

  • INDEX_CREATED:索引刚刚创建,分片尚未分配。
  • NODE_LEFT:一个或多个节点离开了集群,导致分片无法分配。
  • REROUTE_CANCELLED:重新路由过程被取消。
  • REPLICA_ADDED:副本分片添加到节点上,但尚未被分配。
  • ALLOCATION_FAILED:分配分片到节点上失败。
  • CLUSTER_RECOVERED:集群正在恢复。
  • EXCEPTION:发生了异常情况,导致分片无法分配。
  • IN_SYNC:副本分片已经处于与主分片同步的状态,但尚未被分配。
  • INITIALIZING:正在初始化分片。
  • PRIMARY_MISSING:主分片丢失,无法找到主分片。
  • REBALANCE_CLUSTER_SETTING:由于重新平衡集群设置而导致的未分配。
  • RECOVERY_FAILED:分片恢复失败。
  • UNKNOWN:未知的未分配原因。

如果在es集群中,UNASSIGNED分片一直存在,长时间没有变化,可以从以上原因方向去分析。

顺带一讲如果你看了一些博客将通过/_cluster/settings看到结果为

{"persistent" : { },"transient" : { }
}

博客讲的是自动分配功能未开启,但是其实并不是这样的,es具有许多默认设置,如果没有对集群进行显式的自定义配置,那么集群设置中可能会显示为空。自动分配就是默认开启的。

6、管理维护

这就不属于es集群自治的范围了,需要人工介入。如果节点持续失联,管理员可能会手动将其从集群中移除。这样可以确保集群不会因为失联节点而进一步受到影响。集群的监控系统可能会生成警报,通知运维人员和开发人员来处理问题。

集群中新加入一个节点会发生什么

1、节点发现和加入

新节点会通过集群的发现机制发现已知节点,并向它们发送加入请求。这些请求包含了新节点的基本信息和能力,例如它的IP地址、角色(数据节点、主节点等)、硬件配置等。

2、节点启动和初始化

新节点收到加入请求后,会启动并初始化自身。这包括加载配置、启动Elasticsearch服务、加入集群、并与集群中的其他节点建立通信。

3、角色分配

根据集群的配置和节点的能力,新节点会被分配适当的角色。例如,如果集群需要更多的数据节点来存储数据,新节点可能会被分配为数据节点;如果集群需要更多的主节点来处理集群级别的操作,新节点可能会被分配为主节点。

4、分片重新平衡

一旦新节点加入集群并分配了角色,集群可能会启动分片的重新平衡过程。这意味着一些分片可能会从现有节点重新分配到新节点上,以实现数据的均衡分布和提高集群的整体性能。

计算分片分配方案

集群中的协调节点(coordinating node)负责计算分片的分配方案。它会根据集群的配置、节点的状态和负载情况等因素,确定哪些分片需要移动,以及移动到哪些节点上。

移动分片

根据计算的分配方案,Elasticsearch会将需要重新分配的分片从源节点移动到目标节点上。这个过程涉及分片的复制、同步和迁移,确保数据的一致性和可用性。

更新元数据

在分片移动完成后,Elasticsearch会更新集群的元数据,包括分片的位置、状态和分配情况等信息。这样,集群就能够知道每个分片的当前位置和状态。

触发复制和同步

如果移动的是副本分片,Elasticsearch会触发副本分片的复制和同步过程。这确保了数据的冗余性和高可用性,即使在节点故障时也能保持数据的完整性。

分片的平衡被多方面影响,你可能听过“理论存在,实践开始”这句话。在负载中有轮询、hash、权重,用于平衡服务差异,目标是做到所有服务的请求稳定。在数据分布上,我们也期待着平衡,也有磁盘占用率、CPU处理效率、IO读写效率差异而带来的不同平衡机制。虽然这些平衡机制存在,但是在无论是在服务多活还是中间件集群中尽量都要使用相同配置的机器,这样就能减少因为硬件差异带来的软件性能的差异。

5、管理运维

属于人工范畴,集群状态更新时应该被监控系统监听到并通知相应的运维人员和开发负责人,根据具体情况处理。

锁文件node.lock

Elasticsearch中的node.lock文件是用于跟踪节点是否已经启动的标记文件。当一个Elasticsearch节点启动时,它会尝试在数据目录下创建一个名为node.lock的文件。这个文件的存在表示节点已经在该数据目录下启动了,而且已经拥有了这个数据目录的控制权。

这个node.lock文件的存在确保了在同一个数据目录下只能运行一个Elasticsearch节点。这是因为如果尝试在一个数据目录下启动第二个节点,第二个节点会检测到已经存在一个node.lock文件,从而拒绝启动。这有助于防止数据目录被多个节点同时使用,从而导致数据的损坏或不一致。

通常情况下,node.lock文件的存在是Elasticsearch节点正常运行的标志。如果你看到这个文件存在,说明节点已经在该数据目录下启动了。如果你想要启动另一个节点,你需要选择一个不同的数据目录,或者删除现有的node.lock文件。

写在最后

拙作艰辛,字句心血,望诸君垂青,多予支持,不胜感激。


个人博客:无奈何杨(wnhyang)

个人语雀:wnhyang

共享语雀:在线知识共享

Github:wnhyang - Overview

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

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

相关文章

STM32高级控制定时器(STM32F103):TIM1和TIM8介绍

目录 概述 1 认识TIM1和TIM8 2 TIM1和TIM8的特性 3 TIM1和TIM6时基和分频 3.1 时基单元 3.2 预分频 3.3 时基和分频相关寄存器 3.3.1TIMx_CR1 3.3.2 TIMx_PSC 概述 本文主要介绍STM32高级定时器TIM1和TIM8的功能,还介绍了与之相关的寄存器的配置参数。包括…

快速排序 -非递归版-双指针版

个人主页点这里~ 非递归法: 快速排序的非递归实现涉及到使用一个栈来模拟递归调用栈。 因为递归调用内存的栈区一般只有8M,如果数据很多则容易栈溢出(不过现在硬件基本不会),而使用数据结构的栈来模拟实现递归是调用堆区,一般右2G. //得到key int QuickSort1(int* a, int lef…

Sui Bridge在测试网上线并推出10万SUI激励计划

是一种为Sui设计的原生桥接协议,专门用于在Sui与其他网络之间桥接资产和数据。今天,Sui Bridge宣布在测试网上线。作为一种原生协议,Sui Bridge能够在Ethereum和Sui之间轻松且安全地转移ETH、wBTC、USDC和USDT,使其成为Sui基础设施…

ARM-V9 RME(Realm Management Extension)系统架构之功耗管理

安全之安全(security)博客目录导读 目录 一、系统功耗管理 1、功耗状态 2、PE功耗管理 3、系统和PE集群功耗管理 4、系统功耗状态 二、RME组件功耗管理 本节规定了RME系统的功耗管理规则。 功耗管理流程定义了系统及其组件如何在各种电源状态之间进行转换,以…

论文研读|以真实图像为参考依据的AIGC检测

前言:这篇文章介绍几篇AIGC检测的相关工作,其中前几篇文章是以真实图像的特征作为标准进行检测,最后一篇文章就当拓展一下知识边界吧~ 目录 Detecting Generated Images by Real Images Only (202311 arXiv)Let Real Images be as…

代码随想录算法训练营第37天|● 56.合并区间● 738.单调递增的数字

合并区间 56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 按照左边界从小到大排序之后&#xff0c;如果 intervals[i][0] < intervals[i - 1][1] 即intervals[i]的左边界 < intervals[i - 1]的右边界&#xff0c;则一定有重叠。&#xff08;本题相邻区间也算重贴…

SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件

SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件 H2 是一个用 Java 开发的嵌入式数据库&#xff0c;它的主要特性使其成为嵌入式应用程序的理想选择。H2 仅是一个类库&#xff0c;可以直接嵌入到应用项目中&#xff0c;而无需独立安装客户端和服务器端。 常用开源数…

Linux Debian12使用podman安装pikachu靶场环境

一、pikachu简介 Pikachu是一个带有漏洞的Web应用系统&#xff0c;在这里包含了常见的web安全漏洞。 二、安装podman环境 Linux Debian系统如果没有安装podman容器环境&#xff0c;可以参考这篇文章先安装podman环境&#xff0c; Linux Debian11使用国内源安装Podman环境 三…

【Numpy】一文向您详细介绍 np.trunc()

【Numpy】一文向您详细介绍 np.trunc() 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&#xff0c;…

[数据集][目标检测]中国象棋检测数据集VOC+YOLO格式300张12类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;300 标注数量(xml文件个数)&#xff1a;300 标注数量(txt文件个数)&#xff1a;300 标注类别…

Django后台忘记管理员的账号

使用命令启动项目&#xff1a; python manage.py runserver输入后缀/admin&#xff0c;进入后台管理员&#xff0c;如果此时忘记你先前设置的用户名与密码怎么办&#xff1f; 终端输入&#xff1a; python manage.py shell 输入以下内容&#xff0c;并查看返回结果&#xff…

用【R语言】揭示大学生恋爱心理:【机器学习】与【深度学习】的案例深度解析

目录 第一部分&#xff1a;数据收集与预处理 1.1 数据来源 1.2 数据清洗 1.3 数据探索性分析 第二部分&#xff1a;特征工程与数据准备 2.1 特征选择 2.2 特征提取 第三部分&#xff1a;机器学习模型 3.1 逻辑回归模型 3.2 决策树模型 第四部分&#xff1a;深度学习…

ui自动化中,隐式等待和显示等待什么时候使用

隐式等待 在页面刷新加载时&#xff0c;页面元素还没有出来&#xff0c;这个时候如果去找元素就会找不到报错 或者点了一个菜单&#xff0c;页面加载时 用笨办法&#xff0c;就是用sleep等待固定的时间&#xff0c;这种浪费的时间比较多&#xff0c;就可以用隐式等待&#xf…

美业门店管理系统Java源码分享-【库存管理】的功能和作用

美业收银系统在美容行业中的作用和重要性体现在提高管理效率、提升客户满意度、降低成本、促进业务增长等方面。它为连锁美业提供了一个全面的管理工具&#xff0c;能够更好地应对市场挑战&#xff0c;提升竞争力。 美业系统中的【库存管理】在整个美容行业中起着非常重要的作…

【SpringCloud学习笔记】RabbitMQ(中)

1. 交换机概述 前面《RabbitMQ上篇》我们使用SpringAMQP来演示如何用Java代码操作RabbitMQ&#xff0c;当时采用的是生产者直接将消息发布给队列&#xff0c;但是实际开发中不建议这么多&#xff0c;更加推荐生产者将消息发布到交换机(exchange)&#xff0c;然后由exchange路由…

护眼台灯攻略:护眼台灯真的有用吗?

当前&#xff0c;近视问题在人群中愈发普遍&#xff0c;据2024年的统计数据显示&#xff0c;我国儿童青少年的总体近视率已高达52.7%。近视的人越来越多&#xff0c;近视背后还潜藏着视网膜脱离、白内障、开角型青光眼等眼部疾病&#xff0c;严重的情况甚至可能引发失明。长时间…

P3388 【模板】割点(割顶)

题目背景 割点 题目描述 给出一个 n 个点&#xff0c;m 条边的无向图&#xff0c;求图的割点。 输入格式 第一行输入两个正整数 n,m。 下面 m 行每行输入两个正整数 x,y 表示 x 到 y 有一条边。 输出格式 第一行输出割点个数。 第二行按照节点编号从小到大输出节点&am…

CNAS认证是什么?怎么做?

在全球化日益深入的今天&#xff0c;产品质量和安全已经成为企业生存和发展的重要基石。而在这个过程中&#xff0c;CNAS认证作为一种权威性的认可机制&#xff0c;发挥着不可替代的作用。那么&#xff0c;CNAS认证究竟是什么&#xff1f;我们又该如何进行这一认证过程呢&#…

【MySQL】表的基本增删查改(结合案例)

文章目录 1.前言2.插入数据&#xff08;Create&#xff09;2.1案例2.2单行数据全列插入2.3多行数据指定列插入2.4插入否则更新2.5替换 3. 读取数据(Retireve)3.1案例3.2全列查询3.3指定列查询3.4查询字段为表达式3.5为查询结果起别名3.6去重3.7where条件3.7.1案例 3.8排序3.9筛…