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

一些elasticsearch重要概念与配置参数

ES 是在 lucene 的基础上进行研发的,隐藏了 lucene 的复杂性,提供简单易用的 RESTful Api接口。ES 的分片相当于 lucene 的索引。

Node 节点的几种部署实例
实例一: 只用于数据存储和数据查询,降低其资源消耗率

node.master: false
node.data: true

实例二: 来协调各种创建索引请求或者查询请求,但不存储任何索引数据

node.master: true
node.data: false

实例三: 主要用于查询负载均衡, 并请求分发到多个指定的node服务器,并对各个node服务器返回的结果进行一个汇总处理,最终返回给客户端

node.master: false
node.data: false

实例四: 即有成为主节点的资格,又存储数据

node.master: true
node.data: true

在只有3个节点的部署方案中,建议设置3个节点均有成为master节点的资格,且存储索引数据。

数据目录配置与物理磁盘的使用
一般来说,是这样配置:

path:logs: /var/log/elasticsearchdata: /var/data/elasticsearch

数据目录可以支持使用多个:

path:data:- /mnt/elasticsearch_1- /mnt/elasticsearch_2- /mnt/elasticsearch_3

物理磁盘的使用:

虽然es已经提供了数据副本的冗余,但实际生产中还是建议使用raid1,raid5和raid10
集群名称配置

cluster.name: logging-prod

node节点名称
默认为使用主机名,也可以在elasticsearch.yml中指定。在一个主机上同时跑多个es实例时,这个配置项就会很有帮助。

node.name: prod-data-2


网络地址配置
默认将服务绑定到loopback接口,这需要按实际情况调整。

network.host: 0.0.0.0


注:变更服务绑定接口后,会被认为是作为生产环境使用,会触发es的环境检查操作。当有不符要求的系统或集群配置参数时,es服务会无法启动。

节点发现和cluster初始化参数
单播主机列表通过discovery.zen.ping.unicast.hosts来配置。
这个配置在 elasticsearch.yml 文件中:

discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]


具体的值是一个主机数组或逗号分隔的字符串。每个值应采用host:port或host的形式(其中port默认为设置transport.profiles.default.port,如果未设置则返回transport.tcp.port)。请注意,必须将IPv6主机置于括号内。此设置的默认值为127.0.0.1,[:: 1]。

使用单播,你可以为 Elasticsearch 提供一些它应该去尝试连接的节点列表。当一个节点联系到单播列表中的成员时,它就会得到整个集群所有节点的状态,然后它会联系 master 节点,并加入集群。

discovery.seed_hosts:- 192.168.1.10:9300- 192.168.1.11- seeds.mydomain.com
cluster.initial_master_nodes:- master-node-a- master-node-b- master-node-c


提供了seed.hosts参数的三种赋值方式

initial_master_nodes参数只能使用节点的node.name参数值,一般来说是主机名
Zen Discovery 是 ES 默认内建发现机制。它提供单播和多播的发现方式,并且可以扩展为通过插件支持云环境和其他形式的发现。
Elasticsearch 官方推荐我们使用 单播 代替 组播。而且 Elasticsearch 默认被配置为使用 单播 发现,以防止节点无意中加入集群。
设置JVM heap size
通过jvm.options文件设置jvm缓存参数,过大或过小都不好,过大的缓存也会让垃圾回收变慢。

当jvm缓存设置大于26GB时,需要评估zero-based compressed oops限制,参见下面的说明:
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html

由于ES构建基于lucene, 而lucene设计强大之处在于lucene能够很好的利用操作系统内存来缓存索引数据,以提供快速的查询性能。lucene的索引文件segements是存储在单文件中的,并且不可变,对于OS来说,能够很友好地将索引文件保持在cache中,以便快速访问;因此,我们很有必要将一半的物理内存留给lucene ; 另一半的物理内存留给ES(JVM heap )。所以, 在ES内存设置方面,可以遵循以下原则:

