ES性能调优权威指南(篇二)

[Elasticsearch] Elasticsearch权威指南翻译目录 为了方便大家能够更加快速地找到自己需要参考的那部分,对已经翻译完成的部分根据权威指南的目录做了相应目录,希望能够有所帮助。起步(Getting Started)1. 你懂的,为了搜索英文原文链接:You Know, for Search2. 集群中的生活译文链接: [Elasticsearch] 集群的工作原理 - 第一部分 [Elasticsearch] 集群的工作原理 - 第二部分英文原文链 阅读详情
ES性能调优权威指南(篇二)

注:本文是ES性能调优权威指南三篇中的第二篇,第一篇翻译参考这里http://blog.youkuaiyun.com/kimichen123/article/details/77477812。

如果我们使用ES做主要搜索,或者我们组织搜索是面向用户的特征,我们应该监视查询延迟,并在超过阈值的情况下采取行动。


Zen发现


    Zen发现是ES状态改变时使用的算法。它可以坐主节点选举、故障检测、集群状态维护和发布。它是ES集群发现和通信的默认机制。另外Azure,EC2和GCE还有其他的发现机制。

    ES是基于P2P的,如果操作被代理/广播那么节点之间就会直接通信。索引的主API(索引、删除、搜索)不会与主节点通信。主节点的责任是管理全局集群状态,并通过重新分配分片来执行节点加入或离开集群。每当集群状态发生变化时,集群中的其他节点会被通知新的状态。

    cluster.name允许建立隔离的集群。默认的集群名是elasticsearch,建议更改它以反映集群的逻辑组名称。

    在0.x和1.x版本都支持单播和多播,多播是默认设置。这两个版本要使用单播或者禁用多播,我们可以设置 discovery.zen.ping.multicast.enabled 为false。从2.0版本单播是Zen发现的唯一选择。

    数据节点和主节点通过两种不同的方式去侦察对方:

    1、Ping -它是一个节点使用发现机制发现其他节点的过程,主节点通过ping集群中所有的其他节点以验证其是否正在运行。

     2、单播-单播发现需要一个主角列表来使用它作为绯闻路由器。可以设置discovery.zen.ping.unicast.hosts

为数组或者逗号分隔。节点也会ping主节 点以验证它们是否已启动并运行,或者是否需要启动一个选举过程。
    Zen发现配置可以使用Cluster Update Settings API更新:


主节点选举


    discovery.zen.ping_timeout (默认3s)允许调整选举时间来应对缓慢或者拥挤的网络环境(更高的值以降低失败可能)。一旦一个节点加入,它将向主节点发送一个默认为ping(discovery.zen.join_timeout)超时时间20倍的加入请求。如果网络较慢,就把值设大一些。值越大,发现失败的可能就越小。

    如果discovery.zen.master_election.filter_client是true,主节点选举期间客户端的ping会被忽略;这个设置默认是true;如果discovery.zen.master_election.filter_data是true,非主候选节点(node.data为ture,node.master为false的节点)在选举期间会被忽略;默认值为false。

    discovery.zen.minimum_master_nodes 控制一个节点应该“看到”的候选主节点的最小数量。当集群运行炒个两个节点时建


错误检测
   有两个错误检测进程正在运行。第一种是主节点ping集群中的所有其他节点,并验证它们是否存在。另外每个节点都要对ping主节点,以验证其是否仍然存在,或者是否需要启动一个选举过程。

以下以 discovery.zen.fd 为前缀的设置可以改变错误检测过程:

  • ping_interval -  节点ping的频率,默认是1s.

  • ping_timeout - 等待ping的响应时间,默认是 30s.

  • ping_retries - 多少次失败/超时判断为节点失败,默认是3.


通知所有节点集群变更

    主节点是集群中唯一可以对集群状态进行更改的节点。主节点一次处理一个集群状态更新,应用必要的更改,并将更新后的集群状态发布到集群中的所有其他节点。每个节点接收已发布的消息,更新它自己的集群状态,并对主节点进行应答,主节点等待所有节点响应,直到超时,然后继续处理队列中的下一个更新。discovery.zen.publish_timeout默认设置为30 seconds,可以通过集群更新设置api动态更改。


