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

ES使用心得

客户端

Transport Client已经快要废弃了,官方推荐使用High Level REST Client。

常用命令

启停

systemctl start elasticsearch
systemctl stop elasticsearch

节点状态

curl http://myservice1:9200/_cat/nodes?vip           heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
xx.xx.xx.205           15          96   2    0.10    0.08     0.08 mdi       -      xx.xx.xx.205
xx.xx.xx.250           18          98  14    0.66    0.35     0.31 di        -      xx.xx.xx.250
xx.xx.xx.7             25          99   2    0.21    0.11     0.06 mdi       -      xx.xx.xx.7
xx.xx.xx.30            30          93  13    1.15    0.60     0.42 di        -      xx.xx.xx.30
xx.xx.xx.249           64          94   3    0.09    0.06     0.10 di        -      xx.xx.xx.249
xx.xx.xx.12            75          99   2    0.20    0.08     0.06 mdi       *      xx.xx.xx.12
xx.xx.xx.2             70          96   1    0.14    0.09     0.07 di        -      xx.xx.xx.2
xx.xx.xx.36            27          99  13    0.83    0.45     0.36 di        -      xx.xx.xx.36

注意node.role和master两列,前者表示节点角色,有:mdi(master+data+ingest)和di(data+ingest)。

master列为星号的表示主节点。比如这里xx.xx.xx.12就是主节点。

集群健康状态

curl http://myservice1:9200/_cat/health?vepoch      timestamp cluster       status node.total node.data shards  pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1651459176 02:39:36  elasticsearch green           8         8   3796 1898    0    0        0             0                  -                100.0%

各列含义:

cluster ,集群名称
status,集群状态 green代表健康;yellow代表分配了所有主分片,但至少缺少一个副本,此时集群数据仍旧完整;red代表部分主分片不可用,可能已经丢失数据。
node.total,代表在线的节点总数量
node.data,代表在线的数据节点的数量
shards, active_shards 存活的分片数量
pri,active_primary_shards 存活的主分片数量 正常情况下(replica=1), shards的数量是pri的两倍。
relo, relocating_shards 迁移中的分片数量,正常情况为 0
init, initializing_shards 初始化中的分片数量 正常情况为 0
unassign, unassigned_shards 未分配的分片 正常情况为 0
pending_tasks,准备中的任务,任务指迁移分片等 正常情况为 0
max_task_wait_time,任务最长等待时间
active_shards_percent,正常分片百分比 正常情况为 100%

列出所有索引

curl http://myservice1:9200/_cat/indices?v

修改索引副本数

PUT test/_settings
{"index": {"number_of_replicas" : 1}
}

文档增删改查

指定ID创建一个索引,并往其中加入文档,文档格式为json
curl -XPUT -H "Content-Type: application/json" 'myservice1:9200/customer/external/1?pretty' -d '
{
"name": "yibei"
}'不指定ID的加入一个文档
curl -XPOST -H "Content-Type: application/json" 'myservice1:9200/customer/external?pretty' -d '
{
"name": "xx3"
}'修改文档内容
curl -XPOST -H "Content-Type: application/json" 'myservice1:9200/customer/external/1/_update?pretty' -d'
{
"doc":{"name": "lixiao","age":45}
}'从索引里根据ID取得某个文档
curl -XGET 'myservice1:9200/customer/external/1?pretty'搜索所有文档
curl -XPOST -H "Content-Type: application/json" 'myservice1:9200/customer/_search?pretty' -d '
{
"query": { "match_all": {} },
"from": 0,
"size":20
}'删除索引
curl -XDELETE 'myservice1:9200/customer?pretty'查看恢复进程
curl -XGET 'myservice1:9200/_recovery'

文档update or insert

参考这里:

使用doc_as_upsert:

curl -XPOST -H "Content-Type: application/json" 'myservice1:9200/customer/external/1/_update' -d '{"doc" : {"name" : "yibei1"},"doc_as_upsert" : true
}'

进阶

shard/replica和ES节点

参看该文说明

节点down掉对集群影响的实验

总共8个节点,分别看一下同时down掉1/2/3个节点对集群状态和读写的影响。

8个节点的总分片和主分片数是:3796 1898

同时1个节点down掉,查看集群健康状态:

epoch      timestamp cluster       status node.total node.data shards  pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1651460709 03:05:09  elasticsearch yellow          7         7   3322 1898    0    0      474             0                  -                 87.5%

集群状态变为黄色,主分片未受影响,备份分片减少,未分配分片数为474,active_shards_percent从100%降为87.5%。

读操作未受影响,写操作略有点慢,但还是能写入。

另外,我们注意到一点,这种情况相当于节点退出,ES会自动做shard relocation,因此shards和active_shards_percent会缓慢恢复。同时由于主分片未受损,大概20min左右,集群就会重新恢复到green状态。

同时2个节点down掉,查看集群健康状态:

epoch      timestamp cluster       status node.total node.data shards  pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1651468939 05:22:19  elasticsearch red             6         6   3405 1861    2    0      381             0                  -                 89.9%

集群状态变为红色,主分片有损失,active_shards_percent降到89.9%,这个值看来跟down掉的节点数并无线性关系

读操作未受影响,写操作时如果正在做shard relocation,略有点慢,但还是能写入的。

shards和active_shards_percent会缓慢恢复,但恢复不到100%的状态,因为主分片已受损了,补偿不回来的。过了一段时间,集群状态最后也始终停留在red,此时active_shards_percent停留在98.3%,unassign有64个分片无法恢复,恰好就是损失的主分片数的2倍!

最后,我们将2个节点恢复,集群经过30s的shard relocation,即可恢复green状态,active_shards_percent也为100%.

同时3个节点down掉,查看集群健康状态:

epoch      timestamp cluster       status node.total node.data shards  pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1651462580 03:36:20  elasticsearch red             5         5   2641 1826    0    0     1155             0                  -                 69.6%

集群状态变为红色,主分片已受损,备份分片更是减少的厉害,active_shards_percent降到了69.6%。

读操作未受影响,写操作有时慢,有时还会超时,报错:

{"error" : {"root_cause" : [{"type" : "unavailable_shards_exception","reason" : "[customer][4] primary shard is not active Timeout: [1m], request: [BulkShardRequest [[customer][4]] containing [index {[customer][external][G3sTg4ABDFINJI3kc3ug], source[\n{\n\"name\": \"liping2\"\n}]}]]"}],"type" : "unavailable_shards_exception","reason" : "[customer][4] primary shard is not active Timeout: [1m], request: [BulkShardRequest [[customer][4]] containing [index {[customer][external][G3sTg4ABDFINJI3kc3ug], source[\n{\n\"name\": \"liping2\"\n}]}]]"},"status" : 503
}

可能刚好写到受损的主分片上了。再试一次,又成功了,应该是选了一个健康的主分片来写。

三个节点down掉后,ES依然会自动做shard relocation,因此shards和active_shards_percent会缓慢恢复,但恢复不到100%的状态,因为主分片已受损了,补偿不回来的。过了40min,集群状态最后也始终停留在red,此时active_shards_percent停留在96.2%,unassign有144个分片无法恢复,恰好就是损失的主分片数的2倍!

最后,我们将3个节点恢复,集群经过1~2min的shard relocation,即可恢复green状态,active_shards_percent也为100%。

结论

  1. 节点退出后的shard relocation动作会比较慢,在relocation阶段如果有业务查询或修改也会比较慢;
  2. 节点加入后的shard relocation动作很快,基本上1~2min就可以恢复正常;
  3. replica=1时,仅仅down掉2个节点,就会导致集群的主分片受损,永远陷入red状态,并可能导致写入超时(写到受损主分片时);
  4. 分片可以认为是一块为index预分配的空间,只在index新建或删除时会变化,而在insert doc时并不会变;分片数在索引创建时确定,后续不能修改,除非用reindex重建索引。

为何分片数在索引创建后就不能修改

Reason that you can't change the primary shards are due to the fact, it will change the way data is split between primary shards and changing them will cause consistent hashing to break, which is very popular technique to horizontally scale and splitting the data technique.Replicas shards are just copy so you can increase and decrease as it doesn't make any impact on consistent hashing.If you want to change the primary shards, you have to create a new index and use alias API and Reindex API for efficiently doing it

replica与数据节点数的关系