当机器内存小于64G时,遵循通用的原则,50%给ES,50%留给lucene。
当机器内存大于64G时,遵循以下原则:
a. 如果主要的使用场景是全文检索, 那么建议给ES Heap分配 4~32G的内存即可;其它内存留给操作系统, 供lucene使用(segments cache), 以提供更快的查询性能。
b. 如果主要的使用场景是聚合或排序, 并且大多数是numerics, dates, geo_points 以及not_analyzed的字符类型, 建议分配给ES Heap分配 4~32G的内存即可,其它内存留给操作系统,供lucene使用(doc values cache),提供快速的基于文档的聚类、排序性能。
c. 如果使用场景是聚合或排序,并且都是基于analyzed 字符数据,这时需要更多的 heap size, 建议机器上运行多ES实例,每个实例保持不超过50%的ES heap设置(但不超过32G,堆内存设置32G以下时,JVM使用对象指标压缩技巧节省空间),50%以上留给lucene。
禁止swap,一旦允许内存与磁盘的交换,会引起致命的性能问题。 通过: 在elasticsearch.yml 中 bootstrap.memory_lock: true, 以保持JVM锁定内存,保证ES的性能。操作系统通过交换(swap)将内存的分页写入磁盘,es在内存中保留了很多运行时必需的数据和缓存,所以消耗磁盘的操作将严重影响正在运行的集群。
关闭es交换最彻底的方法是,在elasticsearch.yml文件中将bootstrap.mlockall设置为true 。
GC设置原则:

  1.  保持GC的现有设置,默认设置为:Concurrent-Mark and Sweep (CMS),别换成G1GC,因为目前G1还有很多BUG。
  2.  保持线程池的现有设置,目前ES的线程池较1.X有了较多优化设置,保持现状即可;默认线程池大小等于CPU核心数。如果一定要改,按公式((CPU核心数* 3)/ 2)+ 1 设置;不能超过CPU核心数的2倍;但是不建议修改默认配置,否则会对CPU造成硬伤。

Temp directory配置
在使用.tar.gz方式部署es服务时,建议指定一个安全的临时文件目录,避免因为默认使用的/tmp下的临时目录被操作系统定期删除,造成服务故障。
通过环境变量 $ES_TMPDIR 来设置。

分片分配的感知
分配感知(allocation awareness)是管理在哪里放置数据的副本。
https://www.elastic.co/guide/en/elasticsearch/reference/7.2/allocation-awareness.html

1. 基于分片的分配
分配感知允许用户使用自定义的参数来配置分片的分配。通过定义一组键,然后在合适的节点上设置这个键,就可以开启分配感知。
elasticsearch.yml

cluster.routing.allocation.awareness.attributes: rack_id


注:支持赋多个值同时用作感知属性,如cluster.routing.allocation.awareness.attributes: rack, group, zone

针对每个es节点,用户可以修改elasticsearch.yml,按期待的网络配置来设置该值。ES允许用户在节点上设置元数据,这些元数据的键将成为我们要使用的分配感知参数。

node.attr.rack_id: rack_one


当有多个es节点可用时,es会尽量把分片与副本均衡到rack_id值不同的节点上去。但如果只剩一个可用的es数据节点了,es也会选择把一个索引的分片和副本全部部署在同一个节点上面。

常见的使用场景是按照地点、机架或是虚拟机等来划分集群的拓扑。

2. 强制性的分配感知
在用户事先规则好分片分组信息,且希望限制每个分组的副本分片数量时,强制分配感知是适用的解决方法。
在这种情况下,即便因为部分分组的数据节点不可用,导致es服务可用性风险,es也不会把索引的分片与副本都部署在相同的分组节点上面。

例如,用户想在区域级别使用强制分配。可以先指定一个zone的属性,然后为该分组添加多个维度。如下所示:

cluster.routing.allocation.awareness.attributes: zone
cluster.routing.allocation.force.zone.values: us-east, us-west


此时,我们在东部地区启用了一批节点,这些节点的配置都是node.attr.zone: us-east ,在创建索引时由于以上限制,副本分片只会被均衡到没有相应zone值的节点上去。

3. 动态设置分片感知
可以通过集群设置API在运行时进行修改,这个修改的效果可以自行选择是持久的,还是临时性的。

curl -XPUT localhost:9200/_cluster/settings -d '{"persistent": {"cluster.routing.allocation.awareness.attributes": zone"cluster.routing.allocation.force.zone.values": us-east, us-west}
}'

分片


