ElasticSearch性能优化篇

目录

一、 架构的设计

1.1   一个节点只承担一个角色的配置

1.2  主节点设计

二、 索引的设计

2.1 冷热数据分离

  1. 在配置文件中标记节点

2. 设置索引分配到热节点上

2.2 节点数的选择

2.3 索引的拆分

2.4 索引分片的设计


一、 架构的设计

1.1   一个节点只承担一个角色的配置

有条件的情况下一个节点只承担一个角色的配置:

  •   低 CPU、RAM 和磁盘的机器做 master 节点
  •   高性能 CPU、中等配置的 RAM 做 ingest 节点
  •   高性能 CPU、RAM、磁盘节点做 data 节点。

1.2  主节点设计

 一个实时的master节点,多个备用master节点。避免脑裂的同时又做到高可用。

二、 索引的设计

2.1 冷热数据分离

   将热点数据存储在磁盘性能较好的机器上,如固态硬盘,而冷数据存储在磁盘性能较差的机器上,具体操作如下:

  1. 在配置文件中标记节点

# 标记节点为热节点
node.tag: hot
# 标记节点为冷节点
node.tag: cold
node.max_local_storage_nodes: 2   #允许每个机器启动两个es进程(可选)

2. 设置索引分配到热节点上

PUT /_template/logstash
{"order": 0,"template": "logstash*","settings": {"index.routing.allocation.include.tag": "hot","index.refresh_interval": "30s","index.number_of_replicas": "1","index.number_of_shards": "1","index.translog.flush_threshold_ops": "30000"}
}

“index.routing.allocation.include.tag”: “hot“: 表示新建索引将分配到 node.tag = hot 的节点下 

3. 设置定时任务,定期将索引迁移到冷节点上

PUT /index_name/_settings
{"index.routing.allocation.include.tag" : "cold"
}

这样旧索引数据会自动迁移到 cold 集群上。

2.2 节点数的选择

  节点数的选择与集群的用途相关,一般从用途上可分为两类:

     搜索:  固定大小的数据集

  • 搜索的数据集增长相对比较缓慢

     日志: 基于时间序列的数据

  • 使用ES存放日志与性能指标。数据每天不断写入,增长速度较快
  • 结合Warm Node 做数据的老化处理

硬件配置:

  • 选择合理的硬件,数据节点尽可能使用SSD
  • 搜索等性能要求高的场景,建议SSD按照1∶10-20的比例配置内存和硬盘
  • 日志类和查询并发低的场景,可以考虑使用机械硬盘存储,按照1:50的比例配置内存和硬盘
  • 单节点数据建议控制在2TB以内,最大不建议超过5TB
  • JVM配置机器内存的一半,JVM内存配置不建议超过32G
  • 不建议在一台服务器上运行多个节点

内存大小要根据Node 需要存储的数据来进行估算

  • 搜索类的比例建议: 1:16
  • 日志类: 1:48——1:96之间

假设总数据量1T,设置一个副本就是2T总数据量

  • 如果搜索类的项目,每个节点31*16 = 496 G,加上预留空间。所以每个节点最多400G数据,至少需要5个数据节点
  • 如果是日志类项目,每个节点31*50= 1550 GB,2个数据节点即可

2.3 索引的拆分

当索引数据量较大时,我们可以结合索引的业务特性进行拆分

  • 如果索引的数据随着时间推移,热度消退,比如日志类的索引,那么,可以考虑按时间命名索引。这样既能减少索引的大小,又能做到冷热数据分离处理。
  • 如果索引的数据属于均匀分布,与时间无关,则应考虑根据查询特性,是否能根据某个常用的查询条件进行拆分。比如各个地域的订单统计,可以考虑根据地域查询索引。
  • 如果某个常用的查询条件的值不固定,则可考虑启用Routing 功能,按照filter 字段的值分布到集群中不同的shard,降低查询时相关的shard数提高CPU利用率
# 将相同字段值的数据路由到同一个分片中,不仅可以减少查询时CPU的计算消耗,还能增加聚合、算分等操作结果的准确性
# es分片路由的规则:
shard_num = hash(_routing) % num_primary_shards
# _routing字段的取值,默认是_id字段,可以自定义。PUT /users
{"settings": {"number_of_shards":2}
}POST /users/_create/1?routing=lmj
{"name":"lmj"
}

 2.4 索引分片的设计