无存活主节点

discovery.zen.no_master_block设置控制在无存活主节点时应该拒绝哪些操作。discovery.zen.no_master_block设置有两个有效选项:

  1. all - 该节点的所有操作—包括读写—都会被拒绝。

  2. write - 写操作会拒绝 (默认)。基于最后一个已知的集群配置的读取操作可以执行。

基础的  ES   discovery.zen  配置如下:
discovery.zen.fd.ping_timeout: 10sdiscovery.zen.minimum_master_nodes: 2
Discovery.zen.ping.unicast.hosts: ["master_node_01″,"master_node_02″,"master_node_03″]

discovery.zen.fd.ping_timeout表明节点超时时间是10秒。单播主机是 "master_node_01 ","master_node_02", "master_node_03"。此外,完成一个选举至少需要两个主节点加入,并让当选的节点作为主控节点。我们有3个主节点。


允许Doc Values 或者列存储压缩


    对字段排序时,ES需要访问每一个匹配查询的文档的值。倒排索引在搜索时表现得很好,但它不是对字段值进行排序的理想结构:
    当搜索时,我们需要能够将词匹配到文档列表,但是在排序和聚合时或者脚本访问字段时,我们需要匹配文档的词。换言之,我们需要 ”uninvert“倒排索引。这个“uninverted” 结构往往称为”column-store“,并将单个字段的所有值存储在一个单独的数据列中,这样就可以非常高效地进行排序之类的操作。

    Doc values是磁盘数据结构,在索引文档时就创建使得数据访问模式成为可能。他们存储类似_source的值,但是一种更易于排序和聚合的面向列的方式。

参考 - Kubernetes Series: Understanding Why Container Architecture is Important to the Future of Your Business

    Doc values支持除analyzed  string的所有字段类型。Doc values在索引生成,同时创建了倒排索引。这意味着Doc values是在每个段上生成的并且不可变的,就像用于搜索的倒排索引一样。而且与倒排索引一样,doc values被序列号到磁盘。这对性能和伸缩性来说至关重要。

    在磁盘上序列话持久数据,我们可以依靠操作系统的文件系统缓存管理内存,而不是在JVM堆上保留结构。当数据的“工作集”小于可用内存的情况下,操作系统将自然地将doc values保存在内存中。这提供了与堆数据结构相同的性能。

    但是当工作集大于可用内存时,操作系统按需对doc values页换出换入。这显然比纯内存结构更慢,但是它的优点是伸缩性远远超过了服务器的内存容量。如果这些数据结构完全在堆中,那么唯一的选择便是OutOfMemory (或者像操作系统一样实现页)。

    支持doc values的字段默认是开启的。我们我们确认不需要排序或聚合或者通过script访问字段,为了节约磁盘空间可以禁用doc values。

    设置doc_values: false以禁用doc values。例如我创建了一个新索引,其中"user_id"字段禁止doc values。设置doc_values: false使得该字段不能用于聚合、排序或者scripits。

curl -XPUT localhost:9200/my_index -d '{
  "mappings": {
    "my_type": {
      "properties": {
        "user_id": {
          "type": "string",
          "index": "not_analyzed",
          "doc_values": false 
        }
      }
    }
  }
}'


也可以通过配置反向配置:通过doc values为字段提供聚合,但是禁用倒排索引使其无法搜索。例如以下是启用聚合但是索引是禁用的,使得字段无法被查询或者搜索。

curl -XPUT localhost:9200/my_index -d'{
  "mappings": {
    "my_type": {
      "properties": {
        "user_id": {
          "type": "string",
          "index": "not_analyzed",
          "doc_values": true, 
          "index": "no" 
        }
      }
    }
  }
}'

ES在以下情形下应使用doc values:

  • 字段排序;

  • 字段聚合;

  • 特定过滤器 (例如 geolocation filters);

  • fields使用了Scripts。


