大数据-191 Elasticsearch - ES 集群模式 配置启动 规划调优

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(正在更新…)

章节内容

上节我们完成了如下的内容:

  • ELK 日志分析实战
  • 配置启动 Filebeat
  • 配置启动 Logstash

在这里插入图片描述

Elasticsearch 集群模式的基本概念

Elasticsearch 是一个分布式搜索引擎,集群模式是指由多个节点(node)组成的一个集群(cluster),它们协同工作以提供更高的性能、扩展性和容错性。每个集群都有唯一的名称,所有属于同一集群的节点使用相同的集群名称相互识别。

在集群中,节点的类型主要分为三类:

  • 主节点(Master Node):负责管理集群元数据(如创建或删除索引,跟踪集群中节点的加入或退出等),但不参与具体数据的搜索和存储。
  • 数据节点(Data Node):负责存储实际的数据,处理与索引和搜索相关的请求。数据节点存储数据的副本,提供高可用性。
  • 协调节点(Coordinating Node):不存储数据,不作为主节点,只负责接收用户的请求并将请求路由到相应的节点。一般情况下,所有节点都可以作为协调节点。

集群规划

在部署 Elasticsearch 集群时,规划是关键步骤,影响性能、可扩展性和可维护性。主要考虑以下几个方面:

  • 主节点规划:建议至少配置三个主节点以保证主节点的高可用性。在一个节点故障时,仍然有足够的节点选举新的主节点。主节点不需要处理数据存储,可以使用较小的资源。
  • 数据节点规划:数据节点负责存储和搜索数据,通常需要更大的内存和存储空间。规划时应根据业务需求和数据增长量确定节点数量和每个节点的容量。
  • 协调节点:在大规模集群中,配置专门的协调节点可以减少数据节点的负载。

规划考虑

我们在业务上需要考虑的是:

  • 当前的数据量有多大?数据增长情况如何?
  • 你的机器配置如何?CPU?内存?硬盘容量?

推算依据

  • Elasticsearch JVM Heap 最大可以设置32G
  • 30G heap大概能处理的数据量10T
  • 内存很大的话,比如128G的内存,可以考虑一台机器上部署多个Elasticsearch

应用场景

  • 用于构建业务搜索功能模块,且多是垂直领域的搜索。数据量级几千万到数十亿级别,一般2-4台机器的规模
  • 用于大规模的实时OLAP(联机处理分析),经典的如ELK Stack,数据规模可以达到千亿或更多,几十到上百节点的规模

角色分配

节点角色:

  • MasterNode: node.master设置为true,节点可以作为主节点
  • DataNode:node.data设置为true,默认是数据节点
  • CoordinateNode:协调节点,一个节点只作为接收请求、转发请求到其他的节点、汇总各个节点返回数据等功能的节点,就叫协调节点。(如果仅担任协调节点,需要将MasterNode和DataNode设置为false,一个节点可以充当一个角色,也可以充当多个角色)

节点角色如何分配:

  • 小规模集群,不需要严格区分
  • 中大规模集群(十个节点以上),应考虑单独的角色充当。特别并发查询量大,查询的合并量大,可以增加独立的协调节点。角色分开的好处是分工分开,互不影响。如不会因协调角色负载过高而影响数据节点的能力。

设置分片

  • 说明:分片数指定后不可变,除非索引重建。
  • 分片设置的可参考原则:
    Elasticsearch推荐的JVM最大的堆空间是:30-32G,所以把分片的最大容量限制在30G,然后对分片数量做合理估算。
    在开始阶段,一个好的方案是根据节点的数量按照 1.5-3倍的原则来创建分片。例如:如果你有三个节点,则推荐你创建的分片数量不超过9个(3*3)个。
    当性能开始下降时,增加节点,ES会平衡分片的放置。
    对于基于日期的索引需求,并且对索引数据的搜索场景非常少,也许这些索引量会成百上千,但是每个索引的大小缺只有1GB甚至更小。对于这种场景,建议只需要为索引分配1个分片。
    对于日志管理的需求,就是类似于日期索引需求,日期索引会很多,但是每个索引存放的数据量缺很少。

设置副本

分片应该设置几个副本呢?

  • 为了保证高可用,副本数设置为2即可。但是要求集群至少有3个节点,来分开存放主分片、副本。
  • 如果并发量大时,查询性能下降,则增加副本数,提高并发查询的能力。
  • 注意:新增副本时主节点会自动协调,然后拷贝数据到新增的副本节点,副本数是随时都可以调整的。
PUT /wzk_temp_index/_settings
{"number_of_replicas": 1
}

集群调优

Index调优

在业务场景中,很多时候数据都是从MySQL集群,再抽取到ES的Index中。
如果你的场景的数据是不断变化的,那就要求ES中的数据也要有一个快速变化的要求,这样才可以保证MySQL和Elasticsearch中的数据保持一致。

副本数0