ES有个选项,叫auto_expand_replicas,会自动根据data node数扩展replica,默认是关闭的。根据这个选项我们可以猜测,replica与data node数之间应该是有关系的,不能说数据节点在扩充,而replica始终不变,理论上replica也要随之递增。

那么,两者间有没有一个推荐的关系公式呢?

google了一下,有如下结论:

Another factor to consider with replicas is the number of nodes available. Replicas are always placed on different nodes from the primary shard, since two copies of the same data on the same node would add no protection if the node were to fail. As a result, for a system to support n replicas, there need to be at least n + 1 nodes in the cluster. For instance, if there are two nodes in a system and an index is configured with six replicas, only one replica will be allocated. On the other hand, a system with seven nodes is perfectly capable of handling one primary shard and six replicas.

考虑replica=1的情况,这时如果只down一个节点A,A上的主shard必定在其他完好的节点上有备shard(主备shard不能在同一个节点),所以即使A down掉了,也不会导致主shard受损,因为其他节点上的备shard会接替成为新的主shard。

这是我们上面做的第一个实验的情况。

如果down了两个节点,情况就不同了,很可能这俩节点上的主shard在其他完好节点上就没有备shard,于是就有可能主shard受损。这是我们上面第二个实验的情况,我们会看到,最后有1.7%的主分片受损。但,如果此时我们将replic调高到2,则这俩故障节点上的主shard在其他完好节点上必定会有备shard,这样即使2个节点都down掉,也不会有主分片受损。

以此类推,down了三个节点时,如果replica=3,则必定在其他完好节点上有备shard,数据不会受损。

因此,若想数据完全不受损,必须满足:

replica数=可能down掉的最大数据节点数

但replica不是没有代价的,它就像数据库的索引,会额外占用内存、磁盘空间,在提高查询效率的同时,也会降低增删doc的效率。

所以,这里头是有一个折中的。

相关文章:

ES使用心得

客户端 Transport Client已经快要废弃了,官方推荐使用High Level REST Client。 常用命令 启停 systemctl start elasticsearch systemctl stop elasticsearch节点状态 curl http://myservice1:9200/_cat/nodes?vip heap.percent ram.percent cpu l…...

Stable Diffusion - 幻想 (Fantasy) 风格与糖果世界 (Candy Land) 人物提示词配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132212193 图像由 DreamShaper8 模型生成,融合糖果世界。 幻想 (Fantasy) 风格图像是一种以想象力为主导的艺术形式,创造了…...

部署K8S集群

目录 一、环境搭建 1、准备环境 2、安装master节点 3、安装k8s-master上的node 4、安装配置k8s-node1节点 5、安装k8s-node2节点 6、为所有node节点配置flannel网络 7、配置docker开启加载防火墙规则允许转发数据 二、k8s常用资源管理 1、创建一个pod 2、pod管理 一、…...

在时间和频率域中准确地测量太阳黑子活动及使用信号处理工具箱(TM)生成广泛的波形,如正弦波、方波等研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

一百五十四、Kettle——Linux上安装Kettle9.3(踩坑,亲测有效,附截图)

一、目的 由于kettle8.2在Linux上安装后,共享资源库创建遇到一系列问题,所以就换成kettle9.3 二、kettle版本以及安装包网盘链接 kettle9.3.0安装包网盘链接 链接:https://pan.baidu.com/s/1MS8QBhv9ukpqlVQKEMMHQA?pwddqm0 提取码&…...

PackageNotFoundError: No package metadata was found for bitsandbytes解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

uni-app和springboot完成前端后端对称加密解密流程