索引的分类

  索引分片可以分为两类:

  •  主分片: 主分片相当于将原有索引的数据拆分成若干个分片,起到水平分担压力的作用,主分片可读可写。
  •  副本分片:副本分片是主分片的数据备份,如果将索引的副本数设置为1,意味着该索引的每个主分片都有1个副本。副本分片只支持读取操作,不支持写入。

 主分片数的影响

    对于单个主分片来讲,一个请求过来,这个请求的压力只会打到某一个节点上,不能最大限度的发挥出集群的性能特性。但单个主分片在做聚合查询、评分时,不存在结果偏差,而多个主分片的索引可能会存在这种问题。如果将索引设置为多个主分片,在索引数据量比较大,单个请求比较耗性能时,这样设置会起到提升性能的作用,但会牺牲聚合查询、评分的结果准确性。而且,CPU的消耗随着主分片的线性递增,同时master节点管理分片的压力线性递增。所以在主分片过多的情况下集群的吞吐量可能反而下降。

副本分片的影响:

    副本分片起到数据备份和分担查询压力的作用,一般至少要有一个副本分片,避免数据丢失。副本数有限的增加会提升集群的查询吞吐量(原理同主分片增加一致),但会牺牲写入的性能,因为数据从主分片同步到副本分片也有性能消耗。

主副分片数设计的原则:

   从使用场景分析:

  • 搜索类应用,单个分片不要超过20 GB
  • 日志类应用,单个分片不要大于50 GB

  从堆内存的角度分析:

  •  在一个节点中的分片数小于20分片/每GB堆内存

  在数据量较大时使用分片不仅能提升性能,在某个节点下线丢失副本时也能更快的恢复。同时主分片时在设计之初就要考虑数据的增长速度,因为主分片数一旦设定后续不可动态调整。对于副本分片,应当保证至少有一个副本分片,避免主分片数据丢失后无法恢复,同时,主副分片总数尽可能的略微大于节点总数,这样不仅能最大限度的发挥集群性能,还能保证在集群新增节点时,有多余的副本可用,不会导致索引在某一个时刻不可用。

      本人近十年JAVA架构设计经验,长期从事IT技术资源整合。有志于自我技术提升、需要最新IT技术课程的小伙伴,可私信联系我 ,粉丝一律白菜价 

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

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

相关文章

C: AES对称加密算法代码

说明:本文提供基于C代码的 AES 加密、解密代码,并附带测试案例。 简介:AES加密是一种对称加密算法,全称为Advanced Encryption Standard,是美国联邦政府采用的一种区块加密标准。这种算法使用相同的秘钥进行加密和解密…

STM32-电动车报警器

STM32-电动车报警器 1.振动传感器点亮LED灯 需求:当振动传感器接收到振动信号时,使用中断方式点亮LED1 //重写中断服务函数,如果检测到EXTI中断请求,则进入此函数 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {//一根中断线上接有多个…

JY-7A/3DK/220静态电压继电器 无源型 板前接线

系列型号 JY-7A/1DK不带辅助电源电压继电器;JY-7B/1DK不带辅助电源电压继电器; JY-7/1DK/120不带辅助电源电压继电器;JY-7/1DK/120不带辅助电源电压继电器; JY-7A/1DKQ不带辅助电源电压继电器;JY-7B/1DKQ不带辅助电源…

优秀广大青年欢迎加入

在深在广 年龄在20-35左右 男生工作稳定,幽默,长相帅气,爱好旅行,健身,读书,做饭,摄像,养宠,人心公益等…… 女生青春美丽,暖心贴心,踏实过日子&a…

网络安全知识和华为防火墙

网络安全 网络空间安全 ---Cyberspace 2003年美国提出的网络空间概念 ---一个由信息基础设施组成的互相依赖的网络。 我国官方文件定义:网络空间为继海、陆、空、天以外的第五大人类互动领域。 通信保密阶段 --- 计算机安全阶段 --- 信息系统安全 --- 网络空间安…

C++面试:MySQL服务器的安装与配置数据表的新建、查询和删除操作

MySQL服务器的安装与配置 安装 下载MySQL服务器:可以从MySQL的官方网站下载适合你操作系统的版本。安装MySQL: 在Windows上,通常是通过一个安装向导进行安装。在Linux上,可以通过包管理器进行安装,例如使用APT&#…