禁止、小心DELETE_all

    删除索引API允许删除存在的索引。

curl -XDELETE 'localhost:9200/index_one/'

    上例删除了索引名为index_one的索引。指定索引、别名或者通配符是必须的。删除API适用于通过逗号分隔列表的多个索引,或者使用_all or *删除所有索引(慎用)。

参考: Why Is the Supergiant Packing Algorithm Unique? How Does It Save Me Money?

    为了禁止使用通配符或者_all删除索引,可以设置action.destructive_requires_name为true。这个设置也可通过集群更新设置API改变。更新的设置可以是永久的(适用于重启)也可以是临时的(重启时无效)。以下是实例:

    永久更新:

curl -XPUT localhost:9200/_cluster/settings -d '{
    "persistent" : {
        "action.destructive_requires_name" : true
    }
}'

    临时更新:

curl -XPUT localhost:9200/_cluster/settings -d '{
    "transient" : {
        "action.destructive_requires_name" : true
    }
}'

    集群会返回更新后的配置,上一个请求的返回结果是:

{
    "persistent" : {},
    "transient" : {
        "action.destructive_requires_name" : "true"
    }
}'

    集群设置返回:

curl -XGET localhost:9200/_cluster/settings

Transient cluster settings take precedence over persistent cluster settings, which take precedence over settings configured in the elasticsearch.yml config file. For this reason it is preferable to use the elasticsearch.yml file only for local configurations, and set all cluster-wider settings with the settings API.

    临时集群设置优于永久集群设置,这些设置优于在elasticsearch.yml中的设置配置。由于该原因 elasticsearch.yml 适合本地配置,而使用settings API设置集群的设置。

    


禁用或最小化刷新映射请求到主节点

    如果在字段映射中频繁更改或将新字段添加到索引中,那么ES集群可能会被大量的refresh_mappings 请求所淹没。这并不是很重要,但是它可以影响集群的性能。这个问题在2.0版本之前更常见。
    配置参数可以这样使用(/etc/elasticsearch.yml):

  indices.cluster.send_refresh_mapping: false

    这是什么?它是如果工作的?

    当一个节点在处理索引请求时检测到一个新字段时它将更新自己的映射,并将映射发送到主节点。当主节点发送下一个集群状态时,新的映射可能仍然存在于主的等待任务队列中。在这种情况下,数据节点将接收到映射的“旧”版本。
    尽管这是一个冲突,但并不是很差:集群最终会有一个正确的mapping。 就数据节点而言,主节点拥有较早版本的映射,因此向主节点发送一个刷新映射请求。
    如果一个系统更新映射十分频繁,这会产生惊人的部落效应,因此禁用这个功能是有意义的。indices.cluster.send_refresh_mapping 允许我们禁止这种敏感行为,从而消除数据节点到主节点的刷新映射请求。即使没有配置 send_refresh_mapping ,主节点最终也会看到原始的映射变更并发送一个更新后的集群状态。
    注意,当发生相反情况时,发送刷新映射十分重要。由于某种原因,主节点和存在索引的实际节点相比处于领先或者冲突,在这种情况下,刷新映射将在主节点上记录警告。

4 深入理解搜索引擎索引与性能调优 作者:禅与计算机程序设计艺术 1.简介 在互联网中,信息检索一直是一个重要的课题,其中搜索引擎就是最常用的。搜索引擎的作用不仅是从海量数据中快速获取自己需要的信息,更是一种社会化交流工具,通过用户自然语言的输入,搜索引擎能够自动匹配到最相关的内容并呈现给用户。而其索引机制也至关重要,好的索引可以帮助搜索 阅读详情

相关推荐

Elasticsearch权威指南

作者:禅与计算机程序设计艺术 1.简介 Elasticsearch是一个基于Lucene构建的开源搜索引擎,它提供了一个分布式、高扩展性、可靠、快速、精准的全文检索解决方案。它的主要特点包括: 分布式架构:集群中每一个节点都存储数据并且可以同时被索引和搜索;

AI天才研究院 1584