概述 使用对称加密的方式实现。前端基于crypto-js。uni-app框架中是在uni.request的基础上,在拦截器中处理的。springboot在Filter中完成解密工作。 uni-app 项目中引入crypto-js。 npm install crypto-js加密方法 const SECRET_KEY CryptoJS.enc.Utf8.parse(…...

【Unity造轮子】制作一个简单的2d抓勾效果(类似蜘蛛侠的技能)

前言 欢迎阅读本文,本文将向您介绍如何使用Unity游戏引擎来实现一个简单而有趣的2D抓勾效果,类似于蜘蛛侠的独特能力。抓勾效果是许多动作游戏和平台游戏中的常见元素,给玩家带来了无限的想象和挑战。 不需要担心,即使您是一…...

Unity 人物连招(三段连击)

一: 连招思路 首先人物角色上有三个攻击实例对象 Damage,每一个damage定义了攻击的伤害值,攻击距离,触发器名称,伤害的发起者,攻击持续时间,攻击重置时间,伤害的碰撞框大小等字段: …...

关于WSL以及docker连接adb的坑

结论 WSL可以连接到adb,需要和主机保持一致的adb型号。主机是windows还是macOS的docker没法直接连接到adb设备,只有主机为Linux才可以。其他平台只能通过TCP网络协议。 具体过程 关于WSL连接adb设备 windows安装adb工具(安装可以去官网下…...

python安装第三方包时报错:...\lib\site-packages\pip\_vendor\urllib3\response.py...

安装redis第三方包: pip install redis报错现象: 解决方法:使用以下命令可成功安装 pip install redis -i http://pypi.douban.com/simple --trusted-host pypi.douban.com...

腾讯云从业者认证考试考点——云存储产品

文章目录 存储产品功能云存储产品概述存储产品存储网关存储服务 存储分类按存储方式分按存储频率分 云存储与传统存储的区别功能需求性能需求容量扩展数据共享 云硬盘CBS产品概述归档存储和文件存储归档存储CAS文件存储CFS 对象存储存储网关存储网关的分类 云数据迁移CDM日志服…...

猿辅导Motiff与IXDC达成战略合作,将在UI设计领域推动AI革新更多可能性

近日,“IXDC 2023国际体验设计大会”在北京国家会议中心拉开序幕,3000设计师、1000企业、200全球商业领袖,共襄为期5天的用户体验创新盛会。据了解,此次大会是以“设计领导力”为主题,分享全球设计、科技、商业的前沿趋…...

条件操作符(三目操作符)

比如之前我们想写一个条件判断表达式是这样写的: 用操作符就可以这样写: 应用,比如求两个数的最大值...

(五)Unity开发Vision Pro——FAQ

常见问题 (FAQ) 1.问:我看到在visionOS 模拟器中运行的结果与在硬件上运行的结果不同 请注意,在模拟器中运行时,某些特定于硬件的功能不可用 - 最明显的是 AR 数据。这可能意味着 VisionOS 模拟器中的模拟结果可能与 Vision Pro 耳机上的模…...

GitOps 与 DevOps:了解关键差异,为企业做出最佳选择

在软件开发领域,GitOps 和 DevOps 是加强协作和实现软件交付流程自动化的重要技术。虽然这两种模式都旨在提高软件开发生命周期的效率,但它们的核心原则和实施方式却各不相同。 本篇文章将帮助您了解 GitOps 和 DevOps 之间的差异、它们的工作流程&am…...

Java实现Word文档转PDF,PDF转Word,PDF转Excel,PDF转换工具

前言 java实现word文档转PDF&#xff0c;PDF转word 解决只能转换4页问题 解决每页头部存在水印问题 实现 引入依赖 <dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactId><version>1.0.3</ve…...

Docker部署ES服务,全量同步的时候内存爆炸,ES自动关闭,CPU100%

问题 使用canal-adapter全量同步&#xff08;参考Canal Adapter1.1.5版本API操作服务&#xff0c;手动同步数据&#xff08;4&#xff09;&#xff09;的时候 小批量数据可以正常运行&#xff08;几千条&#xff09;只要数据量一大&#xff08;上万条&#xff09;&#xff0c…...

Python——添加照片边框

原图&#xff1a; 添加边框后&#xff1a; 添加边框会读取照片的exif信息如时间、相机型号、品牌以及快门焦段等信息&#xff0c;将他们显示在下面的边框中。 获取当前py文件路径 import os #get path that py file located def Get_Currentpath():file_path os.path.abspa…...

《高性能MySQL》——查询性能优化(笔记)

文章目录 六、查询性能优化6.1 查询为什么会慢6.2 慢查询基础&#xff1a;优化数据访问6.2.1 是否向数据库请求了不需要的数据查询不需要的记录多表关联时返回全部列总是取出全部列重复查询相同的数据 6.2.2 MySQL 是否在扫描额外的记录响应时间扫描的行数与返回的行数扫描的行…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...