分片数量

  • ES7.0版本开始,新建索引时,默认只有一个主分片。优点在于:单个分片,查询算分和聚合不准的问题都可以得到避免;缺点在于:即便增加新的节点,也无法实现水平扩展。
  • 如果有两个主分片,当集群增加节点后,es会自动进行分片移动(Shard Rebalancing),将本分布在一个节点的两个分片平衡为两个节点,每个节点一个分片。
  • 当分片数>节点数时:一旦集群中有新的数据节点加入,分片就可以自动分配;分片在重新分配时,系统也可以正常工作。
  • 多分片的好处:一个索引如果分布在多个节点,查询可以并行,写入可以分散到多个机器。
  • 例1:每天1GB,一个索引,一个主分片,一个副本分片。保留半年,共180*2 = 360G数据 = 360个分片。
  • 例2:五个不同日志,每天一个日志索引,每个日志索引有10个主分片,保留半年,共180*5*10 = 9000个分片。
  • 分片是es实现集群水平扩展的最小单位。
  • 当分片过多时,会导致额外的性能开销:
  • 每次搜索,需要从每个分片获取数据。
  • 分片的Meta信息会变多,增加主节点的负担。

分片建议

  • 日志类应用,单分片不超50GB。
  • 搜索类应用,单分片不超20GB。
  • 为什么要控制:
    • 提高更新时的性能。
    • 分片合并时,减少所需资源。
    • 节点丢失后,具备更快恢复速度(分片小便于在集群内移动)

副本建议

  • 副本是主分片的拷贝,目的是提高系统可用性:可以执行查询,并且避免数据丢失;副本分片需要占用和主分片一样的资源。
  • 副本分片会降低数据的索引(写入)速度:有几份副本就会有几倍的CPU资源消耗。
  • 可以减缓对主分片的查询压力,但是会消耗同样的内存资源;如果机器资源充分,提高副本数可以提高整体的查询QPS。

相关设置

  • Es分片策略会尽量保证节点上的分片数大致相同。可能会产生问题: 扩容时,原有节点磁盘基本写满了,新索引会集中在新加的节点上,导致数据分布不均匀。
  • index.routing.allocation.total_shards_per_node设置为1,可以限制一个索引在单个节点上只能有一个分片(主分片或者副本)

关于elastic中映射的理解,可以查看这篇文章ElasticSearch 6.x 学习笔记:11.映射Mapping-腾讯云开发者社区-腾讯云

参考链接:                       

                        Elasticsearch:分片和集群设计_es 只有一个分片可以吗-CSDN博客

Step by step怎样部署一套生产环境下的elastic stack 7.2技术栈【一】—— 需要掌握的一些elastic重要概念与配置参数_生产环境部署elasticsearch7.2 3台主机 如何分配节点属性-CSDN博客
 

相关文章:

一些elasticsearch重要概念与配置参数

ES 是在 lucene 的基础上进行研发的,隐藏了 lucene 的复杂性,提供简单易用的 RESTful Api接口。ES 的分片相当于 lucene 的索引。 Node 节点的几种部署实例 实例一: 只用于数据存储和数据查询,降低其资源消耗率 node.master: false node.da…...

leetcode 面试经典 150 题:螺旋矩阵

链接螺旋矩阵题序号54题型二维数组(矩阵)解题方法模拟路径法难度中等熟练度✅✅✅ 题目 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3…...

JAVA AOP简单实践(基于SpringBoot)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

java agent的使用【通俗易懂版】

