大数据-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.rhkb.cn/news/460119.html

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

相关文章

短信登录的实现-redis和session的比较

目录 短信登录功能的实现一:基于session进行短信登录1:发送验证码2:登录3:登录验证拦截器4:隐藏用户敏感信息二:session的集群共享问题三:基于redis实现短信登录登录的刷新问题 短信登录功能的实…

中欧科学家论坛暨第六届人工智能与先进制造国际会议(AIAM 2024)在德国法兰克福成功举办,两百余名中外科学家共襄盛举

2024年10月20至21日,首届中欧科学家论坛在德国法兰克福的SAALBAU Titus Forum国际会议中心成功举行。中国驻法兰克福总领事馆伍鹏飞副总领事、德国兰斯巴赫-鲍姆巴赫市市长Michael Merz亲自出席并致辞。2004年诺贝尔化学奖得主Aaron Ciechanover教授和法国国家科学院…

直接删除Github上的文件

直接删除Github上的文件 说明:此操作只删除Github上的文件,本地仓库文件不受影响 1.确定要删除哪个分支文件,以删除main为例, 1.找到本地仓库位置以StudyNote为例,右键 bash here 2.打开命令窗口,将Github的StudyN…

SpringBoot篇(运维实用篇 - 日志)

目录 一、简介 二、代码中使用日志工具记录日志 1. 操作步骤 步骤1:添加日志记录操作 步骤2:设置日志输出级别 步骤3:设置日志组 2. 知识小结 三、优化日志对象创建代码 1. 实例 2. 总结 四、日志输出格式控制 1. 实例 2. 总结 …

Java多线程编程基础

目录 编写第一个多线程程序 1. 方式一 : 继承Thread类, 重写run方法 2. 方式二: 实现Runnable接口, 重写run方法 3. 方式三: 使用Lambda表达式 [匿名内部类] [Lambda表达式] 在上个文章中, 我们了解了进程和线程的相关概念. 那么, 在Java中, 我们如何进行多线程编程呢? …

postman的脚本设置接口关联

pm常用的对象 变量基础知识 postman获取响应结果的脚本的编写 下面是购物场景存在接口信息的关联 登录进入---搜索商品---进入商品详情---加入购物车 资源在附件中,可以私聊单独发送 postman的SHA256加密 var CryptoJS require(crypto-js);// 需要加密的字符串 …

ip地址分为几大类-IP和子网掩码对照表

一、IP地址的基本概念与分类 IP地址是用于在网络中标识每个设备的逻辑地址。互联网协议将IP地址分为A、B、C、D和E五类,其中A、B、C三类最常用,它们主要根据地址的首位位数以及用途进行划分。 A类地址: 范围:0.0.0.0 - 127.255.2…

docker占用磁盘过多问题

我在windows系统上用docker,安装在C盘环境下,我发现C盘占用了大量的空间,查找后发现是docker的映像文件占用的,于是开始清理,中间还踩个坑,记录一下,下次需要的时候方便找。 踩坑 我本想移动映…

Xss_less靶场攻略(1-18)

xss-lab-less1 ur特殊字符转义 存在url中 转义符为 %2B& 转义符为 %26空格 转义符为 或 %20/ 转义符为 %2F? 转义符为 %3F% 转义符为 %25#转义符为 %23 转义符为 %3Dimg 标签懒加载 在XSS攻击中,img标签的src属性是一个常见的攻击向量,因为它可以…

聊聊Web3D 发展趋势

随着 Web 技术的不断演进,Web3D 正逐渐成为各行业数字化的重要方向。Web3D 是指在网页中展示 3D 内容的技术集合。近年来,由于 WebGL、WebGPU 等技术的发展,3D 内容已经能够直接在浏览器中渲染,为用户提供更加沉浸、互动的体验。以…

【传知代码】图像处理解决种子计数方法

文章目录 一、背景及意义介绍研究背景农业考种需求传统计数方法的局限性人工计数仪器设备计数 研究意义提高育种效率提高计数准确性广泛的适用性数据存档与分析便利 二、概述三、材料与数据准备以及方法介绍整体流程图像采集图像预处理形态学操作腐蚀运算开运算 图像二值化种子…

uniapp开发【点击展示弹窗功能】

一、效果展示 二、代码 <template><view class="mini"><view class="block_item" @click="$refs.popup.op

centos7.X zabbix监控参数以及邮件报警和钉钉报警

1&#xff1a;zabbix安装 1.1 zabbix 环境要求 硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘&#xff08;最低&#xff09; 操作系统: Linux centos7.2 x86_64 Python 2.7.x Mariadb Server ≥ 5.5.56 httpd-2.4.6-93.el7.centos.x86_64 PHP 5.4.161.2 zabbix安装版本 [rootnod…

根据输入的详细地址解析经纬度

摘要&#xff1a; 今天遇到一个需求&#xff1a;就是做客户导入的时候因为导入的客户地址的时候没有经纬度的&#xff0c;但是同步的时候需要经纬度的&#xff0c;所以还是要根据客户提供的详细地址解析出来对应的经纬度&#xff01;回填到对应的经纬度的表单之中进行客户的同步…

upload-labs靶场Pass-21

upload-labs靶场Pass-21 本关上传方法众多&#xff0c;但是应该考察的是数组后缀绕过&#xff0c;所以我的上传围绕此展开 1.分析源码 $is_upload false; // 初始化上传状态为false $msg null; // 初始化消息变量为null// 检查是否有文件上传 if(!empty($_FILES[upload_fi…

Flutter实战短视频课程

1、课程导学 一套代研运行多蜡 体州一致&#xff0c;目胜能优昇 未来大趋势 不改交原生项目的基础上&#xff0c;扩展Flutter能力 Flutter原生灵话切涣 0入侵 最简单、最通用 最新Flutter 3,x新特性讲解 大量flutter官方组件和api学习 最常用的第三方库使用及原理解析 自研组…

Python中的数据可视化:Matplotlib基础与高级技巧

Python中的数据可视化&#xff1a;Matplotlib基础与高级技巧 数据可视化是数据分析和数据科学中不可或缺的一部分。通过图表&#xff0c;我们可以更直观地观察数据的分布和趋势。Matplotlib作为Python最基础、也是最广泛使用的绘图库之一&#xff0c;不仅支持多种常用图表&…

无人机避障——使用三维PCD点云生成的2D栅格地图PGM做路径规划

着重介绍通过对三维 PCD 点云进行处理生成 2D 栅格地图 PGM&#xff0c;而后将该 PGM 地图充分运用到无人系统路径规划之中&#xff0c;使得无人机能够依据此规划合理避开飞行路线上可能出现的障碍物。&#xff08;解决如何使用PGM的问题&#xff09; Hybrid A*算法 参考博客…

线性代数(1)——线性方程组的几何意义

线性代数的基本问题是求解个未知数的个线性方程&#xff1b; 例如&#xff1a;&#xff08;方程1&#xff09;。 在线性代数的第一讲中&#xff0c;我们从Row Picture、Column Picture、Matrix Picture三个角度来看这个问题。 上面的系统是二维的。通过添加第三个变量&#…

浮动+flex布局

一.浮动 1.介绍 2.效果 <style> .one{ width: 100px; height: 100px; background-color: red; float: left; } .two{ width: 200px; height: 200px; background-color: blue; float: right; } </style> </head> <body> <div class"one&quo…