如果集群是首次写入数据,那么可以先设置为0,后续写完再根据业务要求设置为2(比如高可用),节约集群生成索引的过程。

PUT /wzk_temp_index/_settings
{"number_of_replicas": 0
}

自动生成ID

自动生成DocID,通过Elasticsearch写入流程可以看出,如果写入Doc时外部指定了id,那么Elasticsearch会先尝试读取原来的Doc的版本号,以判断是否需要更新数据,这个操作涉及到了磁盘,如果是自动生成DocID则可以避免这个问题。

mappings

合理设置mappings:

  • 将不需要建立索引的字段index属性设置为not_analyzed或no。对字段不分词,或者不索引,可以减少很多CPU的计算。尤其是Binary类型,默认情况下CPU会很高,而且这种分词通过没有任何意义。
  • 减少字段的内容长度,如果原始数据的大段内容不用全部建立索引,则可以尽量减少不必要的内容
  • 使用不同的分析器(analyzer),不同的分词器在建立索引的过程中,运算的复杂度也有较大的差异。

source字段

调整 _source 字段,source字段用于存储原数的doc数据,对于部分不需要存储的数据,可以通过index excludes过滤,或者将source禁用,一般用于索引和数据分离,这样可以降低I/O的压力,不过业务场景中大多数都不会禁用Source。

analyzed禁用norms

norms用于在搜索中计算doc的评分,如果不需要评分,则可以将其禁用。

"title": {"type": "string","norms": {"enabled": false}
}

刷新间隔

调整索引的刷新间隔,该参数缺省是1秒,强制ES每秒创建一个新的Segment,从而保证新写入的数据近实时可见,可以被搜索到。比如该参数被调整为30秒,降低了刷新的次数,把刷新操作消耗的资源给释放出来给index操作使用。

PUT /wzk_temp_index/_settings
{"index" : {"refresh_interval": "30s"}
}

这种方式是牺牲可见性的方式,提高了index操作的性能。

批处理

批处理把多个index操作请求合并到一个batch中去处理,和MySQL的JDBC的Batch有类似之处。
如下图所示:
在这里插入图片描述

比如每批10000个Document是一个性能比较好的大小,每批中多少Document条数合适,受到很多因素影响而不同。

Search调优

在存储的Document超过10亿条后,需要进行搜索调优。

数组分组

ES用来存储日志,日志的索引管理方式一般都是基于日期,基于天、周、月、年建立索引,如下图,基于天建立索引:

在这里插入图片描述
当搜索丹单天的数据,只要要查询一个索引的Shards就可以。当需要查询多天的数据时,需要查询多个索引的Shards。这种方案其实和数据库分表、分库、分区查询方案相比思路是类似的,小数据范围检索而不是大海捞针。

Filter

使用Filter替代Query
在搜索的过程中使用Query,需要对Document的相关度进行打分,使用Filter的话,就不会有过滤了,做的事情更少,而且Filter理论上更快一些。
如果搜索不需要打分,可以直接使用Filter查询,如果部分搜索需要打分,建议使用Bool查询,这种方式可以把打分和不打分的放到一起:

GET /_search
{"query": {"bool": {"must": {"term": {"user": "kimchy"}},"filter": {"term": {"tag": "tech"}}}}
}

ID字段

将ID字段定义为Keyword,一般情况,如果ID字段不会被用作Range类型搜索字段,都可以定义成Keyword类型。
这是因为Keyword会被优化,以便进行terms查询,Integers等数字类的mapping类型,会被优化来进行range类型搜索。
将Integers改成Keyword类型之后,搜索性能提升了30%(有案例)。

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

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

相关文章

mysql 5.7实现组内排序(连续xx天数)

需求:查询出连续登录的用户及其连续登录的天数 我先说一下思路:要实现连续登录的判断,可以找一下他们之间的规律。这里我拿一个用户来说,如果这个用户在1、2、3号都有登录记录,可以对这个用户的数据按照时间排序&…