ElasticSearch性能调优

ElasticSearch性能调优 大家好,我是皮蛋二哥。“ELK”是ElasticSearch、Logstash、Kibana三门技术的简称。如今ELK技术栈在互联网行业数据开发领域使用率越来越高,做过数据收集、数据开发、数据存储的同学相信对这个简称并不陌生,而ElasticSearch(以下简称ES)则在ELK栈中占着举足轻重的地位。前一段时间,我亲身参与了一个ES集群的调优,今天把我所...

Jacy_Wang的博客 913

Win10蓝屏代码critical process died的解决方法

critical process died”蓝屏错误是Win10操作系统中较为常见的问题之一。当遇到这一问题时,可以尝试通过修复当前系统、检查硬盘槽位或重新安装系统等方法来解决。本文详细介绍了这三种方法的操作步骤和注意事项,希望能帮助大家摆脱这一困扰。同时,也建议大家在日常使用中注意系统的维护和更新,以减少类似问题的发生。

mmoo_python的博客 9533

ES集群的发现机制

介绍 ES是一种p2p(peer to peer)的分布式架构设计,集群中的每个节点都可以与其他任意节点进行通讯。这是不同于hadoop的master-slave的分布式系统。 ES中也存在master角色,但是其功能主要是维护集群的元信息(cluster status),当任意node上的信息修改时,将变更信息同步到其他剩余node上。即,每个node都具有一套完整的cluster status...

zhinengyunwei的博客 4501

lidar360 V8.0 & lidar360MLS V8.0雷达点云数据处理软件

机载林业 — 基于机载激光雷达点云数据提取一系列森林结构参数(如:高度分位数、叶面积指数、郁闭度等),分割单木并提取单木参数(包括树的位置、树高、胸径、枝下高、冠幅等属性),利用软件的多种回归分析功能可以结合地面调查数据反演森林生物量、蓄积量等功能参数。还可以生成等高线、山体阴影、坡度、坡向、粗糙度等多种产品。分类 — LiDAR360提供多种分类功能,包括地面点分类、模型关键点分类、选择区域地面点分类、机器学习模型分类(可高效地分离建筑、植被、路灯等通用类别)、深度学习模型分类、自定义深度学习分类等。

2403_83796253的博客 5150

ResNet理论基础与具体实现(详细教程)

论文地址:Deep Residual Learning for Image Recognition ​ Identity Mappings in Deep Residual Networks pytroch源码地址:resnet 0x00 前言 ResNet是2015年就提出的网络结构,中文名字叫作深度残差网络,主要作用是图像分类。现在在图像分割、目标检测等领域都有很...

coordinate的博客 8329

《Elasticsearch 源码解析与优化实战》第5章:选主流程

简介 Discovery模块负责发现集群中的节点,以及选择主节点。ES支持多种不同Discovery类型选择,内置的实现称为Zen Discovery,其他的包括公有云平台亚马逊的EC2、谷歌的GCE等。 本章讨论内置的Zen Discovery实现。Zen Discovery封装了节点发现(Ping)、选主等实现过程,现在我们先讨论选主流程,在后面的章节中整体性介绍Discovery模块。 设计思想 所有分布式系统都需要以某种方式处理一致性问题。一般情况下,可以将策略分为两组:试图避免不一致及定义发生不一

chbxw 1438

具身智能的边缘计算核心构成方案

摘要: 具身智能(Embodied Intelligence)依赖物理实体与环境交互,而边缘计算(Edge Computing)通过本地化数据处理降低延迟、提升实时性。两者结合的核心方案包含五层架构:传感器层采集环境数据,边缘处理单元执行本地计算,通信模块实现低延迟传输,决策引擎运行轻量AI模型,执行器接口转化动作为物理操作。该方案以“边缘优先”为原则,满足毫秒级响应(如延迟<50ms),同时优化能效(功耗降低30%)和隐私保护。适用于机器人、自动驾驶等场景,通过分层闭环设计确保在资源受限环境中的可靠

老郑的博客 810