Android 中的动态应用程序图标

Android 中的动态应用程序图标 一、需求二、解决方案三、方案实现四、结论 一、需求 您可能遇到过那些可以实现巧妙技巧的应用程序 - 更改应用程序图标(也许是在您的生日那天),然后无缝切换回常规图标。这种功能会激起你的好奇心&#xff0c…

Shell脚本⑦awk

目录 一.awk概述 1.awk介绍 2.基本格式 3.工作原理 4.常见的内建变量 二.awk基本操作 1.打印文本内容 (1)打印磁盘使用情况 (2)打印字符串 (3)打印字符串确定文件有多少行 2.根据$n以及NR提取字…

实战教程:如何用Spring Boot和MySQL存储共享单车数据

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

【经典项目】Java入门,实现斗地主小游戏

一、需求分析 实现斗地主游戏可以涉及以下几个关键步骤和思路: 游戏规则定义:首先,你需要明确斗地主游戏的规则,包括牌的花色和大小、玩家数量、发牌顺序、出牌规则、胜利条件等。 牌的表示和初始化:定义一套扑克牌的…

第六讲_JavaScript原型

JavaScript原型 1. 原型的概念2. 原型继承2.1 原型链 3. class类的原型对象 1. 原型的概念 原型是 JavaScript 对象相互继承特性的机制。 每个函数都有一个 prototype 属性,这个属性指向一个对象,这个对象称为原型对象。每个对象都有一个 [[Prototype]…

网络原理-TCP/IP(1)

应用层 我们之前编写完了基本的java socket, 要知道,我们之前所写的所有代码都在应用层中,都是为了完成某项业务,如翻译等.关于应用层,后面会有专门的讲解,在此处先讲一下基础知识. 应用层对应着应用程序,是程序员打交道最多的一层,调用系统提供的网络api写出的代码都是应用层…

纯html+js+css个人博客

首页 <!DOCTYPE HTML> <html> <head> <title>博客</title> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <meta name"viewport" content"widthdevice-width, initial-sca…

隐式内连接(inner join)和LEFT JOIN

隐式内连接和inner join 的关系&#xff1a; 1、隐式内连接&#xff1a;在SQL语句中使用"FROM"关键字连接两个或多个表&#xff0c;而连接条件则写在"WHERE"子句中。这种方式只有在连接条件成立的情况下&#xff0c;才会将两个表中的数据行连接起来。 2、…

[macOS]gcc安装

在MacOS操作系统上安装GCC是开发者们经常遇到的问题之一。GCC是GNU编译器集合&#xff0c;它可以编译C&#xff0c;C&#xff0c;Objective-C和其他一些编程语言。然而&#xff0c;在MacOS上安装GCC并非一件简单的事情。本文将探讨如何在MacOS上安装GCC&#xff0c;以及如何解决…

React hooks子组件暴露方法示例

说明 通常情况下&#xff0c;React 子组件使用父组件的方法或值通过props传递&#xff0c;反过来&#xff0c;父组件如果需要子组件的方法就需要子组件将自己的方法暴露出去。以下是一个实例&#xff1a; User.tsx import React, { FC, useEffect, useState, useRef } from …

TOP100 矩阵

1.73. 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 提示&#xff1a; m matrix.lengthn matrix[0].length1 < m, n < 200-2^31 < matrix[i][j] < 2^31 - 1 思路&#xf…

SeaTunnel Web安装 一把成

安装相关jar包&#xff0c;以及SeaTunnel 和Web 打成的包&#xff0c;可以直接使用&#xff0c;但是需要安装MySQL客户端的分享&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1qrt1RAX38SgIpNklbQJ7pA 提取码&#xff1a;0kmf 1. 环境准备 环境名称版本系统环境C…

使用EasyPOI模板导出Execl表格(含有图片)

这是生成的文件效果 一、导入依赖 <!--easypoi--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.2.0</version></dependency><dependency><groupId>cn.aft…

零、环境搭建

之前一直玩python的&#xff0c;由于工作需要C版的opencv&#xff0c;故借此寒假闲暇时间&#xff0c;进行简单了解学习。 主要用到的IDE是Visual Studio和OpenCV 一、Visual Studio下载安装 我这里没找到之前的2017版本&#xff0c;就拿目前最新的2023社区版下载&#xff1a…