一、静态代理Agent 1.生成Agent的jar包 (1)创建Agent项目,引入javassist.jar包 (2)编写premain方法 import java.lang.instrument.Instrumentation;public class Agent1 {public static void premain(Stri…...

大模型学习指南

随着人工智能的迅猛发展,大模型成为了技术前沿的璀璨明星。踏入大模型学习领域,需要在多个关键方面下功夫。 扎实的数学功底是基石。线性代数为理解多维数据、矩阵运算提供支撑,像大模型中权重矩阵的处理就离不开它;概率论与数理…...

单片机:实现定时器中断(数码管读秒+LED闪烁)(附带源码)

单片机实现定时器中断:数码管读秒与LED闪烁 在单片机项目中,定时器中断是一个常见的应用,用于实现定时任务,例如定时更新显示或控制周期性事件。本文将介绍如何使用定时器中断实现数码管读秒和LED闪烁功能。通过使用定时器中断&a…...

STM32单片机芯片与内部33 ADC 单通道连续DMA

目录 一、ADC DMA配置——标准库 1、ADC配置 2、DMA配置 二、ADC DMA配置——HAL库 1、ADC配置 2、DMA配置 三、用户侧 1、DMA开关 (1)、标准库 (2)、HAL库 2、DMA乒乓 (1)、标准库 &#xff…...

【0376】Postgres内核 分配 last safe MultiXactId

上一篇: 【0375】Postgres内核 XLOG 之 设置下一个待分配 MultiXactId 和 offset 文章目录 1. 最后一个安全的 MultiXactId1.1 计算 multi wrap limit1.2 计算 multi stop limit1.3 计算 multi warn limit1.4 计算 multi vacuum limit2. 初始化 MultiXactState 成员3. 完成 mu…...

php时间strtotime函数引发的问题 时间判断出错

在 PHP 中,strtotime 函数能处理的最大时间范围取决于您的系统和 PHP 版本。 一般来说,它可以处理的时间范围从 1901 年 12 月 13 日到 2038 年 1 月 19 日。超过这个范围可能会导致不可预测的结果或错误。 如果您需要处理更大范围的时间,可能…...

Kibana:LINUX_X86_64 和 DEB_X86_64两种可选下载方式的区别

最近需要在vm(操作系统是 Ubuntu 22.04.4 LTS,代号 Jammy。这是一个基于 x86_64 架构的 Linux 发行版)上安装一个7.17.8版本的Kibana,并且不采用docker方式。 在下载的时候发现有以下两个选项,分别是 LINUX_X86_64 和 …...

【LeetCode每日一题】 LeetCode 151.反转字符串中的单词

LeetCode 151.反转字符串中的单词 题目描述 给你一个字符串 s ,请你反转字符串中单词的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:…...

gitlab克隆仓库报错fatal: unable to access ‘仓库地址xxxxxxxx‘

首次克隆仓库,失效了,上网查方法,都说是网络代理的问题,各种清理网络代理后都无效,去问同事: 先前都是直接复制的网页url当做远端url,或者点击按钮‘使用http克隆’ 这次对于我来说有效的远端u…...

在已有vue cli项目中添加单元测试配置

使用的是vue cli ^4.0.0的脚手架,项目采用的vue2进行编写,项目本身是没有使用单元测试的。应该挺多项目还是使用的vue2的项目进行开发的,自己在开发中过程中,还是发生了挺多需要记录原来功能的情况,这个时候去翻文档明…...

企业级NoSql数据库REDIS集群

1.1数据库主要分为两大类:关系型数据库与 NoSQL数据库 关系型数据库,是建立在关系模型基础上的数把库,其借助于集合代数等数学概念和方法来处理数据库中的数掘主流的 MySQLOracle、Ms sOLSerer和 DB2 都属于这类传统数据库 NoSQL数据库,全称…...

HTML与数据抓取:GET与POST方法详解

讲GET和POST就不能只讲GET和POST 你要讲HTTP请求的基本概念: HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议,主要用于Web浏览器与Web服务器之间的数据通信。HTTP是一个基于…...

【es6复习笔记】模板字符串(3)

介绍 模板字符串是 ES6 引入的一种新的字符串声明方式,它使用反引号()来定义字符串,而不是单引号()或双引号(")。模板字符串可以包含变量、表达式和换行符,这使得它…...

cursor保存更改操作技巧

1. 当我们在agent模式时,要求cursor更改代码时,cursor回答后,就已经更改了代码了,这时候就可以对程序进行编译和测试, 不一定先要点” accept“, 先测试如果没有问题再点“accept”,这样composer就会多一条…...

ASP.NET |日常开发中定时任务详解

ASP.NET |日常开发中定时任务详解 前言一、定时任务的概念与用途1.1 定义1.2 应用场景 二、在ASP.NET中实现定时任务的方式2.1 使用System.Timers.Timer2.2 使用Quartz.NET 三、定时任务的部署与管理3.1 部署考虑因素3.2 管理与监控 结束语优质源码分享 ASP.NET &am…...

【零基础保姆级教程】制作自己的数据集(二)——Labelme的安装与使用及常见的报错解决方法

前段时间安装了Labelimg,网上有些博客写着Labelme能进行语义分割的标注,但UI窗口就那么大找不着选项,只能打矩形框,为了能够标注自己的分割数据集,遂写下该教程以供参考。 采用Labelimg进行目标检测标注的教程如下。 …...

Move AI技术浅析(二):输入与预处理

一、视频输入模块 1.1 视频输入步骤详解 视频输入模块的主要任务是接收视频数据,并将其转换为后续处理所需的格式。具体步骤: 1.1.1 视频读取 步骤:从文件系统、网络流或摄像头读取视频数据。技术:使用 OpenCV 的 cv2.VideoCa…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Java 加密常用的各种算法及其选择

在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found"​, "n…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...