(六)elasticsearch 集群 网络超时解决方案 --- Elasticsearch 集群搭建

上一篇: (五)elasticsearch 集群扩展 --- Elasticsearch 集群搭建 因为网络原因,可能会有节点被踢出集群,如果网络恢复,节点会再次加入集群,但是这中间的过程是比较耗费性能的,elasticsearch 集群会处于 yellow 状态,我们可以修改配置来处理这种情况。 默认配置为:节点每隔1s同master发送1次心跳,超时时间为30s,测试次数为3次,超过3...

qq_41497111的博客 2826

Zephyr RTOS 嵌入式 C 编程 (使用嵌入式 RTOS POSIX API)8. Zephyr RTOS 与以太网、Wi-Fi 及 TCP/IP

支持的 BSD 函数包括:socket()、close()、recv()、recvfrom()、send()、sendto()、connect()、bind()、listen()、accept()、fcntl()(用于设置非阻塞模式)、getsockopt()、setsockopt()、poll()、select()、getaddrinfo()和 getnameinfo()。向开发板烧录代码也可能存在问题。可以通过调用 net_if_up() 开启网络接口 ,调用 net_if_down() 关闭接口。

1342

Unity UI适配核心:Canvas Scaler模式解析与2023版避坑指南

UI适配是游戏与应用开发中的基础挑战,其核心在于确保界面元素在不同屏幕分辨率与设备上保持视觉一致与功能可用。原理上,系统通过坐标转换与缩放计算,将设计稿的布局映射到物理屏幕。技术价值在于提升用户体验的一致性与产品的跨平台兼容性。应用场景广泛覆盖手游、PC端应用及各类交互界面。本文聚焦Unity引擎中的Canvas Scaler组件,深入剖析其Scale With Screen Size等模式的工作原理,并结合锚点设置、安全区域处理等高频搜索热词,提供解决UI错位、拉伸及异形屏适配等常见问题的工程实践方案,帮

weixin_30920597的博客 622

elasticsearch集群内部节点超时解决

默认配置为:节点每隔1s同master发送1次心跳,超时时间为30s,测试次数为3次,超过3次,则认为该节点同master已经脱离了。以上为elasticsearch的默认配置。在实际生产环境中,每隔1s,太频繁了,会产生太多网络流量。我们可以在elasticsearch.yml如下修改。 Java代码 discovery.zen.fd.ping_timeou...

weixin_30432007的博客 782

51单片机通过计时器实现倒计时

51单片机通过计时器操作两位8段阳极数码管,实现倒计时

一份耕耘,一分收获 3万+

Elasticsearch - Elasticsearch 的 JVM 调优 内存分配最佳实践

Elasticsearch JVM调优最佳实践摘要(150字) Elasticsearch性能高度依赖JVM内存配置,必须遵循两大黄金法则:1)堆内存不超过物理内存50%,留足空间给操作系统缓存;2)最大堆不超过32GB以启用JVM指针压缩。推荐-Xms和-Xmx设为相同值(如31GB),使用G1GC垃圾回收器并配置200ms的目标停顿时间。同时需关注堆外内存管理,限制Netty的Direct Memory使用。监控GC日志和jstat输出可有效诊断内存问题,确保集群稳定运行。正确的JVM调优能显著提升ES

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

华为OD机试 - 跳房子I(Java 双机位A卷 100分)

可行的两步组合有 [1, 2] (索引和 0+3=3)、[1, 2] (索引和 0+4=4)、[4, 2] (索引和 1+3=4)、[4, 2] (索引和 1+4=5)、[5, 2] (索引和 2+3=5)、[5, 2] (索引和 2+4=6)。此样例有多种组合满足两回合跳到最后,譬如[-1,9], [2,6],其中[-1,9]的索引和为0+3=3, [2,6]的索引和为1+4=5, 所以索引和最小的步数组合为[-1,9].[3, 2] 和 [1, 4] 都满足和等于 5,且索引和均为 3。

学Java,找哪吒 4508

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ES性能调优权威指南(篇一)