J3学习打卡

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 DensNet模型 import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.keras import layers, models, initializersclass DenseLayer(lay…

基于微信小程序的小区管理系统设计与实现(lw+演示+源码+运行)

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。所以各大互联网厂商都瞄准移动互联网这个潮…

随机变量、取值、样本和统计量之间的关系

1. 随机变量 (Random Variable) 随机变量是用来量化随机现象结果的一种数学工具。随机变量是一个函数,它将实验结果映射到数值。随机变量可以是离散的或连续的。 离散随机变量:取有限或可数无限个值。例如,掷骰子的结果。连续随机变量&…

Matlab实现蚁群算法求解旅行商优化问题(TSP)(理论+例子+程序)

一、蚁群算法 蚁群算法由意大利学者Dorigo M等根据自然界蚂蚁觅食行为提岀。蚂蚁觅食行为表示大量蚂蚁组成的群体构成一个信息正反馈机制,在同一时间内路径越短蚂蚁分泌的信息就越多,蚂蚁选择该路径的概率就更大。 蚁群算法的思想来源于自然界蚂蚁觅食&a…

给哔哩哔哩bilibili电脑版做个手机遥控器

前言 bilibili电脑版可以在电脑屏幕上观看bilibili视频。然而,电脑版的bilibili不能通过手机控制视频翻页和调节音量,这意味着观看视频时需要一直坐在电脑旁边。那么,有没有办法制作一个手机遥控器来控制bilibili电脑版呢? 首先…

JavaEE初阶---网络原理之TCP篇(二)

文章目录 1.断开连接--四次挥手1.1 TCP状态1.2四次挥手的过程1.3time_wait等待1.4三次四次的总结 2.前段时间总结3.滑动窗口---传输效率机制3.1原理分析3.2丢包的处理3.3快速重传 4.流量控制---接收方安全机制4.1流量控制思路4.2剩余空间大小4.3探测包的机制 5.拥塞控制---考虑…

【C语言刷力扣】3216.交换后字典序最小的字符串

题目: 解题思路: 字典序最小的字符串:是指按照字母表顺序排列最前的字符串。即字符串在更靠前的位置出现比原字符串对应字符在字母表更早出现的字符。 枚举数组元素,尽早将较小的同奇偶的相邻字符交换。 char* getSmallestString…

Java:Map和Set练习

目录 查找字母出现的次数 只出现一次的数字 坏键盘打字 查找字母出现的次数 这道题的思路在后面的题目过程中能用到,所以先把这题给写出来 题目要求:给出一个字符串数组,要求输出结果为其中每个字符串及其出现次数。 思路:我…

【宠粉赠书】大模型项目实战:多领域智能应用开发

在当今的人工智能与自然语言处理领域,大型语言模型(LLM)凭借其强大的生成与理解能力,正在广泛应用于多个实际场景中。《大模型项目实战:多领域智能应用开发》为大家提供了全面的应用技巧和案例,帮助开发者深…

【商汤科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

Nginx防盗链配置

1. 什么是盗链? 盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供…

Oracle+11g+笔记(8)-备份与恢复机制

Oracle11g笔记(8)-备份与恢复机制 8、备份与恢复机制 8.1 备份与恢复的方法 数据库的备份是对数据库信息的一种操作系统备份。这些信息可能是数据库的物理结构文件,也可能是某一部分数 据。在数据库正常运行时,就应该考虑到数据库可能出现故障&#…

基于Multisim的篮球比赛电子记分牌设计与仿真

一、设计任务与要求 设计一个符合篮球比赛规则的记分系统。 (1)有得1分、2分和3分的情况,电路要具有加、减分及显示的功能。 (2)有倒计时时钟显示,在“暂停时间到”和“比赛时间到”时,发出声光…

易友BOM管理软件

易友BOM管理软件介绍 易友BOM管理软件是一款功能齐全、操作简便、安全可靠的BOM管理系统。它为企业提供了多方面的BOM管理解决方案,帮助企业提高生产效率、降低成本、增强灵活性并提升竞争力。制造企业,都可以通过易友BOM管理软件来实现BOM管理的优化和…

【模型学习之路】手写+分析bert

手写分析bert 目录 前言 架构 embeddings Bertmodel 预训练任务 MLM NSP Bert 后话 netron可视化 code2flow可视化 fine tuning 前言 Attention is all you need! 读本文前,建议至少看懂【模型学习之路】手写分析Transformer-CSDN博客。 毕竟Bert是tr…

不用求人,4个方法快速恢复小米手机删除短信

手机短信作为我们日常办理事情的重要验收通道,往往承载着许多重要的信息。然而,由于各种原因,我们可能会不小心删除了重要的短信。那么,小米手机用户如何恢复这些被删除的短信呢?接下来,我们将分点为您详细…

爆肝整理14天AI工具宝藏合集(三)

🛠️以下是我为大家整理的AI工具宝藏合集(三): 💡AI搜索 1️⃣ 天工AI搜索 2️⃣ 秘塔AI搜索 3️⃣ 夸克AI搜索 4️⃣ 开搜AI搜索 💡 AI视频 1️⃣ 可灵AI 2️⃣ 即梦AI 3️⃣ Vidu 4️⃣ Stable Video …

vue版本太低无法执行vue ui命令

连接 ui和create目前都只支持3.0以后得版本才能使用 https://blog.csdn.net/m0_67318913/article/details/136775252?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-136775252-blog-121204604.235v43pc_blog_bottom_relevance…

ETL集成工具丨如何运用ETLCloud单步调试断点功能

在现代数据处理领域,ETLCloud 的单步调试断点功能正成为数据管理的重要工具。ETLCloud 是一个强大的云端数据处理平台,它提供了灵活的单步调试功能,使得用户能够逐步跟踪和分析数据处理流程。本文将探讨如何运用 ETLCloud 的单步调试断点功能…