搜索和分析是当今应用软件的基本特征。可伸缩性和近实时处理大数据的能力是移动app、web和数据分析应用的基本要求之一。 自动补全文本字段、搜索建议、位置和地理空间搜索和多维导航是满足业务需求的可用标准。 调优是基本的、必要的和至关重要的!任何系统调优都必须基于性能测试;这就是为什么对于任何使用ES的人来说,对监控和指标变化的影响有清楚的了解是至关重要的。 这三章系列教程介绍了性能调优的一些技巧和方法,逐步解释了与之最相关的系统配置的设置和指标。

kimichen123的专栏 4385

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Elasticsearch搜索调优权威指南 (2/3)

本文首发于 vivo互联网技术 微信公众号https://mp.weixin.qq.com/s/AAkVdzmkgdBisuQZldsnvg 英文原文:https://qbox.io/blog/elasticsearch-search-tuning-part-2 作者:Adam Vanderbush 译者:杨振涛 目录 预索引数据 映射 避免使用脚本 强制合并只读索引 Elasti...

vivo互联网技术 265

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

elasticsearch的父子_Elasticsearch搜索调优权威指南 (1/3)

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/qwkZKLb_ghmlwrqMkqlb7Q英文原文:https://qbox.io/blog/elasticsearch-search-tuning-5-0-ultimate-guide作者:Adam Vanderbush译者:杨振涛目录文档建模全局序列号和延迟多代关系为文件系统缓存分配内存Elas...

weixin_39793319的博客 254

Elasticsearch搜索调优权威指南 (1/3)

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/qwkZKLb_ghmlwrqMkqlb7Q 英文原文: https://qbox.io/blog...

cuihuang6976的博客 130

HsMod炉石传说Mod插件完全指南:BepInEx部署、变速、皮肤替换与战棋增强实战

HsMod是一款基于BepInEx 5的炉石传说功能插件,AGPL-3.0协议开源,提供变速齿轮、皮肤与卡背替换、酒馆战棋MMR显示、快捷键自动化、奖励自动领取与本地Web配置等50余项能力,支持Windows、macOS与Linux三个平台。它不收集任何用户信息,作者定位为学习与研究用途。 ## 🧭 HsMod项目定位:一个插件管住整局炉石 HsMod的技术底座是BepInEx 5(6.x

gitblog_01089的博客 950

es搜索引擎架构_[分享]ElasticSearch架构解析与最佳实践

http://weixin.qq.com/r/J0ystEvE0hatrQ-X9xk1 (二维码自动识别)推荐阅读文章: elastic.guide. 分片内部原理 Quintessence Anx. Elasticsearch Performance Tuning 进击的辣条. Elasticsearch由浅入深(二)ES基础分布式架构、横向扩容、容错机制 铭毅天下. Elasticsearch...

weixin_39637711的博客 183

ES性能调优权威指南(篇三)

ES提供了分片和复制的推荐方法用于扩展和增加索引的可用性。分配稍多一点的分片是好的,但是大量的分片是不好的。很难定义什么是太多的分片,因为这取决于它们的大小以及它们是如何被使用的。不常使用的100个分片可能很好,而两个使用非常频繁的分片可能太多了。监视你的节点以确保它们有足够的空闲能力来处理异常情况。

kimichen123的专栏 1351

Elasticsearch权威指南:生产环境硬件选型建议

你是否曾经遇到过Elasticsearch集群性能瓶颈,却不知道问题出在哪里?或者花费了大量资金购买高端硬件,却发现性能提升并不明显?选择合适的硬件配置对于Elasticsearch集群的稳定性和性能至关重要。本文将基于Elasticsearch权威指南的实践经验,为你提供全面的生产环境硬件选型建议。 通过本文,你将获得: - 内存配置的最佳实践和关键限制 - CPU核心与频率的权衡策略 - 存...

gitblog_00480的博客 772
上一篇: ES性能调优权威指南(篇一)
下一篇: ES性能调优权威指南(篇三)
程序猿KIMI
博客等级 码龄16年 109粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值